Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 10:56

  • 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 11/29/2009, 08:41   #46
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Quote:
Originally Posted by Gianotti View Post
ein call befindet sich an einer bestimmten adresse mit bestimmten parametern im speicher des klienten. wenn du diese sachen weißt dann wird das nicht so schwer sein

ich denk aber eher daran : wieso überhaupt detouren , wenn du ehh weißt wo die adresse liegt o.0? dann einfach direkt in c++ callen lassen?
Bei einem Detour geht es darum eine Funktion um zu Leiten, das braucht man wenn man zum Beispiel wissen möchte welche Parameter das Programm der Funktion übergeben hat um diese dann Gegebenenfalls zu ändern oder damit etwas an zu stellen.

Es gibt viele Dinge die ohne einen Detour nicht praktikabel um zu setzten sind, dazu gehört es zum Beispiel Datenpakete abzufangen, außerdem kann man durch einen Detour Code innerhalb eines fremden Threads ausführen, was man oft Benötigt wenn man überhaupt Funktion des Programms/Spiels ausführen möchte, da diese oftmals Thread lokale Variablen verwenden.

Wie du siehst unterscheidet sich die Verwendung eines Detours stark vom Aufrufen einer Funktion des Programms und die Problemstellung die dem zu Grunde liegt ist auch eine andere, darum stellt sich die Frage
Quote:
wieso überhaupt detouren , wenn du ehh weißt wo die adresse liegt o.0? dann einfach direkt in c++ callen lassen?
überhaupt nicht.
Bot_interesierter is offline  
Old 11/29/2009, 15:38   #47
 
Gianotti's Avatar
 
elite*gold: 20
Join Date: Mar 2008
Posts: 1,455
Received Thanks: 140
Quote:
Originally Posted by Bot_interesierter View Post
Bei einem Detour geht es darum eine Funktion um zu Leiten, das braucht man wenn man zum Beispiel wissen möchte welche Parameter das Programm der Funktion übergeben hat um diese dann Gegebenenfalls zu ändern oder damit etwas an zu stellen.

Es gibt viele Dinge die ohne einen Detour nicht praktikabel um zu setzten sind, dazu gehört es zum Beispiel Datenpakete abzufangen, außerdem kann man durch einen Detour Code innerhalb eines fremden Threads ausführen, was man oft Benötigt wenn man überhaupt Funktion des Programms/Spiels ausführen möchte, da diese oftmals Thread lokale Variablen verwenden.

Wie du siehst unterscheidet sich die Verwendung eines Detours stark vom Aufrufen einer Funktion des Programms und die Problemstellung die dem zu Grunde liegt ist auch eine andere, darum stellt sich die Frage überhaupt nicht.
eine frage hätte ich zudem noch : in dem tutorial von schlurmann ( send funktion von metin hooken und benutzen ) kann er eine funktion callen (ohne detours ) und das mit einer simplen dll injection .

es geht also doch auch ohne detours wie ich das sehe oder irre ich mich da?

ich lasse mich gerne belehren
Gianotti is offline  
Old 11/29/2009, 16:50   #48
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Quote:
Originally Posted by Gianotti View Post
eine frage hätte ich zudem noch : in dem tutorial von schlurmann ( send funktion von metin hooken und benutzen ) kann er eine funktion callen (ohne detours ) und das mit einer simplen dll injection .

es geht also doch auch ohne detours wie ich das sehe oder irre ich mich da?

ich lasse mich gerne belehren
Das lässt sich mittels Function Pointer realisieren.
ms​ is offline  
Old 11/29/2009, 16:52   #49
 
Gianotti's Avatar
 
elite*gold: 20
Join Date: Mar 2008
Posts: 1,455
Received Thanks: 140
Quote:
Originally Posted by Disconnect View Post
Das lässt sich mittels Function Pointer realisieren.
achso danke für den link.

detours ist wohl sehr komfortabel wie man sieht
Gianotti is offline  
Old 11/30/2009, 01:46   #50
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
Ich glaub ihr verwechselt hier etwas. Detours sind nicht da um irgendwelche Funktionen zu callen. Sie sind da um, wie der Name schon sagt, eine Funktion umzuleiten. Wenn diese Funktion vom Programm aufgerufen wird, wird erst der Call/Jump zu einer anderen Funktion ausgeführt, am Ende der Funktion wird dann wieder zum Original zurückgesprungen. Der Stack verändert sich beim Jump nicht und so kann man sogar sehr komfortabel auf die Parameter zugreifen (das geht auch beim Call, nur muss dann beachtet werden, dass ganz oben auf dem Stack die return Adresse liegt), nützlich zum Beispiel wenn man bestimmte Funktionsparameter überwachen/verändern möchte.

