2 Offset writen

07/03/2012 16:43 .Scare™#1
Hallo Com,

ich habe gerade das Tut von Adroxxx durchgemacht [Only registered and activated users can see links. Click Here To Register...]

doch leider geht bei mir was nicht ganz und zwahr habe Ich 2 offset's und nicht nur einer, wie müste ich das den schreiben?

PHP Code:
 WriteProcessMemory(hProc,(LPVOID)address2,&value,sizeof(value),NULL); 
Und hier nochmal der ganze Quelltext der Funktion:

PHP-Code:
void CSolitärHackDlg::m_schreiben(void)
{

    if (
pWnd CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär"))) {
        
        
hWnd HWND(pWnd->GetSafeHwnd()); 
        
    }else{
    
AfxMessageBox(_T("Fenster nicht gefunden!"));
    }

    
unsigned long address1 0x01007170;
    
unsigned long offset 0x30;
    
unsigned long address2 ;
    
int value ;
    
DWORD numBytesRead;
    
HANDLE hProc;
    
    
DWORD procID;
    
UpdateData(true);

    
GetWindowThreadProcessId(hWnd,&procID);

    
hProc OpenProcess(PROCESS_ALL_ACCESSFALSEprocID);

    
ReadProcessMemory(hProc, (LPCVOID)address1, &address2sizeof(long), &numBytesRead);
    
address2 address2+offset ;
    
    
value _wtoi (m_Value);
    
WriteProcessMemory(hProc,(LPVOID)address2,&value,sizeof(value),NULL);
    
    
    
UpdateData(false);
    
    
CloseHandle(hProc);

c habe nun den Basepointer 0xFF8EAFA8

und meine 2 Offset's, 14 und 50

hoffe das mir einer behilflich sein kann.

MFG
.Scare™
07/04/2012 01:14 MrSm!th#2
ein pointer ist im grunde auch nur eine variable, die als wert die adresse einer anderen hat.
du addierst also dein erstes offset zur base und liest den wert an der adresse aus.
diesen siehst du nun wiederum auch als adresse, addierst das 2. offset hinzu und du hast die adresse, an der der wert steht, den du auslesen willst.
07/04/2012 09:58 Lazeboy#3
Falls du es noch nicht hasst:

Code:
unsigned long BaseAddr = 0xFF8EAFA8;
unsigned long offsetOne = 14 ; 
unsigned long offsetTwo = 50;

unsigned long TmpAddr; 

ReadProcessMemory(hProc, (LPCVOID)BaseAddr , &TmpAddr, sizeof(long), &numBytesRead);
TmpAddr= address2+offsetOne ; 

ReadProcessMemory(hProc, (LPCVOID)address1, &TmpAddr, sizeof(long), &numBytesRead);
TmpAddr= address2+offsetTwo;

//hier hat TmpAddr den Zeiger auf die Value
//mit WriteProcessMemory wird auf den Wert von TmpAddr geschrieben und der Wert von dem Zeiger ist die Value die mit ownValue überschrieben wird
WriteProcessMemory(hProc,(LPVOID)TmpAddr,&ownValue,sizeof(value),NULL);
Wie MrSm!ith schon sagt ist in dem Fall BaseAddr eine Variable die als Wert(eine Adresse) auf eine andere Variable zeigt. Diese zweite Variable addiert mit dem ersten Offset zeigt wieder auf eine Variable und enthält wiederrum als Wert eine Adresse. Dieser Wert(also die adresse) addiert mit dem zweiten offset zeigt letztendlich auf eine Variable die als Wert die gewünschte Value enthält.
07/04/2012 11:49 Medix#4
Sieh es bitte als konstruktive kritik: Beschäftig dich nochmals in einem Buch oder gutem Tutorial etwas näher mit Pointer. Das Verständnis von Pointern ist einfach unerlässlich wenn du dich mit Gamehacking beschäftigen willst.
07/05/2012 15:54 .Scare™#5
das werdi ich gleich so mal ausprobieren, ja ich lese mich im internet durch, da ich bis anhin noch kein gutes Buch gefunden habe für c++ im bezug auf pointer.

aber währe auch dankbar für ein gutes buch mitdem ich was anfangen könnte.

besten Dank
.Scare™