[C++] Hilfe gesucht.

07/18/2012 01:25 Kosic#1
Hey,

könnt ihr mir einen Tipp geben warum die Punkte nicht auf 999 gesetzt werden?

PHP Code:
#include <iostream>
#include <windows.h>

using namespace std;

DWORD Punkte 0x01007170;
DWORD set 0x30;
int value 999;

int main()
{
    
SetConsoleTitle("Solitär Hack");

    
HWND hwnd FindWindow(0"Solitär"); //Sucht ein Fenster mit dem Namen "Solitär" und schreibt dieses in hwnd

    
if(hwnd == 0//Wenn das Fenster nicht gefunden wurde
    
{
        
cout << "Can not find Solitär.exe" << endl;
    }
    else 
//Wenn das Fenster gefunden wurde
    
{
        
DWORD id;

        
GetWindowThreadProcessId(hwnd, &id); //Schreibt die Adresse von hwnd in die Variable id
        
HANDLE hProc OpenProcess(PROCESS_ALL_ACCESSFALSEid); //Öffnet den Process der in id gespeichert ist
        
cout << "Solitär found" << endl;

        if(!
hProc//Wenn der Process nicht geöffnet werden kann
        
{
            
cout << "Can not open Process";
            
cin.get();
        }
        else 
//Wenn der Process geöffnet werden kann
        
{
            
Punkte Punkte set;
            
WriteProcessMemory(hProc,(LPVOID)Punkte, &valuesizeof(int), NULL);
            
cout << "Now you will have 999points" << endl;
        }
        
CloseHandle(hProc);
    }

    
cin.sync();
    
cin.get();
    return 
0;

Mfg, XxKosicxX
07/18/2012 01:58 Jeoni#2
Ich denke mal, dass du Win7 oder Vista hast, weswegen du Pointer nutzen musst und keine statische Adresse, wie du es im Moment hast. Gibt in der Tutorials-Section nen Tutorial zum hacken von Solitär (ich glaube das war "Gamehacking - HowTo I" von Adroxxx). Das kannste nutzen um dein Problem zu bewältigen. ;)
Mit freundlichen Grüßen
Jeoni
07/18/2012 02:12 Kosic#3
Jo kenne das Tutorial und habe mein Programm auch darauf aufgebaut aber jetzt hilft mir das TuT auch nicht wirklich ^^

Mfg, XxKosicxX
07/18/2012 11:33 MoepMeep#4
Ich würde spontan ja auf Adresse falsch tippen.
07/18/2012 11:37 Jeoni#5
Ich denke schon, dass dir das Tut weiterhilft. Immerhin haste bisher nur eine statische Adresse einprogrammiert. Laut Adroxxx brauchste aber ein Pointer, weil sich genau die statische Adresse am Ende bei jedem Programmstart verändert.
Denn
Code:
Punkte = Punkte + set;
ist nicht der pointer. Du musst erst auslesen (ReadProcessMemory), was in der Adresse Punkte steht. Diesen ausgelesenen Wert addierst du dann mit deinem Offset (0x30) und dann haste eine Adresse mit der du bei WriteProcessMemory auch deinen Punktestand verändern kannst. ;)

Zudem besteht immernoch die Möglichkeit, dass die Adresse (Pointer oder auch Offset) sowieso falsch ist und es daran scheitert, da hat MoepMeep Recht. Es kann auch sein, dass du nicht den "tiefsten" Pointer gefunden hast, sondern eher einen an der Oberfläche. Daran kann dein Vorhaben auch scheitern.
07/18/2012 18:03 Kosic#6
Ok werde es mal zusätzlich mit ReadProcessMemory probieren und die Adresse nochmal überprüfen
07/18/2012 19:14 MrSm!th#7
#moved
07/18/2012 22:52 Kosic#8
#Update

Habe das Problem das komischerweise ich über 2 adressen gehen muss um an den pointer zu kommen und jetzt würde ich gerne fragen wie ich das in einen c++ code schreiben soll.

[Only registered and activated users can see links. Click Here To Register...]

Test von mir für Code (Punkte haben sich NCIHT verändert. Sind weiterhin auf 0 gesetzt)

PHP Code:
#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

unsigned long Adress 0xFFDDAFA8;
unsigned long offset 0x14;
unsigned long offset2 0x50;
int value 999;

int main()
{
    
SetConsoleTitle("Solitär Hack");

    
HWND hwnd FindWindow(0"Solitär"); //Sucht ein Fenster mit dem Namen "Solitär" und schreibt dieses in hwnd

    
if(hwnd == 0//Wenn das Fenster nicht gefunden wurde
    
{
        
cout << "Can not find Solitär.exe" << endl;
    }
    else 
//Wenn das Fenster gefunden wurde
    
{
        
DWORD id;

        
GetWindowThreadProcessId(hwnd, &id); //Schreibt die Adresse von hwnd in die Variable id
        
HANDLE hProc OpenProcess(PROCESS_ALL_ACCESSFALSEid); //Öffnet den Process der in id gespeichert ist
        
cout << "Solitär found" << endl;

        if(!
hProc//Wenn der Process nicht geöffnet werden kann
        
{
            
cout << "Can not open Process";
            
cin.get();
        }
        else 
//Wenn der Process geöffnet werden kann
        
{
            
Adress Adress offset2;
            
Adress Adress offset;
            
WriteProcessMemory(hProc,(LPVOID)Adress, &valuesizeof(value), NULL);
            
cout << "Now you will have 999points" << endl;
        }
        
CloseHandle(hProc);
    }

    
getch();
    return 
0;

Mfg,
XxKosicxX
07/22/2012 12:40 MrSm!th#9
Wurde doch schon geschrieben, du sollst erst den Wert an Adresse auslesen, dazu Offset1 addieren, wieder auslesen und dazu Offset2 addieren, dann hast du die Adresse, an der du die Punkte auslesen kannst.

Lern erstmal C++ und beschäftige dich mit Pointern, bevor du dich ans Gamehacking machst.