Problem mit CoD4 Hack

08/20/2011 12:52 Manner09#1
Hey leute,
ich beschäftige mich seit gut einer woche damit einen schönen CoD4 hack zu coden. Dazu nutzte ich C++ mit der standart <windows.h> libary. Als Dll injector benuttzte ich Fu's Injector. Bei mir funktioniert auch alles wunderbar doch wenn ich die dll einem Kummple schicken kann er sie zwar injecten aber im spiel ist nicht davon zusehen.
Weiß jemand vielleicht weiter?

Würde mich über antwort sehr freuen :)

Source: main.cpp
Quote:
#define DLL_EXPORT
#include "main.h"
#include <windows.h>




bool SetNoRecoil = 0;
bool SetMINIMAP = 0;
bool SetLASER = 0;
bool SetNAMETAGS = 0;
bool SetFOG = 0;
bool SetDVAR = 0;
bool SetWALLHACK = 0;
bool SetESP = 0;




HANDLE CallOfDuty4 = GetCurrentProcess();





DWORD GameBase = 0x400000;





DWORD NORECOIL = GameBase + 0x057CCF;
DWORD MINIMAP = GameBase + 0x02A0B4;
DWORD MINIMAP1 = GameBase + 0x02A0B5;
DWORD MINIMAP2 = GameBase + 0x02A0B6;
DWORD MINIMAP3 = GameBase + 0x02A0B7;
DWORD MINIMAP4 = GameBase + 0x02A0B8;
DWORD LASER = GameBase + 0x056E78;
DWORD NAMETAGS = GameBase + 0x02E1CE;
DWORD NAMETAGS1 = GameBase + 0x02E1CF;
DWORD NAMETAGS2 = GameBase + 0x02E1AC;
DWORD NAMETAGS3 = GameBase + 0x02E1AD;
DWORD NAMETAGS4 = GameBase + 0x02E1AF;
DWORD NAMETAGS5 = GameBase + 0x02E1B0;
DWORD NAMETAGS6 = GameBase + 0x02E1B1;
DWORD FOG = GameBase + 0x23DB0D;
DWORD FOG1 = GameBase + 0x23DB0E;
DWORD DVAR = GameBase + 0x16B386;
DWORD WALLHACK = GameBase + 0x045480;
DWORD ESP1 = 0x0040326E;
DWORD ESP2 = 0x00403281;
DWORD Crosshair = 0x430EE3;
DWORD Crosshair2 = 0x430ED5;




BYTE NoRecoil[] = {0x75, 0x12};
BYTE Wallhack[] = {0x6a, 0x12};
BYTE Laser[] = {0x74, 0x04};
BYTE NameTags[] = {0x75, 0x12};
BYTE Dvar[] = {0x74, 0x19};
BYTE ESP1A[] = {0x75, 0x2C};
BYTE ESP2A[] = {0x90, 0x90};



BYTE NopOne[] = {0x90};
BYTE NopTwo[] = {0x90,0x90};
BYTE NopThree[] = {0x90,0x90,0x90};
BYTE NopFour[] = {0x90,0x90,0x90,0x90};





void SendCommandToConsole(char* command)
{
__asm
{
push command
push 0
push 0
mov esi, 0x004F9AB0
call esi
add esp, 0x0C
}
}




DWORD WINAPI SetupDvars(LPVOID)
{
SendCommandToConsole("dvar_int laser 0 0 1");
SendCommandToConsole("dvar_int wallhack 0 0 1");
SendCommandToConsole("dvar_int nofog 0 0 1");
SendCommandToConsole("dvar_int dvarunlock 0 0 1");
SendCommandToConsole("dvar_int minimap 0 0 1");
SendCommandToConsole("dvar_int norecoil 0 0 1");
SendCommandToConsole("dvar_int esp 0 0 1");

return true;
}



