[C++] Hooken einer Funktion?

09/07/2011 23:52 vwap#1
Hallo,

ich versuche gerade eine Funktion in CPP zu hooken.
In OllyDBG sieht es so aus:
Code:
CPU Disasm
Address   Hex dump          Command                                  Comments
0040E54D  |.  8D8C24 840000 LEA ECX,[ESP+84]
0040E554  |.  51            PUSH ECX                                 ; /Arg3
0040E555  |.  50            PUSH EAX                                 ; |Arg2
0040E556  |.  8D5424 38     LEA EDX,[ESP+38]                         ; |
0040E55A  |.  52            PUSH EDX                                 ; |Arg1
0040E55B  |.  C68424 A40100 MOV BYTE PTR SS:[ESP+1A4],1              ; |
0040E563  |.  E8 581D0000   CALL 004102C0                            ; \Easymetin2.004102C0
0040E568  |.  83C4 0C       ADD ESP,0C
Wie sieht das dann in C++ aus?
09/08/2011 21:27 Medix#2
Wo ist dein Ansatz? :>
09/10/2011 12:21 SmackJew#3
Schreib doch gleich "schreibt mir mal bitte nen Hook für die Funktion hier"...

Überschreib die ersten fünf (ein JMP/CALL bringts auf 5 Bytes wenn ich mich recht erinnere) Bytes mit dem JMP/CALL zu deiner Funktion (welche entweder naked, also ohne Calling Convention oder mit derselben Calling Convention wie die gehookte Funktion sein kann), dann, wenn ggf. innerhalb der ersten 5 Bytes Instructions abgeschnitten wurden, musst du natürlich die restlichen Bytes der Instruction NOPen, damit die dann nicht eine neue Instruction bilden. Dann machst du in deiner Funktion was du möchtest und vergiss bitte nicht die überschriebene Instruction auszuführen. Die Parameter auf dem Stack darfst du natürlich auch nicht außer Acht lassen, die müssen wenn du dann am Ende deiner Funktion wieder zurück in die gehookte Funktion + "gelöschte" Bytes steigst auch an der selben Position sein (bzw. eben an der Position an die sie die überschrieben Instruction stellt. Viel Glück!
09/10/2011 15:31 xNopex#4
5Bytes genügen bei 32bit Bteriebssystemen. Bei 64bit würde ich mir das nochmal überlegen. Da kann die Speicheradresse der Funktion auchmal größer als 4Bytes sein.
09/10/2011 21:15 .SkyneT.#5
Quote:
Easymetin2
Ist ziemlich gut gesichert...
Nur ein Hinweis, wenn du versuchst den Login oder so zu bypassen ,
das wird vieeeel Arbeit ;)

Zum Hooken haben meine Vorposter schon sogut wie alles gesagt.
(wenn auch etwas unübersichtlich :rolleyes: )
MfG
09/11/2011 12:10 .BritainAndy#6
Quote:
Originally Posted by .SkyneT. View Post
Ist ziemlich gut gesichert...
Nur ein Hinweis, wenn du versuchst den Login oder so zu bypassen ,
das wird vieeeel Arbeit ;)

Zum Hooken haben meine Vorposter schon sogut wie alles gesagt.
(wenn auch etwas unübersichtlich :rolleyes: )
MfG
Postcounter hochpushen?
Und wieso unübersichtlich? SmackJew hat gesagt wie es geht, was daran unübersichtlich ist versteh ich jetzt nicht so ganz
09/12/2011 22:19 MrSm!th#7
Quote:
Originally Posted by xNopex View Post
5Bytes genügen bei 32bit Bteriebssystemen. Bei 64bit würde ich mir das nochmal überlegen. Da kann die Speicheradresse der Funktion auchmal größer als 4Bytes sein.
Da die meisten Programme aber für x86 kompiliert und auf der WOW64 VM laufen, macht das keinen Unterschied, da werden virtuell trotzdem nur 4 Bytes zur Addressierung genutzt.