Detours müssen auch nicht am Funktionsanfang stehen, oft ist ein Detour an einer anderen Stelle sehr hilfreich, wenn man zum Beispiel Register an einer bestimmten Stelle auslesen möchte.
schlurmann is offline  
Old 11/30/2009, 11:39   #51
 
Gianotti's Avatar
 
elite*gold: 20
Join Date: Mar 2008
Posts: 1,455
Received Thanks: 140
Quote:
Originally Posted by schlurmann View Post
Ich glaub ihr verwechselt hier etwas. Detours sind nicht da um irgendwelche Funktionen zu callen. Sie sind da um, wie der Name schon sagt, eine Funktion umzuleiten. Wenn diese Funktion vom Programm aufgerufen wird, wird erst der Call/Jump zu einer anderen Funktion ausgeführt, am Ende der Funktion wird dann wieder zum Original zurückgesprungen. Der Stack verändert sich beim Jump nicht und so kann man sogar sehr komfortabel auf die Parameter zugreifen (das geht auch beim Call, nur muss dann beachtet werden, dass ganz oben auf dem Stack die return Adresse liegt), nützlich zum Beispiel wenn man bestimmte Funktionsparameter überwachen/verändern möchte.

Detours müssen auch nicht am Funktionsanfang stehen, oft ist ein Detour an einer anderen Stelle sehr hilfreich, wenn man zum Beispiel Register an einer bestimmten Stelle auslesen möchte.

also könnte ich zum beispiel wenn ich eine msgbox detoure irgendeinen schrott ausführen lassen der nichts mit dem call zu tun hat?
Gianotti is offline  
Old 11/30/2009, 13:59   #52
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Jupp so ist es
Bot_interesierter is offline  
Old 11/30/2009, 20:14   #53
 
Carcaras's Avatar
 
elite*gold: 0
Join Date: Jun 2009
Posts: 63
Received Thanks: 86
Thx, gutes Tutorial

edit: bei mir findet er die <detours.h> nicht. Ich hab die gedownloadet, aber wo kommt die jetzt hin? (sry für die Frage)
Carcaras is offline  
Old 12/01/2009, 00:12   #54
 
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
Quote:
Originally Posted by Carcaras View Post
edit: bei mir findet er die <detours.h> nicht. Ich hab die gedownloadet, aber wo kommt die jetzt hin? (sry für die Frage)
Die Compiler haben in der regel ein extra verzeichniss für header datein, meist INDLUDE oder änlich genannt am besten da rein kopieren.
Akorn is offline  
Old 12/01/2009, 14:35   #55
 
Carcaras's Avatar
 
elite*gold: 0
Join Date: Jun 2009
Posts: 63
Received Thanks: 86
Quote:
Originally Posted by Akorn View Post
Die Compiler haben in der regel ein extra verzeichniss für header datein, meist INDLUDE oder änlich genannt am besten da rein kopieren.
Ok, danke. Ich Idiot hab im falschen Ordener gesucht^^

Edit: Es klappt, endlich
Carcaras is offline  
Old 01/01/2010, 01:08   #56


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,913
Received Thanks: 25,413
hm
ich hol den Thread mal wieder hoch, weil ich ein kleines Problem habe (sowohl auf win7 als auch auf XP!)

Also ich injecte die DLL mit Winject und Winject sagt mir auch, dass alles geklappt hat (und beim nochmaldigen Drücken, dass die DLL schon geladen wurde!), aber trotzdem wird die MessageBox nicht gehooked.

Da ich kein Freund von C&P bin, habe ich mein eigenes Testprogramm geschrieben:

Code:
#include <windows.h>

int main()
{
	while(1)
	{
		MessageBoxW(NULL,L"TEST",L"TESTTEST",MB_OK);
		Sleep(3000);
		if(GetAsyncKeyState(VK_F1))
			return 1;
	}
}
Der Code meiner Dll:

Code:
#include <windows.h>
#include <detours.h>

typedef int (WINAPI *MBox)(HWND hWnd,LPCWSTR Text,LPCWSTR Caption,UINT Type);

MBox MessageBox_orig = NULL;

int WINAPI hookedMessBox(HWND hWnd,LPWSTR Text,LPCWSTR Caption,UINT Type)
{
	Text = L"Haha, hooked ;)";
	Caption = L"failed";
	return MessageBox_orig(hWnd,Text,Caption,Type);
}

