Register for your free account! | Forgot your password?

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

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

Advertisement



[c++]reverse engineering (Teil 1)

Discussion on [c++]reverse engineering (Teil 1) within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
[c++]reverse engineering (Teil 1)

so, ich schreib hier jetzt mal mein erstes tut...
WENN es euch weiterhilft, oder mehr haben wollt, schreib ich noch nen 2ten teil.
in dem teil gehts darum, eigenen code in das spiel reinzubringen.

was man braucht:
- am besten grunderfahrung in c++, um den code besser zu verstehen.
- eine c++ ide (meine is )
- einen disassembler ()

los gehts
fangen wir an, als erstes starten wir ida, und öffnen die .exe von dem spiel (ich nehm einfach cod4 multiplayer, geht natürlich auch mit jedem anderen).
wartet bis die datei fertig geladen ist (wenn ein fenster auftaucht wo ihr was anhaken könnt, klickt einfach ok).
sucht bei den registerkarten nach imports, sucht in der spalte rechts nach dem eintrag d3d9 (weil davon am wenigsten drin steht = weniger arbeit).
öffnet euer visual c++, ein win32 projekt (nennt es am besten d3d9), wählt dll aus, und auf fertig stellen klicken.
dann müsst ihr DIESE funktion/en bei den imports der einen dll in eurer nachbauen.
hier der code, is soweit alles kommentiert:
PHP Code:
#include <string> // is denke ich klar
#include <windows.h> // denke ich auch

HINSTANCE lib 0//auch klar, definition der originaldll instanz
FARPROC d3dc9 0//der original funktion

BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
{
    if (
reason == DLL_PROCESS_ATTACH//wenn dll geladen wird DANN:
     
{
            
char d3dorig[MAX_PATH]; // sollte auch klar sein
            
GetSystemDirectoryA(d3dorig,sizeof(d3dorig)); //C:\WINDOWS\system32 sollte normalerweise rauskommen
            
strcat_s(d3dorig,"\\d3d9.dll"); //hinten noch ein \d3d9.dll dranhängen
            
lib LoadLibraryA(d3dorig); //dll laden
            
if(!lib//wenn NICHT geladen dann:
            
{
                
MessageBox(HWND_DESKTOP,L"original nicht geladen",L"fehler",MB_OK); //die box
                
return 0//und beenden
            
}
                
MessageBox(HWND_DESKTOP,L"im prozess...",L"OK",MB_OK);
        
d3dc9 GetProcAddress(lib,"Direct3DCreate9"); //die funktion aus dll holen
    
}
    if (
reason == DLL_PROCESS_DETACH//wenn dll entladen wird DANN:
    
{
        
FreeLibrary(lib); //C:\WINDOWS\system32\d3d9.dll entladen
    
}
    return 
1//ende
}
extern "C" __declspec(naked__declspec(dllexportvoid Direct3DCreate9()
{
    
// eure aufrufe (z.B. HINSTANCE _lib = LoadLibraryA("my_dll.dll"); // besser da man nicht abhängig von dem einen aufruf ist!
    
__asm jmp d3dc9 }; //Direct3DCreate9 in der C:\WINDOWS\system32\d3d9.dll aufrufen (damit das spiel NICHT abstürzt)

packt diese .dll dann in den spiel ordner, startet das spiel und fertig!
wenn alles geklappt hat sollte eine messagebox mit der meldung "im prozess..." auftauchen.
hoffe man konnte es verstehen
Tyrar is offline  
Thanks
1 User
Old 03/16/2009, 10:22   #2
 
verT!c4L's Avatar
 
elite*gold: 0
Join Date: Aug 2005
Posts: 1,245
Received Thanks: 60
Quote:
Originally Posted by HeavyHacker View Post
PHP Code:
#include <string> // is denke ich klar
#include <windows.h> // denke ich auch

HINSTANCE lib 0//auch klar, definition der originaldll instanz
FARPROC d3dc9 0//der original funktion

BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
{
    if (
reason == DLL_PROCESS_ATTACH//wenn dll geladen wird DANN:
     
{
            
char d3dorig[MAX_PATH]; // sollte auch klar sein
            
GetSystemDirectoryA(d3dorig,sizeof(d3dorig)); //C:\WINDOWS\system32 sollte normalerweise rauskommen
            
strcat_s(d3dorig,"\\d3d9.dll"); //hinten noch ein \d3d9.dll dranhängen
            
lib LoadLibraryA(d3dorig); //dll laden
            
if(!lib//wenn NICHT geladen dann:
            
{
                
MessageBox(HWND_DESKTOP,L"original nicht geladen",L"fehler",MB_OK); //die box
                
return 0//und beenden
            
}
                
MessageBox(HWND_DESKTOP,L"im prozess...",L"OK",MB_OK);
        
d3dc9 GetProcAddress(lib,"Direct3DCreate9"); //die funktion aus dll holen
    
}
    if (
reason == DLL_PROCESS_DETACH//wenn dll entladen wird DANN:
    
{
        
FreeLibrary(lib); //C:\WINDOWS\system32\d3d9.dll entladen
    
}
    return 
1//ende
}
extern "C" __declspec(naked__declspec(dllexportvoid Direct3DCreate9()
{
    
// eure aufrufe (z.B. HINSTANCE _lib = LoadLibraryA("my_dll.dll"); // besser da man nicht abhängig von dem einen aufruf ist!
    
__asm jmp d3dc9 }; //Direct3DCreate9 in der C:\WINDOWS\system32\d3d9.dll aufrufen (damit das spiel NICHT abstürzt)

Für'n Anfang nicht schlecht, Code aber lieber in dem php-tag posten, ist angenehmer zu lesen für die Augen
Is das denn dann jetz eine DLL-Injection oder nen Hook? :P
verT!c4L is offline  
Old 03/16/2009, 13:10   #3
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by verT!c4L View Post
Für'n Anfang nicht schlecht, Code aber lieber in dem php-tag posten, ist angenehmer zu lesen für die Augen
Is das denn dann jetz eine DLL-Injection oder nen Hook? :P
hm... würd ma sagen dll injection, nen hook is systemweit
ich editier ma den php tag, hab das jetz auch nich so genau beschrieben, aber hoffe man versteht es

man muss natürlich selbst sehn welche dll man nimmt, und wo die originale liegt. wenn die originale im spielordner ist, natürlich umbenennen und die dann direkt aus dem ordner laden
Tyrar is offline  
Old 03/16/2009, 13:17   #4
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Was hat das jetzt mit Reverseengineering zu tun?
So weit ich sehe gar nichts, alles was du hier Zeigst ist eine simple Methode um Direct3DCreate9 zu Hooken und eigentlich brauchst du keinen Inline Asembler um die Original Funktion auf zu rufen, es sei denn du möchtest ein zusätzliches return vermeiden.

Und für ein Tutorial ist das ganze auch ziemlich Mager, du erklärst nicht was das ganze bezweckt und für das was du ins hier gezeigt hast ist es völlig unnötig IDA zu öffnen und auch nur eine Zeile disasmbler an zu sehen.

Wenn du dieses Tutorial immer noch fortführen möchtest, dann ändere den Titel zu einem Passenderen ab und erkläre ausführlicher was du tust und zu welchem Zweck, denn so wie das Tutorial bisher aufgebaut ist kann nur jemand der schon Ahnung hat erraten worum es geht.
Bot_interesierter is offline  
Old 03/16/2009, 13:24   #5
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Bot_interesierter View Post
Was hat das jetzt mit Reverseengineering zu tun?
So weit ich sehe gar nichts, alles was du hier Zeigst ist eine simple Methode um Direct3DCreate9 zu Hooken und eigentlich brauchst du keinen Inline Asembler um die Original Funktion auf zu rufen, es sei denn du möchtest ein zusätzliches return vermeiden.

Und für ein Tutorial ist das ganze auch ziemlich Mager, du erklärst nicht was das ganze bezweckt und für das was du ins hier gezeigt hast ist es völlig unnötig IDA zu öffnen und auch nur eine Zeile disasmbler an zu sehen.

Wenn du dieses Tutorial immer noch fortführen möchtest, dann ändere den Titel zu einem Passenderen ab und erkläre ausführlicher was du tust und zu welchem Zweck, denn so wie das Tutorial bisher aufgebaut ist kann nur jemand der schon Ahnung hat erraten worum es geht.
was muss beim reverse engineering als erstes passieren? man muss eigenen code reinbringen -> dllinjector is zu umständlich = lieber ne proxy dll rein. "reverse engineering teil 1 - proxy dll" oder was? als nächstes würde der aufruf von funktionen im prozess kommen (von dll funktion in der exe aufrufen).
ausserdem war es mein erstes tut, man kann nich alles gleich zu anfang gut machen
Tyrar is offline  
Old 03/16/2009, 13:29   #6
 
elite*gold: 0
Join Date: Sep 2005
Posts: 135
Received Thanks: 20
Quote:
was muss beim reverse engineering als erstes passieren? man muss eigenen code reinbringen
uhm ne, ich behaupte mal das ist nicht so. muss nicht immer so sein.

du baust doch auch keine eigene bauteile rein wenn du z.B. ein laptop reverse engineering'en willst....
da baust du alles außeinander und analysierst die bauteile und deren funktionen und versuchst das nachzubauen.
(die chinesen sind da teilweise nicht mal so schlecht da drin)
hooken und injection sind sicher methoden dazu, aber nicht fundamental.
xilehack is offline  
Old 03/16/2009, 13:31   #7
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by xilehack View Post
uhm ne, ich behaupte mal das ist nicht so. muss nicht immer so sein.

du baust doch auch keine eigene bauteile rein wenn du z.B. ein laptop reverse engineering'en willst....
da baust du alles außeinander und analysierst die bauteile und deren funktionen und versuchst das nachzubauen.
(die chinesen sind da teilweise nicht mal so schlecht da drin)
hooken und injection sind sicher methoden dazu, aber nicht fundamental.
aber meinermeinung is das so leichter
Tyrar is offline  
Old 03/16/2009, 13:39   #8

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
Sorry, imo ist das Tutorial ziemlich low.

Ist eher eine schlechte DIY Anleitung als ein richtiges Tutorial.
Du erklärst so ziemlich gar nichts. Den Teil mit IDA bist du überflogen, sodass die Leute gar nicht wissen was abgeht.

Desweiteren finde ich DirektX Hook != Reverse Engeneering.

Ich verstehe unter Reverse Engeneering eher das finden von Werten und Funktionen über einen Debugger.
Unpacking, Keygening, Code Caving, Code Shifting usw. Beim Reverse Engeneering geht es darum das Programm verstehen zu lernen. Und dessen Funktionsweise.

Ansich vielleicht ein nettes Programmier Tutorial für DLLs + Injection aber kein Reverse Engeneering.

Mal schauen was uns Teil 2 bringt
Adroxxx is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
kleines Reverse Engineering tut
05/15/2018 - Coding Tutorials - 7 Replies
hey ho, ich habe mich mal hingesetzt und ein wenig was geschreiben. ich erkläre euch in dem tut, wie ihr den Windows Life Messenger so verändert, dass ihr ihn mehrmals starten könnt und unendlich ringen könnt. Das ganze ist wirkich sehr einfach gehalten und für Totalanfänger auf dem Gebiet. Es kann gut sein, dass einige Formulierungsfehler auftreten, ich bin auch noch ein Frischlich dahingehend. dl Reverse Engineering am Beispiel vom Windows Life Messenger.r ... at uploaded.to - Free File...
Assembler und reverse engineering
02/05/2010 - General Coding - 11 Replies
Hallo, Ich hoffe ich bin hier in der richtigen Sektion. Ich suche eigentlich sehr umfangreiche Tutorials zum Thema reverse Engineering und Assembler. Lena151 lese ich zur Zeit auch sehr hilfreich, doch bin ich erst 15 und meine Englisch Kenntnisse sidn trotz Gym und guter Englischnote noch nicht soweit ausgereift, dass ich alles verstehe. Darum wäre ein ähnlich umfangreiches Tut diesbezüglich sehr hilfreich doch ich habe keins gefunden(in dem Umfang). Darum würde ich mehr sehr über einen...
Tools for reverse engineering?
09/27/2008 - Dekaron - 1 Replies
Would someone be kind enough to post what tools ppl use to reverse engineer the files?? (decompilers, debuggers, etc)
Reverse-Engineering talk
12/02/2005 - General Coding - 3 Replies
kennt sich jmd. mit der rechtlichen lage bezgl. reverse-engineering aus? die einen sagen das es illegal ist, die anderen wiederum meinen das re legal ist, was stimmt nun? ganz interessant ist auch http://de.wikipedia.org/wiki/Reverse_Engin...htlic he_Aspekte ich finde wir sollten das mal diskutieren um ein wenig klarheit zu schaffen. Die diskussion sollte speziell auf gamehacking gerichtet sein (nicht auf das cracken von programmen)



All times are GMT +1. The time now is 12:39.


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.