Vollständige Version anzeigen : [C/C++] Crysis 2 Trainer +1 Inkl. Pointer Scanner


N0S
27.03.2011, 17:26

In Zeiten von halbfertigen Spielen, die erst beim Kunden zur Endversion mutieren sollte man Pointer Scanner in den Trainer einbauen um völlig unabhängig von irgendwelchen Patches zu sein.

Dieser Trainer fügt 100 Nano catalyst Punkte hinzu, er funktioniert mit allen bereits erhältlichen Patches und wird auch in Zukunft noch funktionieren. Außerdem Kopierschutz/Crack unabhängig.

#include <stdio;h>
#include <string;h>
#include <windows;h>
#include <tlhelp32;h>

#define PROCESS "Crysis2;exe"

#define START_POINTER_SEARCH 0x01000000
#define DATA_BUFFER 0x5000
#define SEARCH_PATTERN "\x74\x32\x80\x78\x45\x01\x75\x2C\x80\x78\x44\x00\x75\x26\xC6\x40\x44\x01\x8 B\x40\x3C\xF7\xD8\x50"
#define SEARCH_PATTERN_MASK ";;;;;;;;"
#define NANO1 0x194
#define NANOCATALYST1 0x4A0
#define NANO2 0xB0
#define NANOCATALYST2 0x100

DWORD pid = 0;
DWORD nanoCatPointer = 0;
DWORD nanoCatHUDPointer = 0;

DWORD gamePointer = 0;
DWORD magicValue = 0;

bool once = true;

DWORD getProcessByName(char * processName);
void addNanoCatPoints(int value);
void getNanoCatPointer();

void pointerScanner();
bool findPointerPattern(HANDLE hProcess, DWORD_PTR address, PBYTE data);
DWORD_PTR findPattern(DWORD_PTR startOffset, DWORD size, PBYTE pattern, const char * mask);
void readInformationFromResult(DWORD_PTR result);

int main(int argc, char *argv[])
{
printf("Crysis 2 Trainer +1\n\nF1 - add 100 nano catalyst points\nF3 - exit me\n\n");

printf("[+] Waiting for game..;\n");

while (1)
{
if (pid != 0)
{
if ((GetAsyncKeyState(VK_F1)&1)==1)
{
if (once)
{
getNanoCatPointer();
once = false;
}

addNanoCatPoints(100);
}
} else {
pid = getProcessByName(PROCESS);
if (pid != 0) {
printf("[+] Game found\n\n");
pointerScanner();

if (gamePointer == 0 || magicValue == 0)
{
printf("[+] Sorry I can't find the pointer :-(\n");
break;
}
}
}

if ((GetAsyncKeyState(VK_F3)&1)==1)
{
break;
}
Sleep(300);
}

return 0;
}

void addNanoCatPoints(int value)
{
DWORD rBuf = 0;
DWORD currentValue = 0;

HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION|PROCESS_VM_READ, NULL, pid);
if(!hProcess) {
pid = 0;
printf("Error OpenProcess %u\n",GetLastError());
return;
}

BOOL rpmRet = ReadProcessMemory(hProcess,(LPCVOID)nanoCatPointer,&currentValue,4,&rBuf);
if (!rpmRet) {
printf("Error ReadProcessMemory %u\n",GetLastError());
return;
}
printf("[+] You have currently %d nano catalyst points, I'm adding %d points\n",currentValue,value);

currentValue += value;

BOOL wpmRet = WriteProcessMemory(hProcess,(LPVOID)nanoCatPointer,&currentValue,4,&rBuf);
if (!wpmRet) {
printf("Error WriteProcessMemory %u\n",GetLastError());
return;
}

wpmRet = WriteProcessMemory(hProcess,(LPVOID)nanoCatHUDPointer,&currentValue,4,&rBuf);
if (!wpmRet) {
printf("Error WriteProcessMemory %u\n",GetLastError());
return;
}

CloseHandle(hProcess);
}

void getNanoCatPointer()
{
DWORD rBuf = 0;
DWORD value1 = 0, value2 = 0;

HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ, NULL, pid);
if(!hProcess) {
pid = 0;
printf("Error OpenProcess %u\n",GetLastError());
return;
}

BOOL rpmRet = ReadProcessMemory(hProcess,(LPCVOID)gamePointer,&value1,4,&rBuf);
if (!rpmRet) {
printf("Error ReadProcessMemory %u\n",GetLastError());
return;
}

rpmRet = ReadProcessMemory(hProcess,(LPCVOID)(value1 + NANO1),&value2,4,&rBuf);
if (!rpmRet) {
printf("Error ReadProcessMemory %u\n",GetLastError());
return;
}