BOOL WINAPI DllMain (HINSTANCE hModule, DWORD dwAttached, LPVOID lpvReserved)
{


if (dwAttached==DLL_PROCESS_ATTACH)
{


WriteProcessMemory(CallOfDuty4, (void*)LASER, &Laser, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP1, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP2, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP3, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS1, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS2, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS3, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS4, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS5, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS6, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)FOG, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)FOG1, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)DVAR, &Dvar, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)WALLHACK, &Wallhack, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)NORECOIL, &NoRecoil, 2, 0);
WriteProcessMemory(CallOfDuty4,(void*) ESP1,&ESP1A,1,0);
WriteProcessMemory(CallOfDuty4,(void*) ESP2,&ESP2A,2,0);
WriteProcessMemory(CallOfDuty4, (void*) Crosshair, &NopTwo,2,0);
WriteProcessMemory(CallOfDuty4, (void*) Crosshair2, &NopTwo,2,0);


CreateThread(0,0,SetupDvars,0,0,0);
Beep(150,150);


}
return 1;
}
Source: main.h
Quote:
#ifndef DLLHEADER_H_INCLUDED
#define DLLHEADER_H_INCLUDED

#ifdef DLL_EXPORT
# define EXPORT __declspec (dllexport)
#else
# define EXPORT
#endif

extern EXPORT void foo ();

#endif
08/20/2011 13:38 Akorn#2
Dafür bräuchte man schon den SourceCode.

EDIT:

Quote:
Originally Posted by Manner09 View Post
Hey leute,
ich beschäftige mich seit gut einer woche damit einen schönen CoD4 hack zu coden. Dazu nutzte ich C++ mit der standart <windows.h> libary. Als Dll injector benuttzte ich Fu's Injector. Bei mir funktioniert auch alles wunderbar doch wenn ich die dll einem Kummple schicken kann er sie zwar injecten aber im spiel ist nicht davon zusehen.
Weiß jemand vielleicht weiter?

Würde mich über antwort sehr freuen :)

Source: main.cpp

Source: main.h
Wen du solange codes postest nimm tabs.

Und dein Code ist sehr unschön geschrieben.
Den Header der Dll kannst du eigentlich weglassen.

PHP Code:
bool SetNoRecoil 0;
bool SetMINIMAP 0;
bool SetLASER 0;
bool SetNAMETAGS 0;
bool SetFOG 0;
bool SetDVAR 0;
bool SetWALLHACK 0;
bool SetESP 0
Diese Variablen scheinst du in deinen code überhauptnicht zu benutzen.

PHP Code:
WriteProcessMemory(CallOfDuty4, (void*)LASER, &Laser20);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP, &NopTwo20);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP1, &NopTwo20);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP2, &NopTwo20);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP3, &NopTwo20);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS1, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS2, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS3, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS4, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS5, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS6, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)FOG, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)FOG1, &NopOne10);
WriteProcessMemory(CallOfDuty4, (void*)DVAR, &Dvar20);
WriteProcessMemory(CallOfDuty4, (void*)WALLHACK, &Wallhack20);
WriteProcessMemory(CallOfDuty4, (void*)NORECOIL, &NoRecoil20);
WriteProcessMemory(CallOfDuty4,(void*) ESP1,&ESP1A,1,0);
WriteProcessMemory(CallOfDuty4,(void*) ESP2,&ESP2A,2,0);
WriteProcessMemory(CallOfDuty4, (void*) Crosshair, &NopTwo,2,0);
WriteProcessMemory(CallOfDuty4, (void*) Crosshair2, &NopTwo,2,0); 
Da deine Dll in den fremden Prozess injectiert wird bist du im selben Addressraum wie der Prozess. Das heist du musst nich Write/ReadProessmomory benutzen um speicherstellen zu ändern sondern kannst es z.b. über die funktion memcpy machen.
Abgesehn davon wieso lässt du diesen code in der DllMain ausführen und machst danach für die Consolen ausgaben einen eigenen Thread auf?
08/20/2011 14:25 Manner09#3
Mit den bool variablen hab ich versucht die hacks nur manuel zu aktivieren hat aber nich funktioniert.

Ja und zu dem therad hast du recht das hab ich am anfang irgendwann ma gemacht werd ich ma ändern^^

Aber meinst du das das memcpy das problem löst???
08/20/2011 14:32 Akorn#4
Quote:
Originally Posted by Manner09 View Post
Mit den bool variablen hab ich versucht die hacks nur manuel zu aktivieren hat aber nich funktioniert.

