Eine kleine .dll wird geschrieben, die mithilfe der Microsoft Detours Library die MessageBoxA Funktion detourt, und den Text ersetzt, sobald sie in einen Prozess injeziert wird. Ich hoffe ich konnte es einigermaßen verständlich erklären (mein Gedankenfluss ist manchmal etwas wirr).
Schick!
Gibt es einen Grund warum du dich gegen die Benutzung der 2.1'er Version entschieden hast?
Ehrlich gesagt weiß ich gar nicht, ob Detours 2.1 vielleicht sogar im Hintergrund besser/sicherer arbeitet, allerdings, wenn du schon mal etwas mit Detours 2.1 gemacht hast: bei Detours 1.5 reicht eine Funktion. Bei Detours 2.1 musst du, wenn ich mich recht erinnere, mindestens 4 oder 5 Funktionen aufrufen, um dein Detour zu setzen. Also aus Bequemlichkeit.
Wenn es gute Argumente gegen 1.5 gibt, ich bin umstimmbar.
Detours erzeugt keine Kopie von der Original Funktion, es werden lediglich die für den Sprung überschriebenen Opcodes kopiert und diese werden in eine "Trampolin"Funktion geschrieben, diese besteht aus den überschriebenen Bytes der Detourten Funktion und einem Sprung in die Original Funktion nach dem Detour Sprung, Detours achtet dabei auch auf eventuell überschriebene Sprung- und Callbefehle.
Und die Detours 1.5 Library ist nicht wirklich Thread sicher, es könnte passieren das der Scheduler während des Patchvorgangs in der DLLMain meint das ein Thread des Programms jetzt lieber weiterlaufen sollte und dann die nicht vollständig gepatchte Funktion aufgerufen wird und das Programm abschmiert, um das zu vermeiden benutzt man zur DLL injection am besten die CreateProcessWithDll (der Name ist eventuell anders) Funktion aus der Detours Library.
Nebenbei: JMPs kann man natürlich auch überall hinschreiben, es muss also nicht immer am Anfang einer Funktion sein.
@Atheuz:
Da geht an einer Analyse nichts vorbei.
Du müsstest den Prozess debuggen und dir den Stack anschauen, wenn in die Funktion gesprungen wird.
Das mit dem typedef kannst du auch ignorieren, wenn du auf Inline ASM zurückgreifst (Habe ich auch gemacht...).
Nun ja, so eine grundlegende Vorgehensweise je nachdem was man finden möchte kann man schon vermitteln.
RDTSC: Schon, aber würde das nicht ggf. Probleme mit den Parametern nach sich ziehen, wenn vor dem Jump schon am Stack rumgewerkelt wurde?
Zum Thema Inline ASM: Inline ASM erleichtert oft einiges, allerdings ist das aufgrund der Anfängerfreundlichkeit die ich hier erzielen möchte wohl keine gute Idee für das Video.
Ich habe es doch noch ein mal neu aufgenommen und eine kleine Zeichnung zur Erklärung gemacht.
"Nun ja, so eine grundlegende Vorgehensweise je nachdem was man finden möchte kann man schon vermitteln."
Jaja, klar.... halt den Stack begutachten ;-)
Ich meinte das eher so, dass man überall einfach so damit Code injizieren kann.
Auch irgendwo dort, wo deine Lebenspunkte dekrementiert werden.
Da packst du dann halt z.B. Code zu, der eine Nachricht ausgibt und deine LP um 30 erhöht.
Man sollte das nicht so HLL-like betrachten, dass man so Funktionen hookt...
Mitten in einer Funktion geht es natürlich auch und wenn die Funktion einen Stack Frame hat (Ich schätze mal, dass es da auch eine Konvention gibt, dass alle WinAPI Funktionen, die Parameter entgegen nehmen, einen standardisierten Stack Frame erstellen), wird man mit den Parametern keine Probleme haben.
War doch bestimmt Absicht :P
Aber geiler Smiley für diesen Kontext /no1
Ich habe mir gerade einmal die Zeichnung deines überarbeiteten Videos angeschaut:
In deinem Beispiel ist der Begriff 'springen' nicht falsch, auch wenn du es nicht tust...
Wenn du die Trampolinfunktion aufrufst, springt diese zum restlichen Teil der originalen Funktion und am Ende dieser wird beim Return wieder zu deiner gesprungen, in der nur noch ein Befehl folgt, der dahin springt, von wo MessageBoxA aufgerufen wurde (+ 5 wegen des relativen JMPs).
Der Stack wird also unnötig 2x mehr benutzt und ein Opcode ist auch zuviel...
Bei einem JMP und Parameter verändern (über Inline ASM) anstatt CALL und Parameter alle erneut pushen würde von deiner Funktion zur Trampolinfunktion, die zur originalen springt, von wo aus das Return den Instruction Pointer dann direkt auf den Caller setzt, gesprungen werden.
[ Was mir gerade mal so aufgefallen ist... ]
Der Compiler scheint das automatisch zu optimieren, und nicht zu knapp...
Das, was ich oben geschrieben habe, bringt ja nur etwas, wenn nach dem Sprung zur Trampolinfunktion nichts mehr kommen soll.
Da der Compiler aber automatisch den Stack updatet und dann zur Trampolinfunktion springt (anstatt noch einmal alles zu pushen und die Funktion dann mit einem CALL aufzurufen), ist es nichtig, was ich oben geschrieben habe, da es halt automatisch passiert...
Falls jemand mein Posting nicht versteht, weil es voll scheiße ist, einfach alles überlesen :x
MS Detours 1.5 07/16/2010 - Kal Online - 10 Replies hi,
i'm having problem trying to compile my dll using ms detours 2.1 (not 1.5, sorry)
detours.lib(detours.obj) : error LNK2001: unresolved external symbol "struct HINSTANCE__ * __stdcall Detoured(void)" (?Detoured@@YGPAUHINSTANCE__@@XZ)
G:\KalOnline\d3dx9_29.dll : fatal error LNK1120: 1 unresolved externals
could someone tell me how to solve it?
could not google it.
Can EDX Detours be used for multibotting 06/19/2010 - SRO Private Server - 12 Replies After editing source code can this be done? In EDX Detours thread he wrote this app can be used for another programs after tweaking the source. But i don't have any programming skills,so anyone who knows c++ please take a look at it http://www.elitepvpers.com/forum/sro-guides-templat es/308740-guide-using-windows-detours-redirect-sil kroad-proxy.html