Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 21:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Tutorial] Microsoft Detours

Discussion on [Tutorial] Microsoft Detours within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
[Tutorial] Microsoft Detours

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).

Es ist auf Deutsch.

schlurmann is offline  
Thanks
27 Users
Old 05/18/2009, 19:52   #2
 
scbiz's Avatar
 
elite*gold: 196
Join Date: Nov 2005
Posts: 625
Received Thanks: 192
Schick!
Gibt es einen Grund warum du dich gegen die Benutzung der 2.1'er Version entschieden hast?
scbiz is offline  
Thanks
1 User
Old 05/18/2009, 20:19   #3
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
Quote:
Originally Posted by scripteur View Post
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.
schlurmann is offline  
Thanks
1 User
Old 05/18/2009, 21:28   #4
 
elite*gold: 0
Join Date: Nov 2008
Posts: 576
Received Thanks: 191
find ich sehr gut gemacht und ist auch alles bestens erklärt
gj schlurmann!
__wadim is offline  
Old 05/18/2009, 22:12   #5
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
Freut mich. Danke. Dann kann ich ja mehr produzieren. Vorschläge?
schlurmann is offline  
Old 05/18/2009, 23:55   #6
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
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.
Bot_interesierter is offline  
Thanks
1 User
Old 05/19/2009, 00:12   #7
 
elite*gold: 0
Join Date: Apr 2009
Posts: 67
Received Thanks: 83
Hm, als ich mir das Video angeschaut habe, hat der Bot Interessierte seine Chance ergriffen und mir die Berichtigung vorweg genommen... :-/

Damit mein Beitrag nicht nur aus Spam besteht:
So eine Detour-Funktion kann man auch leicht selber schreiben, siehe meinen kleinen Teeworlds Bot.
RDTSC is offline  
Old 05/19/2009, 00:18   #8
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
Das wusste ich nicht. Danke. Ich habe allerdings keine Lust ein neues Video zu drehen, ich schreibe es darunter auf.

Edit: Ich habs berichtigt.
schlurmann is offline  
Old 05/19/2009, 12:41   #9
 
Atheuz's Avatar
 
elite*gold: 81
Join Date: Jul 2005
Posts: 1,921
Received Thanks: 2,239
Wird es nächstes mal auch ein Video geben wo du an einen einfachen Spiel erklärst wie man die typdef und argumente bekommt, falls es keine API ist?

<- Hat keine Ahnung, also nicht schlagen o,o
Atheuz is offline  
Old 05/19/2009, 12:54   #10
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
Quote:
Originally Posted by Atheuz View Post
Wird es nächstes mal auch ein Video geben wo du an einen einfachen Spiel erklärst wie man die typdef und argumente bekommt, falls es keine API ist?

<- Hat keine Ahnung, also nicht schlagen o,o
Klar, kann ich machen.
schlurmann is offline  
Thanks
3 Users
Old 05/19/2009, 14:15   #11
 
elite*gold: 0
Join Date: Apr 2009
Posts: 67
Received Thanks: 83
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...).
RDTSC is offline  
Old 05/19/2009, 15:52   #12
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
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.
schlurmann is offline  
Thanks
1 User
Old 05/19/2009, 18:57   #13
 
elite*gold: 0
Join Date: Apr 2009
Posts: 67
Received Thanks: 83
"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.
RDTSC is offline  
Thanks
1 User
Old 05/20/2009, 10:39   #14
 
Atheuz's Avatar
 
elite*gold: 81
Join Date: Jul 2005
Posts: 1,921
Received Thanks: 2,239
Quote:
Originally Posted by schlurmann View Post
ಠ_ಠ
Atheuz is offline  
Thanks
3 Users
Old 05/20/2009, 15:27   #15
 
elite*gold: 0
Join Date: Apr 2009
Posts: 67
Received Thanks: 83
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
RDTSC is offline  
Reply


Similar Threads Similar Threads
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



All times are GMT +1. The time now is 21:13.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.