nanoCatHUDPointer = value2 + NANOCATALYST1;


rpmRet = ReadProcessMemory(hProcess,(LPCVOID)(value1 + NANO2),&value2,4,&rBuf);
if (!rpmRet) {
printf("Error ReadProcessMemory %u\n",GetLastError());
return;
}

nanoCatPointer = value2 + (magicValue*4) + NANOCATALYST2;

CloseHandle(hProcess);
}

DWORD getProcessByName(char * processName)
{
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe32;
pe32;dwSize = sizeof(PROCESSENTRY32);

if( !Process32First( hProcessSnap, &pe32 ) )
{
printf("Error getting Process\n");
CloseHandle( hProcessSnap );
return 0;
}

do
{
if(!_stricmp(pe32;szExeFile, processName))
{
CloseHandle(hProcessSnap);
return pe32;th32ProcessID;
}
} while(Process32Next(hProcessSnap, &pe32));

CloseHandle(hProcessSnap);
return 0;
}

void pointerScanner()
{
MEMORY_BASIC_INFORMATION memBasic = {0};
SIZE_T bufferSize = 0;
DWORD_PTR address = 0;

HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION|PROCESS_QUERY_INFORMATION |PROCESS_VM_READ, NULL, pid);
if(!hProcess) {
pid = 0;
printf("Error OpenProcess %u\n",GetLastError());
return;
}

if (VirtualQueryEx(hProcess,(LPCVOID)START_POINTER_SEARCH,&memBasic,sizeof(MEMORY_BASIC_INFORMATION)) != sizeof(MEMORY_BASIC_INFORMATION))
{
printf("VirtualQueryEx failed %u\n",GetLastError());
return;
}
address = (DWORD_PTR)memBasic;BaseAddress;

PBYTE data = (PBYTE)malloc(DATA_BUFFER);

//printf("RegionSize %X BaseAddress %X\n",memBasic;RegionSize,memBasic;BaseAddress);

for (DWORD_PTR i = 0; i < memBasic;RegionSize; i+=DATA_BUFFER)
{
if (findPointerPattern(hProcess,address + i,data))
{
break;
}
}

free(data);
CloseHandle(hProcess);
}

bool findPointerPattern(HANDLE hProcess, DWORD_PTR address, PBYTE data)
{
DWORD_PTR result = 0;
DWORD rBuf = 0;

if (!ReadProcessMemory(hProcess,(LPCVOID)(address),data,DATA_BUFFER,&rBuf))
{
printf("Error ReadProcessMemory %u\n",GetLastError());
return false;
}

result = findPattern((DWORD_PTR)data,rBuf,(PBYTE)SEARCH_PATTERN, SEARCH_PATTERN_MASK);
if (result == 0)
{
return false;
}
else
{
readInformationFromResult(result);
return true;
}
}

void readInformationFromResult(DWORD_PTR result)
{
result += strlen(SEARCH_PATTERN_MASK) + 1;

gamePointer = *((DWORD_PTR *)(result));
magicValue = *((PBYTE)(result+11));

printf("[+] Found pointer: %X\n",gamePointer);
printf("[+] Found magic value: %X\n",magicValue);
}

DWORD_PTR findPattern(DWORD_PTR startOffset, DWORD size, PBYTE pattern, const char * mask)
{
DWORD pos = 0;
size_t searchLen = strlen(mask) - 1;

for(DWORD_PTR retAddress = startOffset; retAddress < startOffset + size; retAddress++)
{
if( *(BYTE*)retAddress == pattern[pos] || mask[pos] == '?' )
{
if(mask[pos+1] == 0x00)
{
return (retAddress - searchLen);
}
pos++;
} else {
pos = 0;
}
}
return 0;
}

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Xerthen
29.03.2011, 10:13

schönes tool
hab es mal für lernzwecke auseinander genommen :)

danke bitte mehr davon


Alex²
03.04.2011, 19:15

und wird auch in Zukunft noch funktionieren

Diese Aussage kannst du niemals treffen. Was würde passieren, wenn sich die Struktur so verändert, dass dein Pattern ungültig wird?

Ansonsten schönes Ding, auch wenns langsam langweilig wird :D


N0S
03.04.2011, 20:21

Diese Aussage kannst du niemals treffen. Was würde passieren, wenn sich die Struktur so verändert, dass dein Pattern ungültig wird?
Schon möglich, aber eher unwahrscheinlich. Bei einem Patch sollten Fehler beseitigt oder eben neue Features hinzugefügt werden. In der Regel macht man das aber so, dass man den vorhanden Code so wenig wie möglich ändert.


