[Tutorial] Gamehacking Howto I [Ger]

07/14/2009 13:28 Adroxxx#106
Also ich habe deinen Code mal bei mir in die Funktion reinkopiert und er funktioniert Wunderbar.

Bist du sicher, dass Solitär bei dir auch wirklich Solitär heißt? Vielleicht hast du es umbenannt.

Und führst du den Hack als Administrator aus?

Vom Programmiercode her ist alles richtig, anders könnte ich mir das nicht erklären. Du brauchst wohl Admin rechte weil du den Speicher ja ausliest und schreibst.
07/15/2009 11:49 anonymuus#107
Solitär umbenennen? oO Du überschätzt mich ;D

Ich führe den Hack definitiv als Admin aus, aber du hast mich auf ne verdammt gute Idee gebracht! Meine Firewall hat das als Angriff erkannt und dementsprechend geblockt. Generell gut, aber im Moment nich zu gebrauchen. Ich hab die Firewall dann mal vorrübergehend außer Kraft gesetzt, die Adressen ändern sich schonmal. 78a40a04 vor dem Hinzufügen des Offsets und danach 78a40a34.

Immernoch nicht korrekt, aber sieht besser aus. Es könnte sein, dass die Firewall im ausgeschalteten Zustand immernoch was im System hinterlässt, deswegen deinstallier ich sie eben schnell, teste es erneut und schreib dann nochmal ob das geklappt hat.
07/15/2009 12:02 Adroxxx#108
Ja ich hab keine Firewall, deshalb habe ich nicht an sowas gedacht :)
07/15/2009 12:50 anonymuus#109
Keine Firewall? Du bist aber mutig^^ Ich war schockiert als ich gesehen hab welche Komponenten wohin telefonieren...

@offtopic: Nur zu empfehlen: gibt weder mir noch sonst jemandem die Chance, Codeinjektionen auszuführen. [Only registered and activated users can see links. Click Here To Register...]

Naja, hat leider nichts gebracht. Die Adressen bleiben komischerweise die selben, aber der Wert hat sich geändert: 1244812. Schreiben funzt nich, lesen funzt nich. Zu schade :(
07/15/2009 12:54 Adroxxx#110
Hm das ist wirklich seltsam. Schick mir mal deine exe datei. Aber kompelier sie als release nicht als debug.
07/16/2009 12:31 anonymuus#111
hmmm.... wenns bei dir funzt dann liegt das problem bei mir. einfach mal neu aufsetzen und schaun welche komponente stört, falls es so ist.

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

Danke... :o
07/16/2009 13:21 Adroxxx#112
Nein Funktioniert bei mir nicht. Das Problem wird am Handle liegen. Du hast nicht den Prozess als Ziel. Merkst du daran, wenn du Solitär zu machst, kommt zwar eine Fehlermeldung, dass Solitär nicht gefunden wurde, aber die Messageboxen zeigen die gleichen Adresse, wie als es offen war.

Dein Fehler wird irgendwo bei der Übergabe vom Handle / holen der procid liegen.

Mach dir dort am besten auch debug ausgaben.
Von pWnd, hWnd, procid, hproc.

pWnd ist dann das handle von solitär, in hWnd sollte dann das gleiche stehen, weil der ja da rein kopiert. Im Taskmanager solltest du dann auch die procid sehen und kannst vergleichen ob alles gleich ist.
07/29/2009 11:23 kazehihi#113
hat hat mal ein DICKES *THANKS verdient ich als anfänger hab alles verstanden und kann jetzt durch deine hilfe solitär hacken.... (jetzt kann mich niemand in solitär schlagen xDD)
07/29/2009 14:55 Adroxxx#114
Quote:
Originally Posted by kazehihi View Post
hat hat mal ein DICKES *THANKS verdient ich als anfänger hab alles verstanden und kann jetzt durch deine hilfe solitär hacken.... (jetzt kann mich niemand in solitär schlagen xDD)
Es sollte klar sein, dass Solitär hier nur ein Platzhalter für jedes belibige Spiel ist. Ich habe nur Solitär genommen, weil es jeder auf dem Rechner hat und um die Basics zu zeigen. Die Methoden nach Adressen suchen, Pointer finden, verändern, Hack schreiben etc. kannst du alles auch auf andere Spiele anwenden. Bei Onlinespielen geht das natürlich nur teilweise.
07/30/2009 01:40 Creativ#115
Vielen Dank erstmal für das Tutorial, genau soetwas habe ich gesucht, um die Basics zu lernen :)