Ja und zu dem therad hast du recht das hab ich am anfang irgendwann ma gemacht werd ich ma ändern^^

Aber meinst du das das memcpy das problem löst???
Nein warscheinlich nicht aber der Code würde schonmal etwas professioneller aussehen. Was helfen könnte wäre wen du den code der die Speicherstellen verändert mit in den extra Thread schreibst. Da es sein kann das das Laden der Dll fehlschlägt da die DllMain zulange zum returnen braucht.
08/20/2011 14:54 Manner09#5
Das klinkt extrem llogisch mit dem theard.. aber da das mein erster hack si weiß ich nich so genau was du meinst xD
08/20/2011 15:30 kurrbis#6
er meint, dasss es sein könnte, dass deine dll einen deadlock erzeugt.
eine unsaubere, aber einfache lösung, die zum testen reicht, wäre, dass du die memory writes in eine eigene methode schreibst, und diese dann per createthread aufrufst.
08/20/2011 17:42 Manner09#7
Funktioniert leider nich :(

thread source:
Quote:
DWORD WINAPI hacks(LPVOID)
{
WriteProcessMemory(CallOfDuty4, (void*)LASER, &Laser, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP1, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP2, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)MINIMAP3, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS1, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS3, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS4, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS5, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)NAMETAGS6, &NopOne, 1, 0);
//WriteProcessMemory(CallOfDuty4, (void*)NAMETAGSFFA, &NopTwo, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)FOG, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)FOG1, &NopOne, 1, 0);
WriteProcessMemory(CallOfDuty4, (void*)DVAR, &Dvar, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)WALLHACK, &Wallhack, 2, 0);
WriteProcessMemory(CallOfDuty4, (void*)NORECOIL, &NoRecoil, 2, 0);
WriteProcessMemory(CallOfDuty4,(void*) ESP1,&ESP1A,1,0);
WriteProcessMemory(CallOfDuty4,(void*) ESP2,&ESP2A,2,0);
WriteProcessMemory(CallOfDuty4, (void*) Crosshair, &NopTwo,2,0);
WriteProcessMemory(CallOfDuty4, (void*) Crosshair2, &NopTwo,2,0);

return true;
}
in der main funktion:
Quote:
CreateThread(0,0,hacks,0,0,0);
08/20/2011 18:39 kurrbis#8
was kommt denn für ein fehler? oder passiert gar nichts?
08/20/2011 18:52 Manner09#9
also bei mir funktioniert alles super aber sobald mein kummepl denn benutzten will passiert folgendes:

-Er injiziert die dll mit Fu's injektor in iw3mp.exe
-Fu's injektor sagt "Dll injected"
-Er joint einen server und von dem hack ist nix zu sehen :(
08/20/2011 19:56 kurrbis#10
das einfachste wäre erstmal eine messagebox in die hacks(LPVOID) methode einzubauen und zu gucken ob die bei ihm aufgerufen wird, dann weiste ob die injection klappt. nur weil der injector sagt "Dll injected" muss das nicht wirklich so sein.
08/20/2011 20:36 Manner09#11
Ok bei ihm kommt keine Msg box.
Vielleicht sollte ich noch dazu sagen das wenn er den code compiliert dann funktionierts bei ihm. Hat das eventuel was damit zu tun?
08/20/2011 20:37 kurrbis#12
habt ihr unterschiedliche systeme? also 32 und 64 bit?
08/20/2011 20:40 Manner09#13
ne wir haben beide Windows 7 x64
aber ich hab ultimate und home premium und ein anderer kummple von mir hat enterprise da gehts acuh ncih
08/20/2011 20:47 kurrbis#14
Kann ich dir dann so auch erstmal nich weiterhelfen. Aber was mir bei dem Hack aufgefallen ist, du brauchst dafür gar nicht injected zu sein. Weil diese SendToConsole brauchste nicht aufrufen, da du damit sowieso nich arbeitest. Versuch es mal mit nem oop programm, von dem du dann die mem writes in cod durchführst.
08/20/2011 21:38 Manner09#15
Ja bei mir funktioniert das ma wieder aber by meinem kummple steht wenn er es ausführt: "Side-by-Side informationen ungültig"
Und so kann er das auch nicht starten.