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.
- eine c++ ide (meine is [Only registered and activated users can see links. Click Here To Register...])
- einen disassembler ([Only registered and activated users can see links. Click Here To Register...])
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:
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;)
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 [Only registered and activated users can see links. Click Here To Register...])
- einen disassembler ([Only registered and activated users can see links. Click Here To Register...])
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)
}
wenn alles geklappt hat sollte eine messagebox mit der meldung "im prozess..." auftauchen.
hoffe man konnte es verstehen;)