|
You last visited: Today at 10:56
Advertisement
[Tutorial] Microsoft Detours
Discussion on [Tutorial] Microsoft Detours within the Coding Tutorials forum part of the General Coding category.
11/29/2009, 08:41
|
#46
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
Quote:
Originally Posted by Gianotti
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.
|
|
|
11/29/2009, 15:38
|
#47
|
elite*gold: 20
Join Date: Mar 2008
Posts: 1,455
Received Thanks: 140
|
Quote:
Originally Posted by Bot_interesierter
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
|
|
|
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
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.
|
|
|
11/29/2009, 16:52
|
#49
|
elite*gold: 20
Join Date: Mar 2008
Posts: 1,455
Received Thanks: 140
|
Quote:
Originally Posted by Disconnect
Das lässt sich mittels Function Pointer realisieren.

|
achso danke für den link.
detours ist wohl sehr komfortabel wie man sieht
|
|
|
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.
|
|
|
11/30/2009, 11:39
|
#51
|
elite*gold: 20
Join Date: Mar 2008
Posts: 1,455
Received Thanks: 140
|
Quote:
Originally Posted by schlurmann
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?
|
|
|
11/30/2009, 13:59
|
#52
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
Jupp so ist es
|
|
|
11/30/2009, 20:14
|
#53
|
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)
|
|
|
12/01/2009, 00:12
|
#54
|
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
|
Quote:
Originally Posted by Carcaras
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.
|
|
|
12/01/2009, 14:35
|
#55
|
elite*gold: 0
Join Date: Jun 2009
Posts: 63
Received Thanks: 86
|
Quote:
Originally Posted by Akorn
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
|
|
|
01/01/2010, 01:08
|
#56
|
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)?
|
|
|
01/01/2010, 12:40
|
#57
|
elite*gold: 0
Join Date: Sep 2009
Posts: 148
Received Thanks: 31
|
Welcher Compiler?
|
|
|
01/01/2010, 13:39
|
#58
|
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?
|
|
|
02/18/2010, 22:00
|
#59
|
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
|
Quote:
Originally Posted by MrSm!th
@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.
|
|
|
02/18/2010, 22:12
|
#60
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,913
Received Thanks: 25,413
|
Quote:
Originally Posted by schlurmann
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....)
|
|
|
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.
|
|