|
You last visited: Today at 16:19
Advertisement
[C++] Hooken einer Funktion?
Discussion on [C++] Hooken einer Funktion? within the C/C++ forum part of the Coders Den category.
09/07/2011, 23:52
|
#1
|
elite*gold: 14
Join Date: May 2011
Posts: 2,671
Received Thanks: 818
|
[C++] Hooken einer Funktion?
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
|
#2
|
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
|
Wo ist dein Ansatz? :>
|
|
|
09/10/2011, 12:21
|
#3
|
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
|
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
|
#4
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
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
|
#5
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Quote:
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  )
MfG
|
|
|
09/11/2011, 12:10
|
#6
|
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
|
Quote:
Originally Posted by .SkyneT.
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  )
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
|
#7
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,907
Received Thanks: 25,408
|
Quote:
Originally Posted by xNopex
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.
|
|
|
 |
Similar Threads
|
In einer laufenden Anwendung .dll funktion Aufrufen
03/30/2011 - AutoIt - 10 Replies
hallo,
wie es in der Überschrift schon steht möchte ich in einem laufendem Spiel eine funktion aus dessen .dll aufrufen. Habe dazu noch nichts richtiges gefunden und wollte deshalb euch fragen. Normal wird durch einen Tastendruck diese Funktion ausgelöst. Da aber diese Taste (tab-taste) im Spiel geblockt wird (funktion existiert aber noch) will ich nun mithilfe eines externen Programms die Funktion aufrufen.
ProzessName: Nksp.exe
DllName: Engine.dll
Hoffentlich könnt ihr mir helfen ;)
...
|
[C++] Vraiblen einer KLasse in die Funktion einer anderen einfügen
03/14/2011 - C/C++ - 10 Replies
Hallo Leute,
Ich habe mal wieder eine Frage :D
Ich bin gerade dabei ein kleines Spiel(noch ist es klein ;D) zu programmieren.
Dabei bin ich auf das Problem gestoßen, dass ich gerne die Verteidigung der "User" Class in eine Berechnung(Funktion) einer "Npc" Class einbinden würde. Dies funktioniert aber weder durch:
-Einführen einer Funktion in der User class die eine Variable returned die den selben Wert besitzt, wie die Variable der Verteidigung in der Userclass
-Direktes Aufrufen der...
|
Hilfe bei einer Quest (Spezial Funktion)
07/29/2010 - Metin2 Private Server - 8 Replies
Hallo zusammen :)
und zwar möchste ich einer NPC eine bestimmte funktion geben !
Ist eig. ne simple funktion nur ich weiß nicht wie ich das machen soll xD
Kommen wir mal jetzt zur der Funktion:
Wenn man auf die NPC klickt soll ein kleines Fenster erscheinen. Dort soll z.B. GM stehen. Wenn man dann drauf klickt soll eine Passwortabfrage kommen (könnte z.B LagerPW sein oder so) !
Wäre so was möglich? Wenn ja wie kann man das machen ?
Helfer bekommen reichlich Thx :D
|
[C++]Funktion einer Klasse in einer anderen Funktion der Klasse verwenden, aber wie?
07/25/2010 - C/C++ - 3 Replies
Mein Problem ist eigentlich recht simpel und die Lösung wahrscheinlich auch.
Da ich bisher fast 0 mit Klassen am Hut hatte, wollte ich mich doch mit dem Thema anfreunden und hatte gleich angefangen:
int test::Funktion2()
{
int temp;
cin>>temp;
return temp;
}
|
All times are GMT +1. The time now is 16:22.
|
|