Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 06:16

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

Advertisement



[Video Tutorial] Microsoft Detours 1.5 New Video

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

Reply
 
Old 07/28/2011, 10:49   #31


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,283
messageboxb gibts nicht. du meinst w ;>
hol die addresse einfach über getprocaddress('messagebox'), dann musst du dich darum nicht kümmern.

ansosnten kannst du das programm in olly anaylisieren (hauptmodul) und dann Rechtsklick > search for all intermodular calls machen ;>
buFFy! is offline  
Thanks
1 User
Old 07/28/2011, 17:18   #32


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Was willst du mit inline ASM in einer Script-Sprache? o.ô

Das mit der MessageBox siehst du in Olly. Falls du keine Möglichkeit hast, den Call einzusehen, musst du eben ausprobieren, welche MessageBox es ist.
Ich habe nunmal aus A/B A/W (also ASCII/UNICODE) interpretiert ;O

Quote:
messageboxb gibts nicht. du meinst w ;>
hol die addresse einfach über getprocaddress('messagebox'), dann musst du dich darum nicht kümmern.

ansosnten kannst du das programm in olly anaylisieren (hauptmodul) und dann Rechtsklick > search for all intermodular calls machen ;>
Das ist Schwachsinn, das Modul User32.dll exportiert MessageBoxA und MessageBoxW.
Die automatische Auflösung von MessageBox existiert nur in der IDE, weil das im SDK so definiert ist, da wird dann über die Projektkonstante UNICODE entschieden, welches genutzt wird, beim fertig kompilierten Modul wird aber genau unterschieden, GetProcAddress würde für "MessageBox" (das ist btw. case sensitive!) NULL zurückgeben.
MrSm!th is offline  
Thanks
1 User
Old 07/28/2011, 20:25   #33


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,283
Quote:
Originally Posted by MrSm!th View Post
Was willst du mit inline ASM in einer Script-Sprache? o.ô

Das mit der MessageBox siehst du in Olly. Falls du keine Möglichkeit hast, den Call einzusehen, musst du eben ausprobieren, welche MessageBox es ist.
Ich habe nunmal aus A/B A/W (also ASCII/UNICODE) interpretiert ;O


Das ist Schwachsinn, das Modul User32.dll exportiert MessageBoxA und MessageBoxW.
Die automatische Auflösung von MessageBox existiert nur in der IDE, weil das im SDK so definiert ist, da wird dann über die Projektkonstante UNICODE entschieden, welches genutzt wird, beim fertig kompilierten Modul wird aber genau unterschieden, GetProcAddress würde für "MessageBox" (das ist btw. case sensitive!) NULL zurückgeben.
also getprocaddress('messagebox'), natürlich case sensitive korrekt geschrieben returned bei mir nich null, eben wegen der projektkonstante.

ich hab ja nicht umsonst geschrieben das man das in olly einsehen kann.
spätestens wenn was nicht funktioniert wird das kontrolliert.

die meisten spiele nutzen eh die unicode interpretation der messagebox (diese ist übrigens auch default in jeder mir bekannten c++ ide)
buFFy! is offline  
Thanks
1 User
Old 07/28/2011, 22:06   #34


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by u-coRe View Post
also getprocaddress('messagebox'), natürlich case sensitive korrekt geschrieben returned bei mir nich null, eben wegen der projektkonstante.
Das ist doch Blödsinn, die Konstante UNICODE verliert nach dem Kompilieren an Bedeutung, weil sie nur in der IDE vorhanden ist.
User32.dll exportiert keine MessageBox, ergo wirst du diese Funktion auch nicht finden.
MrSm!th is offline  
Thanks
1 User
Old 07/29/2011, 13:18   #35


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,283
herrje.. dann denken wir mal ein bisschen weiter, und kommen zum schluss das die projektkonstante beim kompiliervorgang verwendet wird. demnach ist die messagebox danach als messageboxw zu finden. wenn du möchtest geb ich dir auch gern nen screenshot aus olly, der belegt dann das was ich hier behaupte.
buFFy! is offline  
Thanks
1 User
Old 07/29/2011, 20:42   #36


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
sag mal, verarschst du mich gerade?

ist klar, dass MessageBox als MessageBoxW zu finden ist.

Aber GetProcAddress durchsucht die Export Table der Dll nach dem String, den du ihr übergibst und eine MessageBox wird von user32.dll nicht exportiert!