BOOL WINAPI Dllmain(HANDLE hModule,DWORD dwReason,LPVOID Reversed)
{
        switch(dwReason)
        {
                 case DLL_PROCESS_ATTACH:
	                    MessageBox_orig = reinterpret_cast<MBox>(DetourFunction((PBYTE)&MessageBoxW,(PBYTE)&hookedMessBox));
         }
	return TRUE;
}

So, nun bleibt der Text aber "Test"!

Ich habe es auch schon mit etwas leichtem probiert:

Code:
BOOL WINAPI Dllmain(HINSTANCE hInstace,DWORD dwReason,LPVOID Reversed)
{
	switch(dwReason)
	{
	case DLL_PROCESS_ATTACH:
                       MessageBox(NULL,L"Injected ;)",NULL,MB_OK);
		        break;
         }
	return TRUE;
}

Nichts, keine MessageBox.

Ich vermute es liegt daran, dass zwar die DLL geladen wird, aber der Code nicht ausgeführt.
Woran kann es liegen (unter XP mit Admin Konto angemeldet, unter w7 ausgeführt als Admin)?
MrSm!th is offline  
Old 01/01/2010, 12:40   #57
 
^darkwing's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 31
Welcher Compiler?
^darkwing is offline  
Old 01/01/2010, 13:39   #58


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,913
Received Thanks: 25,413
VS 2008
beim kompilieren gibts aber keine probleme =/


edit:

es geht jetzt!

2 änderungen:

Code:
[COLOR="Red"]#pragma comment(lib, "detours.lib")[/COLOR]

typedef int (WINAPI *MBox)(HWND hWnd,LPCWSTR Text,LPCWSTR Caption,UINT Type);

MBox MessageBox_orig = NULL;

int WINAPI hookedMessBox(HWND hWnd,LPWSTR Text,LPCWSTR Caption,UINT Type)
{
	Text = L"Haha, hooked ;)";
	Caption = L"failed";
	return MessageBox_orig(hWnd,Text,Caption,Type);
}

BOOL WINAPI DllMain(HANDLE HDllHandle, DWORD Aufrufgrund, LPVOID Reserved)
{
	[COLOR="Red"]if(DLL_PROCESS_ATTACH == Aufrufgrund)[/COLOR]
	{
		MessageBox_orig = reinterpret_cast<MBox>(DetourFunction((PBYTE)&MessageBoxW,(PBYTE)&hookedMessBox));
	}
	return TRUE;
}
Ich weiß zwar nicht, wo der Unterschied zwischen der Schreibweise von Schlurmann und meiner ist, aber es geht^^
Das mit der lib verstehe ich auch nicht, da sie schon im Header gelinkt wird, aber ich habe es mal so wie Schlurmann sicherheitshalber gemacht und es gab trotzdem keine Fehler von wegen 2 mal das selbe gelinkt oder so^^

Naja dann versuche ich mal mit dieser Schreibweise meine kleine MessageBox Dll zu machen.

@Schlurmann:

Wolltest du nicht auch noch ein Tutorial machen, wie man Parameter etc. bei Nicht-Api-Funktionen rauskriegt?
MrSm!th is offline  
Old 02/18/2010, 22:00   #59
 
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
Quote:
Originally Posted by MrSm!th View Post

@Schlurmann:

Wolltest du nicht auch noch ein Tutorial machen, wie man Parameter etc. bei Nicht-Api-Funktionen rauskriegt?
Ich will so einiges. Vorwiegend will ich aber mein Abitur.
schlurmann is offline  
Old 02/18/2010, 22:12   #60


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,913
Received Thanks: 25,413
Quote:
Originally Posted by schlurmann View Post
Ich will so einiges. Vorwiegend will ich aber mein Abitur.
Na dann viel Glück
Ich mach meins in 3 Jahren.
Weißt du zufällig, wie detours.h implementiert ist?
Ich wollte eine eigene kleine Klasse schreiben, die einem mehr Möglichkeiten bietet, aber im komm beim Schreiben der Opcodes nicht weiter...
nichtmal was ganz einfaches was eigentlich klappen müsste wie
Code:
memcpy(IsDebuggerPresent,Opcodes,5); /*egal was, es klappt nicht, wenn ich aber stattdessen 
einen Pointer zu einer eigenen Variable bei Dst angebe, klappts, logisch, 
aber warum nicht bei Funktionen?*/
bringt die DllMain schon dazu, nicht zu returnen (Winject sagt, injecten fehlgeschlagen, obwohl die MessageBox in meiner DllMain kam; in der Liste der executable Modules ist die Dll aber auch nicht....)
MrSm!th 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 +2. The time now is 10:56.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

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