Hamtaro
22.02.2017, 22:35
https://git.free-hack.com/hamham/hotpatch_hooking
Ein kleines Beispiel welches zeigt wie man WinApis hooken kann, mittels der von Microsoft so beabsichtigten Hotpatch-Methode
(Eine bessere Erläuterung dazu hier https://blogs.msdn.microsoft.com/oldnewthing/20110921-00/?p=9583)
Kurz erklärt sind die ersten beiden Bytes der Api mov edi, edi, was überhaupt nichts macht. Und vor der Funktion sind mindestens 5 Bytes frei. Man überschreibt also die ersten beiden Bytes mit einem jmp $ - 5, also 5 zurück. Und in diese 5 bytes platziert man dann die lange jmp instruction zu deiner Hooking-Funktion. Das hat den kleinen Vorteil, dass man keine Trampolin-Func braucht sondern einfach (OriginaleAddresse + 2) aufrufen kann um den Jmp zu skippen.
Sollte so in jedem 32bit Prozess mit den allermeisten Windows Apis funktionieren.
Eine Ausnahme sind z. B. die syscall-wrapper in ntdll.dll, z. B. NtQuerySystemInformation.
Zu denen kann ich aber sonst irgendwann mal was posten.
Ein kleines Beispiel welches zeigt wie man WinApis hooken kann, mittels der von Microsoft so beabsichtigten Hotpatch-Methode
(Eine bessere Erläuterung dazu hier https://blogs.msdn.microsoft.com/oldnewthing/20110921-00/?p=9583)
Kurz erklärt sind die ersten beiden Bytes der Api mov edi, edi, was überhaupt nichts macht. Und vor der Funktion sind mindestens 5 Bytes frei. Man überschreibt also die ersten beiden Bytes mit einem jmp $ - 5, also 5 zurück. Und in diese 5 bytes platziert man dann die lange jmp instruction zu deiner Hooking-Funktion. Das hat den kleinen Vorteil, dass man keine Trampolin-Func braucht sondern einfach (OriginaleAddresse + 2) aufrufen kann um den Jmp zu skippen.
Sollte so in jedem 32bit Prozess mit den allermeisten Windows Apis funktionieren.
Eine Ausnahme sind z. B. die syscall-wrapper in ntdll.dll, z. B. NtQuerySystemInformation.
Zu denen kann ich aber sonst irgendwann mal was posten.