Du hast nicht davon geredet, dass du einfach das Define aus dem SDK nimmst, du sprachst von GetProcAddress, dass das angeblich automatisch das richtige raussucht und das ist Blödsinn.
MrSm!th is offline  
Thanks
1 User
Old 07/29/2011, 22:03   #37


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,283
dann hab ich mich entweder blöd ausgedrückt oder du mich falsch verstanden.
buFFy! is offline  
Thanks
1 User
Old 07/30/2011, 02:55   #38


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by u-coRe View Post
messageboxb gibts nicht. du meinst w ;>
hol die addresse einfach über getprocaddress('messagebox'), dann musst du dich darum nicht kümmern.

ansosnten kannst du das programm in olly anaylisieren (hauptmodul) und dann Rechtsklick > search for all intermodular calls machen ;>
ich vermute ersteres.
MrSm!th is offline  
Thanks
1 User
Old 07/30/2011, 12:40   #39


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,283
jo stimmt. war eher so gemeint das die meisten spiele die unicode version verwenden, und das in 95% aller fälle funktioniert. und falls eben nicht, kann er immernoch mit olly schauen.
buFFy! is offline  
Thanks
1 User
Old 08/05/2011, 14:26   #40
 
.BritainAndy's Avatar
 
elite*gold: 0
Join Date: Jan 2010
Posts: 1,385
Received Thanks: 1,006
Eine Frage Smith:

Ich verstehe soweit alles, danke auch an dieser Stelle für das Tutorial.
Nur hab ich ein Verständnisproblem an der rot markierten Stelle:

Code:
#include <Windows.h>
#pragma comment(lib, "detours.lib")
#include <detours.h>

typedef int (WINAPI *Messagebox_typ)(HWND,LPCTSTR,LPCTSTR,UINT); // Prototyp erstellen

Messagebox_typ Messagebox_orig = NULL;	//Zeiger aufs Trampolin erstellen um die Funktion , die vom Programm erwartet,wird aufzurufen






//		 DETOUR FUNKTION ERSTELLEN MIT SELBER CALLING CONVENTION, PARAMETER, ...			//

int WINAPI MessageBoxDetour(HWND window, LPCTSTR text, LPCTSTR caption, UINT type)
{
	text = L"Hook function succesful ";
	caption = L"Hooked";
	return Messagebox_orig( window, text, caption, type );
}





BOOL APIENTRY DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
		[COLOR="Red"]Messagebox_orig = (Messagebox_typ)DetourFunction((PBYTE)MessageBoxW, (PBYTE)MessageBoxDetour);[/COLOR]
        break;
    }
    return true;
}
DetourFunction gibt ja die Adresse des Trampolins zurück.
Dann beinhaltet also der Funktionszeiger (der aufs Trampolin zeigen soll) die Adresse des Trampolins.
Ich verstehe jetzt irgendwie nicht, was das für einen Zweck haben soll und wieso wenn ich das "Messagebox_orig =" weglasse das Programm crasht.
.BritainAndy is offline  
Old 08/05/2011, 17:00   #41
 
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
Quote:
Originally Posted by .BritainAndy View Post
Eine Frage Smith:

Ich verstehe soweit alles, danke auch an dieser Stelle für das Tutorial.
Nur hab ich ein Verständnisproblem an der rot markierten Stelle:

Code:
#include <Windows.h>
#pragma comment(lib, "detours.lib")
#include <detours.h>

typedef int (WINAPI *Messagebox_typ)(HWND,LPCTSTR,LPCTSTR,UINT); // Prototyp erstellen

Messagebox_typ Messagebox_orig = NULL;	//Zeiger aufs Trampolin erstellen um die Funktion , die vom Programm erwartet,wird aufzurufen






//		 DETOUR FUNKTION ERSTELLEN MIT SELBER CALLING CONVENTION, PARAMETER, ...			//

int WINAPI MessageBoxDetour(HWND window, LPCTSTR text, LPCTSTR caption, UINT type)
{
	text = L"Hook function succesful ";
	caption = L"Hooked";
	return Messagebox_orig( window, text, caption, type );
}





BOOL APIENTRY DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
		[COLOR="Red"]Messagebox_orig = (Messagebox_typ)DetourFunction((PBYTE)MessageBoxW, (PBYTE)MessageBoxDetour);[/COLOR]
        break;
    }
    return true;
}
DetourFunction gibt ja die Adresse des Trampolins zurück.
Dann beinhaltet also der Funktionszeiger (der aufs Trampolin zeigen soll) die Adresse des Trampolins.
Ich verstehe jetzt irgendwie nicht, was das für einen Zweck haben soll und wieso wenn ich das "Messagebox_orig =" weglasse das Programm crasht.
Man braucht den Zeiger aufs Trampolin wen man selber die gehookte funktion aufrufen will. Da man sonst wen man sie normal aufruft in der eigenen Detour funktion landen würde.