Jedoch funktionierts nicht so wie ich es möchte.
Ich habe den Code bei m_lesen hinzugefügt, um heraus zu finden welche Adresse gespeichert wird.
Code:
	CString strAdress2;
	strAdress2.Format(_T("%x"),address2);
	AfxMessageBox(strAdress2);  
	AfxMessageBox(procID);
Resultat:ccccccfc, procID wurde mir garnicht erst angezeigt.
Da mir procID nicht angezeigt wurde, muss ja etwas falsch bei hWnd usw sein.

Code:
if (pWnd = CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitaire"))) {

    hWnd = HWND(pWnd->GetSafeHwnd()); 
        
    }else{
    AfxMessageBox(_T("Fenster nicht gefunden!"));
    }
Einen Fehler finde ich hier nicht.

Die Adressen scheinen auch OK zu sein, hab auch mit CheatEngine überprüft ob sie auch stimmen, ja, das tun sie.
Code:
    unsigned long address1 = 0x01007170;
    unsigned long offset = 0x30;
    unsigned long address2 ;
Bin gerade echt etwas verwirrt. Ich weiß net weshalb es nicht funktioniert..
btw, ich benütze Win XP Prof. (Englische Version, deshalb auch "Solitaire")
Character Set ist auf Unicode eingestellt.

Weißt du vl. bescheid?
07/30/2009 02:39 nitey#116
Ich danke dir!!!!
Ist echt hilfreich!!!
09/28/2009 15:33 Banana.Crafts#117
echt cool
jetzt weiß ich wie man mit so was anfängt;D
aber ich glaub ich lass es erst ma
ich probiers ma wenn ich merh zeit hab
10/02/2009 14:55 daChicken™#118
Gute Arbeit
10/05/2009 22:28 MrSm!th#119
PHP Code:
void CCEtrainerDlg::m_lesen(void)
{
    if (
pWnd CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär"))) 
        {
        
        
hWnd HWND(pWnd->GetSafeHwnd()); 
        }
    else
    {
    
AfxMessageBox(_T("Fenster nicht gefunden!"));
    }  

    
UpdateData(true);
    
unsigned long address1 0x006660f4;
    
unsigned long offset 0x2C;
    
unsigned long offset2 0x10;
    
unsigned long address2 ;
    
unsigned long address3 ;
    
int value ;
    
DWORD numBytesRead;
    
HANDLE hProc;
    
DWORD procID;

    
GetWindowThreadProcessId(hWnd,&procID);

    
hProc OpenProcess(PROCESS_ALL_ACCESS,FALSE,procID);

    
ReadProcessMemory(hProc,(LPCVOID)address1,&address2,sizeof(long),&numBytesRead);

    
address2 address2+offset;


    
address3 address2+offset2;

    
ReadProcessMemory(hProc,(LPCVOID)address3,&value,sizeof(int),&numBytesRead);

    
m_Value.Format(_T("%i"),value); 

    
UpdateData(false);

    
CloseHandle(hProc);
}

void CCEtrainerDlg::m_schreiben(void)
{
    
    if (
pWnd CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär"))) {
        
        
hWnd HWND(pWnd->GetSafeHwnd()); 
        
    }else{
    
AfxMessageBox(_T("Fenster nicht gefunden!"));
    }
    
UpdateData(true);
    
unsigned long address1 0x006660f4;
    
unsigned long offset 0x2C;
    
unsigned long offset2 0x10;
    
unsigned long address2 ;
    
unsigned long address3 ;
    
int value ;
    
DWORD numBytesRead;
    
HANDLE hProc;
    
DWORD procID;

    
GetWindowThreadProcessId(hWnd,&procID);

    
hProc OpenProcess(PROCESS_ALL_ACCESSFALSEprocID);

    
ReadProcessMemory(hProc, (LPCVOID)address1, &address2sizeof(long), &numBytesRead);
    
address2 address2+offset ;

    
address3 address2+offset2 ;
    
    
value _wtoi (m_Value);
    
WriteProcessMemory(hProc,(LPVOID)address3,&value,sizeof(value),NULL);
    
    
    
UpdateData(false);
    
    
CloseHandle(hProc); 


hm ich habe ein ähnliches problem wie das genannte auf der letzten seite =/
wenn ich auslese kommt ein wert wie 2213313 raus, wenn ich 3 schreibe, dann steht beim nächsten lesen wirklich 3 dort, also scheint er ja die 3 wirklich auf die richtige adresse zu schreiben.....und sie ist auch die richtige denn wenn ich das selbe via CE mache klappts
vielleicht liegts echt am Handle aber komischerweise schreibt er es ja auf die richtige adresse dann müsste es doch eigentlich auch im spiel zu sehen sein oder nicht?
10/05/2009 22:59 Adroxxx#120
Wenn du Vista benutzt, musst du den Trainer als Admin starten.