|
You last visited: Today at 12:39
Advertisement
[c++]reverse engineering (Teil 1)
Discussion on [c++]reverse engineering (Teil 1) within the Coding Tutorials forum part of the General Coding category.
03/16/2009, 09:26
|
#1
|
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(dllexport) void 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
|
|
|
03/16/2009, 10:22
|
#2
|
elite*gold: 0
Join Date: Aug 2005
Posts: 1,245
Received Thanks: 60
|
Quote:
Originally Posted by HeavyHacker
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(dllexport) void 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
|
|
|
03/16/2009, 13:10
|
#3
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by verT!c4L
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
|
|
|
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.
|
|
|
03/16/2009, 13:24
|
#5
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by Bot_interesierter
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
|
|
|
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.
|
|
|
03/16/2009, 13:31
|
#7
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by xilehack
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
|
|
|
03/16/2009, 13:39
|
#8
|
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
|
|
|
|
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.
|
|