zb hier:
Quote:
nt WINAPI MessageBoxDetour(HWND window, LPCTSTR text, LPCTSTR caption, UINT type)
{
text = L"Hook function succesful ";
caption = L"Hooked";
return Messagebox_orig( window, text, caption, type );
}
Wen man jetzt anstatt "return Messagebox_orig" einfach "return Messagebox" schreibt würde sich die MessageBoxDetour funktion ja immer wieder selber aufrufen solange bis der stack überläuft und das programm crasht.
Akorn is offline  
Thanks
1 User
Old 08/05/2011, 17:31   #42


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Und der grund für deinen crash ist natürlich, dass der zeiger auf 0 bleibt und demnach der return im Hook einen Nullzeiger callen will.
MrSm!th is offline  
Thanks
1 User
Old 08/23/2011, 09:12   #43
 
elite*gold: 0
Join Date: Feb 2010
Posts: 28
Received Thanks: 0
Gutes tutorial was du da gemacht hast^^ (ich habs verstanden )

Hier nochn Vorschlag für ein Tutorial.
könnteste vllt n Tutorial machen, wie man Detouren (nur für API-Funktionen erstmal) Systemweit installieren kann,
würd mich (und viele andere auch) sicher interessieren
chillakilla123 is offline  
Old 09/30/2011, 19:39   #44
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
Ich hatte eigendlich etwas anderes nicht verstanden.

Also.

Es wird ja bei deinem Detour die MessageboxW function gehookt.

Doch was ist wenn ein Programm 10 verschiedene Messageboxen beinhaltet, und man tatsächlich, nur eine davon hooken möchte?

Das verstehe ich nicht ganz.

Und könntest du auch erklären, wie es möglich ist, einen hook zu setzen, der an sich nichts im programm verändert, aber dass man eben die funktion nach belieben aufrufen kann?

Ich möchte nämlich versuchen die function WSASend hooken, und quasi besetzen.

Die packets im programm sollen wie gewohnt weiterlaufen und nicht beeinflusst werden, jedoch soll nach beispielsweise drücken eines hotkey, diese funktion verwendet werden, um eigene packets zu senden.
Soll jedoch kein anderes packet beeinflussen.

Könntest du mich erhellen?

Es geht um das spiel Flyff.
Dort werden die packets über einen bestimmten hash verschlüsselt.
Wenn man aber die function hookt, sollte der client das packet von selbst verschlüsseln oder?
freehuntx is offline  
Old 09/30/2011, 23:02   #45


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Es wird ja bei deinem Detour die MessageboxW function gehookt.

Doch was ist wenn ein Programm 10 verschiedene Messageboxen beinhaltet, und man tatsächlich, nur eine davon hooken möchte?
Um genau zu sein, wird sie einmal gehookt und danach wird der Hook immer aufgerufen, anstatt der originalen

Dann musst du entweder die Parameter prüfen und so darauf schließen, ob es die gewünschte ist oder du hookst nicht die MessageBoxW, sondern platzierst direkt einen Jump an der entsprechenden Stelle im Programm zu einer Codecave von dir (das geht natürlich nur, wenn sie bekannt ist).

Für letzteres brauchst du keinen Hook o.ô Musst einfach nur die Funktion callen, wo ist das Problem?
Quote:
Gutes tutorial was du da gemacht hast^^ (ich habs verstanden )

Hier nochn Vorschlag für ein Tutorial.
könnteste vllt n Tutorial machen, wie man Detouren (nur für API-Funktionen erstmal) Systemweit installieren kann,
würd mich (und viele andere auch) sicher interessieren
Danke für den Vorschlag, ja, kann ich machen.
MrSm!th is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[Tutorial] Microsoft Detours
07/24/2013 - Coding Tutorials - 74 Replies
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. Detours Video Tutorial
[Video Tutorial] - Very Easy Tutorial How to make your Own Wallhack in C++
09/01/2012 - Soldier Front Hacks, Bots, Cheats & Exploits - 16 Replies
Hello Everyone!Hellow Philippines - Mabuhay Pinoy Cheaters! Confidentials000 of GZP and Me Babyface21 ay iisa lang! Today i Will Teach you on How to Make Your Own Wallhack in C++ Very Simple By Video Tutorials Step by Step Part 1 - 3 Dont Ask me to Release my Private Wallhack coz i Need it to still Undetected
[cSRO] IPMana 1.0 - Tutorial & Video Tutorial
02/12/2011 - SRO Hacks, Bots, Cheats & Exploits - 6 Replies
Hi all, I'm just posting here for those that have problems setting up the IPMana. First normal tutorial, the Video Tutorial will be at the bottom of the thread. Whats IPMana ? IPMana is similar to QQdaili its just like a proxy program to reduce the lag in cSRO. How can i use IPMana ?



All times are GMT +2. The time now is 06:16.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.