Witam, mam problem z moim programem najpierw podam co on robi:
(Programik ma modyfikować adresy pamięci pewnej gry)
1.Podajesz 4 pierwsze litery adresu (w hex) przykładowo: 18DD (jest to taki jakby Base Address do konstrukcji adresów)
2.Program dodaje do tego ciągu różne wartości w przypadku speedhacka jest to wartość HEX A3A
Czyli nasz adres powinien być 18DDA3A
3.Następnie chce zmienić wartość tego adresu która początkowo wynosi 16230.
Problem jest z krokiem trzecim, mimo że WriteProcessMemory zwraca że jest OK to wartość adresu nie zmienia się :/
Początkowo adresy są w UINT_PTR ale konwertuje je w HEX'y żeby móc dodać jeden adres do drugiego :F wiem pokręciłem troche.
(Tu akurat w kodzie posłużyłem sie troche inaczej bez użycia Hex2 tylko ręcznego dodania A3A)
http://img710.imageshack.us/img710/8660/lolkia.png
Kod:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <BaseTSD.h>
#include <string>
#include <cstdlib>
#include <Tlhelp32.h>
#include <tchar.h>
#include <sstream>
using namespace std;
int main(int argc, char *argv[])
{
///////////////////////////////////////Zmienne///////////////////////////////////////////////
HWND okno; //uchwyt okna
DWORD x; //tu będzie nasz PID (numer procesu)
HANDLE okno2;
int valute; //wartość którą damy
unsigned base=0x31E8A3A; //Adress pamięci
okno= FindWindow(NULL,"4Story");
GetWindowThreadProcessId(okno,&x);
cout<<"PID to: "<<x<<endl;
okno2 = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION ,false,x);
//Czy wszystko jest ok
if (okno2!=0)
{
cout<<"Wykryto proces"<<endl;
}else{
cout<<"Nie wykryto procesu"<<endl;
}
UINT_PTR basic;
UINT_PTR speed = 2618;
UINT_PTR speedhack;
int r = 0;
char Hex[4];
char Hex2[3];
char Hex3[7];
std::cout << "Enter address: ";
std::cin >> std::hex >> basic;
_itoa(basic, Hex, 16);
_itoa(speedhack, Hex3, 16);
_itoa(speed, Hex2, 16);
cout << "Hex: " <<Hex<<endl;
cout << "Hex2: " <<Hex2<<endl;
int i;
for(i=0; i<7; i++)
{
if(i<4) Hex3[i]=Hex[i];
else { Hex3[4]='a'; Hex3[5]='3'; Hex3[6]='a'; }
}
cout << "Address is " << Hex3;
cout<<"\nSpeed value:\n";
cin >> valute;
if((WriteProcessMemory (okno2,Hex3,&valute,sizeof(int),NULL)) == 1) {
cout << "Predkosc zostala zmieniona!\n";
} else {
cout << "Predkosc nie zostala zmieniona!\n";
}
system("PAUSE");
return EXIT_SUCCESS;
}