Also ich versteh den import struct einfach nicht..
Irgendwie verstehe ich die struktur dahinter nicht.
Ich denk mal so komm ich sicher nicht an den namen der importierten function?...
Delphi-Quellcode:
function CheckImports (phandle : pointer): boolean;
type timportblock =
record
Characteristics: cardinal;
TimeDateStamp: cardinal;
ForwarderChain: cardinal;
Name: pchar;
FirstThunk: pointer;
end;
pimportblock = ^timportblock;
var IDH1 : PImageDosHeader;
INH1 : PImageNtHeaders;
ImpTable1 : pimportblock;
thunks: ^pointer;
funcname : pchar;
old : cardinal;
begin
IDH1 := phandle;
if (IDH1^.e_magic = IMAGE_DOS_SIGNATURE)
then
begin
Form1.Memo1.Lines.Add('
dll found');
INH1 := pointer(integer(idh1)+integer(IDH1^._lfanew));
impTable1 := pointer(integer(idh1)+integer(inh1^.OptionalHeader.DataDirectory[1].VirtualAddress));
while (impTable1^.FirstThunk <>
nil)
do
begin
thunks := pointer(integer(impTable1^.FirstThunk)+integer(IDH1));
while thunks^ <>
nil do
begin
if VirtualProtect(thunks,4,PAGE_EXECUTE_READWRITE, old)
then
begin
if impTable1^.
Name = pchar('
glBegin')
then Form1.Memo1.Lines.Add('
glbegin import');
result := true;
VirtualProtect(thunks,4,old, old);
end;
thunks := pointer(integer(thunks)+4);
end;
impTable1 := pointer(integer(impTable1)+sizeof(TImportBlock));
end;
end;
end;
Der teil ist vermutlich völliger unsinn:
if impTable1^.Name = pchar('glBegin') then Form1.Memo1.Lines.Add('glbegin import');
Aber ich hab auch keine idee wie ich da ran kommen soll.
Ich dachte ich mach mal was einfacheres und versuche .dlls nach importierten funktionen zu durchsuchen.
Das ergebnis sieht man
Arnulf