Entwickler-Ecke
Windows API - hook auf virtualquery
lam0r - So 03.07.05 02:57
Titel: hook auf virtualquery
Hi!
nachdem mir letztes mal so geholfen wurde, wende ich mich nochmals an euch.
Diesmal habe ich ein anderes Problem:
Ich möchte einen Hook auf VirtualQuery machen, der die normale Arbeit von VirtualQuery verarbeitet.
Sollte jedoch mein kleines Testprogramm nach einer dynamisch geladenen dll fragen, soll eine falsche Speicher-Adresse zurückgeliefert werden. Es geht dabei um ein Exe Verschlüsselungs Projekt im Rahmen meiner Diplom-Arbeit. Nun habe ich den Verschlüsseler fast fertig, teste also eventuelle Gegenmaßnahmen, um diese wiederum abzuwehren. Mein Verschlüsselungsprogramm lädt die verschlüsselte Exe unverschlüsselt in den Speicher, führt diese aus und fängt danach fröhlich und kontinuierlich an, diese zu scannen, um eventuelle *nicht gewünschte* veränderungen aufzudecken. Dabei fragt sie eben über VirtualQuery die dynamisch geladenen DLLs ab, um diese auch zu scannen. Nun meinte ein Kollege, man könnte doch ne memcopy von der ganzen Exe machen, und den Scanner auf diese Kopie mittels eines API Hooks umleiten.
Ich hab allerdings keinen Plan von so heftiger API Programmierung, deher wollte ich euch fragen, ob ihr mir da vielleicht weiterhelfen könnt. :roll:
Danke im Voraus!
lam0r - Di 12.07.05 14:11
Hi. Hat niemand einen Tipp?
Hier die Definition von MSDN:
Quelltext
1: 2: 3: 4: 5:
| SIZE_T VirtualQuery( LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength ); |
Hier meine Delphi Hook Funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function myVirtualQuery(oldfunc:pointer;mbi:TMemoryBasicInformation;size:dword):longword;stdcall; begin result:=OldVirtualQuery(oldfunc,mbi,size); MessageBox(0,'this is the hook speaking...',PChar(pbowned),0); assignfile(f,filename); if not fileexists(filename) then rewrite(f) else reset(f); append(f); writeln(f,'OldFunc: ',PChar2Str(PChar(oldfunc)),' BaseAddress: ',PChar2Str(PChar(mbi.BaseAddress)),' AllocationBase: ',PChar(mbi.AllocationBase)); flush(f); close(f); end; |
Vielleicht weiß jemand, wieso ich nur Datenmüll in der Log Datei bekomme
(HexCode Müll). Ich denke, es liegt eine klassischer Type Mismatch vor.
Vielen Dank im Voraus, antwortet bitte auch, falls ihr nur Fragen habt.
@uall: vielleicht kannst du mir ja helfen, du scheinst ja wirklich viel Ahnung davon zu haben :)
MrSaint - Mo 15.08.05 15:03
Was bekommst du denn in der Log-Datei für "Müll"? Mach mal n Beispiel :)
Und dann: du kannst bei dem Hook ja nicht garantieren, dass er nicht gleichzeitig öfters ausgeführt wird (wenn z.B. das verschlüsselte Programm Threads benutzt). Somit würd ich noch ne CriticalSection einführen.
Achja, ich geh mal davon aus, dass du deine Hook-Funktion (also die Funktion, die den Hook "aktiviert") getestet ist und funktioniert :)
MrSaint
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!