Einzelnen Beitrag anzeigen

Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Globaler API-Hook funktioniert nicht

  Alt 14. Mai 2008, 18:20
Also davon auszugehen, dass die ersten fünf Bytes einer jeden Win32-API-Funktion IMMER vollständige Befehle sind (also nicht z.B. ein Befehl von Byte vier bis sieben geht) finde ich schon sehr gewagt. Es gibt fertige Disassemblermodule die einem die Länge des Assemblerbefehls an einer beliebigen Speicheradresse zurückliefern, mit denen kann man dann so viele Bytes kopieren wie notwendig sind, um nicht einen Assemblerbefehl zu schreddern. Dabei kommen sonst nämlich oft genug die seltsamsten Pseudobefehle heraus... Dass der Prozess sich dann seltsam verhält oder falsche Ergebnisse liefert, darf nicht verwundern.

Also: Nicht immer davon ausgehen, dass "fünfe gerade ist" Das kann derb ins Auge gehen. Einfach Opcodelängen zählen und die notwendige Anzahl Bytes kopieren. Und BTW: Das Gejammer über eine allozierte Speicherpage mehr ist echt kindisch. Speicher wird immer nur in kompletten Pages alloziert, selbst wenn man nur ein Byte über die Pagegrenze kommt. Das ist Windows echt total schnurz, also einfach eine page allozieren, Anfang der API-Funktion wie oben beschrieben rüberkopieren, absoluten Jump hinter den kopierten Bytes einfügen und dann mittels WriteProcessMemory den Anfang der API-Funktion überschreiben.

Achtung beim prozessübergreifenden Hooking: Viele "Kopierschutz"-Tools checken APIs oder zumindest deren Anfang auf bekannte Manipulationen (EB FE, CC, etc.) und verweigern dann die Benutzung der "geschützten" Software.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat