Hi,
wie schon in meinem imba Blog ([Only registered and activated users can see links. Click Here To Register...]) steht, habe ich vor ein, zwei Monaten mein AutoIt Tool nach x64 portiert und dabei, um es mir einfach zu machen, einen IAT Hook benutzt, der allerdings nicht bei gepackten Targets funktioniert.
Deswegen wollte ich mich mal dransetzen und meine eigene Hook Funktion schreiben, die wie die im Blogpost angegebenen Hooking Libraries RIP-relativen Code fixt.
Dafür muss man aber logischerweise die Instruktionen, die man sichern und dann fixen will, erstmal analysieren/auseinandernehmen, um zu sehen, ob sie überhaupt RIP-relativ sind. Außerdem benötigt man die Größen der Instruktionen, damit beim Sichern der alten Bytes am Funktionseinstieg, der zu hooken ist, Befehle nicht auseinandergerissen werden.
Da ich keine 64bit Length Disassembler Engine (außer der LDE64 von Beatrix, die mir mit über 12.000 Bytes allerdings zu groß ist und zudem ausschließlich die Länge einer Instruktion zurückgibt) gefunden habe, die ich mit FASMW benutzen könnte, habe ich mir eine eigene geschrieben und sie un[F]ancy [D]isassembler [E]ngine genannt :)
Unterstützt werden General-Purpose Instruktionen, FPU, MMX, 3DNow!, SSE-SSE4.2, AVX, VMX und SMX.
Ausführliche ReadMe.txt und .obj- und Headerdatei für C++ liegen bei.
* fde64 ist in x64 asm (fde64.obj ist eine x64-coff Datei) und für x64 Instruktionen geschrieben.
* fde32 in x86 asm und für x86 Instruktionen.
wie schon in meinem imba Blog ([Only registered and activated users can see links. Click Here To Register...]) steht, habe ich vor ein, zwei Monaten mein AutoIt Tool nach x64 portiert und dabei, um es mir einfach zu machen, einen IAT Hook benutzt, der allerdings nicht bei gepackten Targets funktioniert.
Deswegen wollte ich mich mal dransetzen und meine eigene Hook Funktion schreiben, die wie die im Blogpost angegebenen Hooking Libraries RIP-relativen Code fixt.
Dafür muss man aber logischerweise die Instruktionen, die man sichern und dann fixen will, erstmal analysieren/auseinandernehmen, um zu sehen, ob sie überhaupt RIP-relativ sind. Außerdem benötigt man die Größen der Instruktionen, damit beim Sichern der alten Bytes am Funktionseinstieg, der zu hooken ist, Befehle nicht auseinandergerissen werden.
Da ich keine 64bit Length Disassembler Engine (außer der LDE64 von Beatrix, die mir mit über 12.000 Bytes allerdings zu groß ist und zudem ausschließlich die Länge einer Instruktion zurückgibt) gefunden habe, die ich mit FASMW benutzen könnte, habe ich mir eine eigene geschrieben und sie un[F]ancy [D]isassembler [E]ngine genannt :)
Unterstützt werden General-Purpose Instruktionen, FPU, MMX, 3DNow!, SSE-SSE4.2, AVX, VMX und SMX.
Ausführliche ReadMe.txt und .obj- und Headerdatei für C++ liegen bei.
* fde64 ist in x64 asm (fde64.obj ist eine x64-coff Datei) und für x64 Instruktionen geschrieben.
* fde32 in x86 asm und für x86 Instruktionen.