Ansonsten schönes Ding, auch wenns langsam langweilig wird :D
In jedem meiner geposteten Trainer sollte man neue oder andere Elemente finden, so dass es eigentlich nie langweilig werden sollte. Den Pointer Scanner hab ich auch nur deshalb eingebaut.
Der Code für die Trainer stammt in der Regel von meinen anderen Projekten, deswegen ist der Code meist auch unsauber^^ Aber der Punkt ist, ich lerne daraus nichts und poste das Zeug nur aus Freundlichkeit, wenn es also langweilig ist, lass ich es halt.


Alex²
03.04.2011, 20:31

Schon möglich, aber eher unwahrscheinlich. Bei einem Patch sollten Fehler beseitigt oder eben neue Features hinzugefügt werden. In der Regel macht man das aber so, dass man den vorhanden Code so wenig wie möglich ändert;

Ändert nichts an meinem Statement.

In jedem meiner geposteten Trainer sollte man neue oder andere Elemente finden, so dass es eigentlich nie langweilig werden sollte. Den Pointer Scanner hab ich auch nur deshalb eingebaut.
Der Code für die Trainer stammt in der Regel von meinen anderen Projekten, deswegen ist der Code meist auch unsauber^^ Aber der Punkt ist, ich lerne daraus nichts und poste das Zeug nur aus Freundlichkeit, wenn es also langweilig ist, lass ich es halt;


So meinte ich das nicht. Ich meine generell den Bereich. Bin mir sicher, dass du auch andere interessante Sachen kannst :D
Das der Pointer-Scanner "neu" ist, ist mir schon aufgefallen.


N0S
03.04.2011, 20:55

Ändert nichts an meinem Statement.
Na doch^^ ich denke das ist so wahrscheinlich, wie wenn ich behaupten würde "Crysis hat maximal 10 Bugs".
Crysis 2 hat sicherlich über eine Millionen Zeilen Quellcode, da ist es einfach extrem unwahrscheinlich, dass die Entwickler da grad an dieser einen Code Stelle rumpfuschen, die ich für das Pattern verwendet habe.


So meinte ich das nicht
Achso :] Naja was anderes ist schwer, weil ich nicht so viele legale Projekte habe^^


Overkiller
06.04.2011, 22:26

Der SearchPattern und NANO1 und NANO2 sind im Speicher die Adressen für den Wert für Nano oder?

Also läuft das im Endeffekt in einer Endlosschleife über den Wert und setzt ihn immer wieder auf 100 ? Sehe ich das richtig ?

Gruß


terraNova
07.04.2011, 04:42

NANOn stellt einen Offset dar und der Pattern dient dazu, die passende Adresse zur Signatur zu finden um dann letztendlich die Speicherstelle mit den Nano-Punkten ausfindig zu machen.

Ist das getan, werden per F1 jedesmal 100 Nano-Punkte hinzugefügt.


Ähnliche Themen zu [C/C++] Crysis 2 Trainer +1 Inkl. Pointer Scanner
  • [C/C++] von Pointer zu int
    Ich hab hier folgenden code inline int fCreateImage(int texture, int width, int height, int imageFlags) return(pCreateImageEx(&surf, width, height, imageFlags)); } } return(0); } return(pCreateImageEx(&surf, width, height, imageFlags)); gibt doch einen pointer zurück, aber di [...]

  • Suche Email-Scanner / Adress-scanner
    Hey Leute, bräucht en Programm was ich über Webseiten laufen lassen kann, und es mir die Email-Adressen ausließt bzw. komplette Adressblöcke (PLZ, Straße, Tel;) Wär sehr dankbar wenn mir da jmd weiterhelfen könnte... BW is klar ... THX im Vorraus! [...]

  • S/W-Laserdrucker inkl. Scanner bis 100€ (Canon PIXMA MG5250)
    hi, bin auf der suche nach so einem drucker. ich habe jetzt schon einige tests gelesen und bin entweder auf s/w laserdrucker ohne scanner gestoßen, oder auf farb-laserdrucker mit scanner. ich bräuchte aber einen s/w-laserdrucker MIT scanner^^ gibt es da was gutes was in diesem budget liegt? [...]

  • Suche ein Faxgerät, inkl. Kopierer/Scanner
    Hallo ;), suche für das Geschäft ein Faxgerät, mit dem ich auch im Notfall Dokumente über eine Scanfläche kopieren kann. Leider kann unser aktuelles Faxgerät nur normale Papiere kopieren, in schlechter Qualität. Es gibt keine Scanfläche, wo man z;B auch mal Pässe scannen/kopieren kann. [...]



raid-rush.ws | Imprint & Contact pr