Adres pamięci w kawałkach

0

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;
}
0

Nie chce mi się pisać wszystkiego.
Tu masz kod http://www.dreamincode.net/forums/showtopic33779.htm , przyjrzyj się mu, może Ci pomoże.

0

Tzn. jak konkretnie zrobić żeby można adresy w kawałkach w całość składać bo tam nie jest pokazane :F

0

Człowieku, bierzesz się za hacki a elementarnych podstaw nie masz - to wyliczyć na liczbach? Dowiesz się co mają wspólnego wskaźniki z liczbami i jak się tego używa.

0

*umiesz to wyliczyć na liczbach?

0

UINT_PTR speed = 2618; czyli a3a.. tylko nie jestem taki dobry w programowaniu, a ty takimi postami tylko zniechęcasz ludzi

1 użytkowników online, w tym zalogowanych: 0, gości: 1