[Tutorial] Gamehacking Howto I [Ger]

06/22/2009 13:33 Adroxxx#91
hm eigentlich nicht. weil CWnd ist ein teil von mfc. lösch mal deinen debug ordner , pack alles mit winrar und schicks mir mal bitte.
06/22/2009 13:36 schlurmann#92
Quote:
Originally Posted by renebubi View Post
Hm...funktioniert immer noch nicht so richtig und ja ich bin mir sicher^^, kann das eventuell was mit den librarys zu tuhen haben?
1. Errors posten.
2. Bist du sicher du hast MFC? Das ist nämlich nur in teuren kommerziellen Version dabei.
06/22/2009 13:49 Adroxxx#93
Quote:
Originally Posted by schlurmann View Post
1. Errors posten.
2. Bist du sicher du hast MFC? Das ist nämlich nur in teuren kommerziellen Version dabei.
Ich glaub mal, dass es immernoch die gleichen Errors sind. Das FindWindow keine Memberfunktion von CWnd ist.

Ja MFC ist nur bei dem Vollen Packet dabei. Also nicht bei der Express Edition. Wobei ich glaub bei dem ganz neuen Visual Studio ist es auch dabei. Ist aber nur Beta.

Hm, aber wenn das kein MFC Projekt ist, sollte der CWnd gar nicht kennen. Dann würde da kommen CWnd keine Klasse oder Namespace... seltsam.
06/22/2009 19:05 renebubi#94
ja ich habe mfc... hm ich poste dann mal die errors
Danke.. ;)
06/30/2009 13:41 FichteFoll#95
Also ich habe folgendes Problem:
Ich suche nach einem Pointer für den Jump und Walljump-hack bei S4. Das Problem ist, dass er nichts spezielles findet...

Ich habe den Wert gefunden, dann bin ich auf "Find outwhat accesses this address" gegangen und den Wert dann wieder manuell verändert (den Jump-value), da dieser nicht automatisch geändert wird. Jetzt zeigt er mir dann im Degugger "fld dword ptr [eax+1c]" an. Da dachte ich mir, such mal nach dem eax, der laut Extra info 02ABF544 ist. Also suche ich nach dem und finde: nichts.

Dann habe ich nach EDI gesucht ("00000A28"), worauf ich dann jedoch 143 values habe mit insgesamt ca 100 base pointern.

Screen ist im Anhang.

Was soll ich jetzt tun?

Achja, nice tut ^^ Ich denke man, das kann man auch mit Visual Basic so machen, oder? Und welches Bildbearbeitungsprogramm hast du benutzt?
06/30/2009 23:34 Frezee#96
Quote:
Originally Posted by FichteFoll View Post
Also ich habe folgendes Problem:
Ich suche nach einem Pointer für den Jump und Walljump-hack bei S4. Das Problem ist, dass er nichts spezielles findet...

Ich habe den Wert gefunden, dann bin ich auf "Find outwhat accesses this address" gegangen und den Wert dann wieder manuell verändert (den Jump-value), da dieser nicht automatisch geändert wird. Jetzt zeigt er mir dann im Degugger "fld dword ptr [eax+1c]" an. Da dachte ich mir, such mal nach dem eax, der laut Extra info 02ABF544 ist. Also suche ich nach dem und finde: nichts.

Dann habe ich nach EDI gesucht ("00000A28"), worauf ich dann jedoch 143 values habe mit insgesamt ca 100 base pointern.

Screen ist im Anhang.

Was soll ich jetzt tun?

Achja, nice tut ^^ Ich denke man, das kann man auch mit Visual Basic so machen, oder? Und welches Bildbearbeitungsprogramm hast du benutzt?
Nimm vielleicht mal die Pointer Suche von CheatEngine (rechtsklick und dann Pointer Scan for this adresse, dann alles so lassen und Scan drücken)

Einen Wallhack zu erstellen ist aber nicht ganz so leicht.

1. Möglichkeit: per Telepot Hack (sicher die einfachste) Du portest dich also immer ein kleines Stück weiter während du läufst. Du teleportierst dich dann quasi in eine Wand rein während du läufst und teleportierst dich immer weiter.
2. Ich kenn das Game zwar nicht, aber vielleicht kannst du ja einen Wallhack so erstellen, indem du dir einen Flug Hack bastelst und über die Wände drüber rennst.
3. Mit Ollydbg. Die ist schon etwas schwerer, ich weiß auch nicht wie das geht. (Kenne mich eigentlich nur mit Cheat Engine aus)

Mehr fällt mir grade auch ned ein, aber es gibt bestimmt noch viele andere Möglichkeiten.^^
07/01/2009 19:46 SWFninjatom#97
Adroxxx kannst du mir mal das mit dem pointer finden nochmal erklären ich verstehe das irgendwie nicht so ganz wie soll man herausfinden was für welche adresse is
07/09/2009 01:44 Adroxxx#98
Quote:
Originally Posted by SWFninjatom View Post
Adroxxx kannst du mir mal das mit dem pointer finden nochmal erklären ich verstehe das irgendwie nicht so ganz wie soll man herausfinden was für welche adresse is
Schau dir mal den Sammelthread mit Tutorials an. Da sind auch nochmal 2 Tutorials für DMA to Static.

btw. bisher ist niemanden mein super tolles elfenlied deckblatt aufgefallen :(
07/13/2009 00:26 anonymuus#99
Quote:
Originally Posted by renebubi View Post
hey,
ich hab ebenfalls ein Problem mit dem "Solitär Hack", .... ich kann ihn nicht starten weil ich zahlreiche Error´s bekomme wie z.B.:
1) error C2039: 'FindWindowExW' : is not a member of 'CWnd'
2) error C2664: 'FindWindowExW' : cannot convert parameter 4 from 'const char [8]' to 'LPCWSTR'


...hoffe auf Hilfe, danke im Vorraus ;)
Das Problem hab ich auch! Aber selbst ist der Mann, heulen bringt auch nix. Hab nur 2 Minuten rumgespielt und hatte für mich persönlich die Lösung: die Funktion muss FindWindowExA heißen. Ich hab bei mir Microsoft Visual Studio 2008 installiert, vielleicht liegts an der neueren Version.

Beispiel:
Code:
//...

void CSolitärHackDlg::m_lesen(void) 
{ 
    if (pWnd = CWnd::FindWindowExA(NULL,NULL,NULL,_T("Solitär"))) { 
     
        hWnd = HWND(pWnd->GetSafeHwnd());  
         
//...
Nicht schlecht für jemanden, der vor 2 Stunden erst vStudio installiert und vorher mit c++ nix am Hut hatte, was? :p

btw zurück, ich hab die ganze Zeit schon das Bild bewundert ;D is echt hübsch.

Hoffe, das hilft dir.



Dafür bring ich n anderes Problem rein^^

Quote:
Originally Posted by diesem dumme compiler
error C2664: '_wtoi' : cannot convert parameter 1 from 'CString' to 'const wchar_t *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Hat da jemand ne Idee?


Gruß,
anonymuus

EDIT: Hab das mit a und w mal weitergetrieben: atoi() konvertiert auch einen String in einen Integer, erzeugt im Compiler keinen Fehler, aber das fertige Programm spackt. Es bleibt bei lesen immer auf dem Wert -858993460 und bei schreiben tut sich nix.

07/13/2009 01:51 Adroxxx#100
Hallo anonymuus,

danke, dass du den Fehler mit FindWindow gefunden hast, den wohl mehrere hier haben.


Auch an dich die Frage: Ist deine Projekteinstellung auf Unicode? Oder Multibyte?
Dies kannst du sehen, wenn du unter Projekt -> Projekt Eigenschaften gehst und dann Konfigurationseigenschaften. Dort unter Zeichensatz.

Außerdem wäre es vielleicht auch Wichtig zu wissen, unter welchem System du Arbeitest. Windows Xp / Vista / 32bit / 64bit ...

Ich vermute mal, dass du unter Vista arbeitest. Ich habe gerade einen Interessanten Artikel in der MSDN gefunden: [Only registered and activated users can see links. Click Here To Register...]

Dort geht es um Ansi und Unicode. FindWindowEx ist die Grundfunktion die als Makro definiert ist. Ich benutzte in dem Tutorial direkt FindWindowExW. Was für Unicode ist.
Da FindWindowEx schon vordefiniert ist, könnte man auch das benutzten anstatt FindWindowExW(),

Zu dem _wtoi() problem: [Only registered and activated users can see links. Click Here To Register...]

Wenn du atoi benutzt kannst du folgende schreibweise benutzten:
PHP Code:
value = (int)atoi (m_Value); 
Falls du noch Probleme hast, kannst du dich hier melden.
07/13/2009 12:23 anonymuus#101
Quote:
Originally Posted by Adroxxx View Post
Hallo anonymuus,

Auch an dich die Frage: Ist deine Projekteinstellung auf Unicode? Oder Multibyte?

(...)

Außerdem wäre es vielleicht auch Wichtig zu wissen, unter welchem System du Arbeitest. Windows Xp / Vista / 32bit / 64bit ...
Tag,

Ich hab einfach das Projekt so gelassen wie default, das wäre dann bei mir Multibyte. Ich arbeite mit WinXP Pro 32bit, nicht mit [Only registered and activated users can see links. Click Here To Register...] ;)

Vielen Dank für die Hilfe, Compiler meckert wieder nich. Allerdings erscheint in der EditBox immernoch -858993460 wenn man liest, schreiben lässt sich auch nicht.

Wenn es von nutzen sein könnte, dann einfach mal mein [Only registered and activated users can see links. Click Here To Register...] ziehen.

Ich muss zugeben, das meiste is einfach aus der Zusammenfassung geklaut. Aber mit meinem bisherigen Wissensstand in C++ kann ich erst auf Kommandozeilenebene Zahlen addieren, subtrahieren, dividieren, multiplizieren und sortieren :D

Gruß,
~
07/13/2009 14:59 Adroxxx#102
Hast du mal versucht, das Projekt auf Unicode umzustellen? Eigentlich sollte es dann mit dem FindWindowExW und dem _wtoi() funktionieren.

Ansonsten sind immer Debug ausgaben recht hilfreich. Sprich abfrage, ob das Fenster gefunden wurde. (Das hab ich ja drin) und dann kannst du die zwischenschritte beim Pointer berechnen abfragen. Ob die richtige Adresse gelesen wurde.

Wenn dort so ein Wert raus kommt, liegt es meist daran, dass das falsche Window Handle genommen wurde, oder die falsche Adresse.

Ich schau mir mal dein Projekt an und editier es dann hier rein.

//edit: nächstes mal debug ordner löschen , dann wirds kleiner :)
Wenn du es auf Unicode stellst, kannst du _wtoi und FindWindowExW benutzten.
Dann sollte es eigentlich funktionieren. VS ist leider nicht abwärtskompatibel, deshalb kann ich dein Projekt nur in der Express starten aber net kompelieren. Ansonsten sah alles eigentlich richtig aus.
07/13/2009 20:33 anonymuus#103
Tut mir ja fast schon leid dich nochmal belästgen zu müssen... ;)

Quote:
Originally Posted by Adroxxx View Post
Hast du mal versucht, das Projekt auf Unicode umzustellen? Eigentlich sollte es dann mit dem FindWindowExW und dem _wtoi() funktionieren.
japp, funzt super.
Quote:
Originally Posted by Adroxxx View Post
und dann kannst du die zwischenschritte beim Pointer berechnen abfragen. Ob die richtige Adresse gelesen wurde.
dasss.. bitte nochmal für doofe

Quote:
Originally Posted by Adroxxx View Post
//edit: nächstes mal debug ordner löschen , dann wirds kleiner :)
hehe, sorry^^



Leider immernoch der immense negativ-Wert, wenn du mich nicht schon für meine vielen Fragen hasst, dann würd ich mich über noch ne Lösung freuen ;D

gruß, ~
07/13/2009 22:40 Adroxxx#104
Das ist nun wirklich seltsam. Ich habe mir deinen Source mal angeschaut. Sieht zumindest richtig aus. Ich kann dort keinen Fehler finden. Was die Sache natürlich knifflig macht.

Gut, [...] da hilft aber alles nichts [...]

Debug Ausgabe:
Es ist immer gut die Zwischenschritte auszugeben.

Beispiel:
PHP Code:
if (pWnd CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär"))) {
    
        
hWnd HWND(pWnd->GetSafeHwnd()); 
        
    }else{
    
AfxMessageBox(_T("Fenster nicht gefunden!"));
    } 
Da ist eine Abfrage, wenn das Fenster gefunden wurde, speichert er den Handle , falls nicht kommt eine Messagebox mit einer Fehlermeldung. Ist auch gut mal das Programm zu starten ohne das Solitär läuft, damit man schaut, ob wirklich die Fehlermeldung kommt.

Dann lesen wir ja die erste Adresse aus, damit wir an unseren Pointer kommen.
PHP Code:
ReadProcessMemory(hProc, (LPCVOID)address1, &address2sizeof(long), &numBytesRead); 
Hier lesen wir address1 aus, und schreiben es in address2.

Dort müssen wir uns mal address2 ausgeben lassen. Um zu sehen, welche adresse dort steht.

Das machen wir wie folgt:

PHP Code:
ReadProcessMemory(hProc, (LPCVOID)address1, &address2sizeof(long), &numBytesRead);

CString strAdress2;
strAdress2.Format(_T("%x"),address2);
AfxMessageBox(strAdress2); 
Was wir hier nun machen, wir legen einen CString an mit namen strAdress2. Und mit Format packen wir (unsigned long) address2 da rein, und die ausgabe ist in Hex ( %x).
Dann kommt eine MessageBox wo die Adresse dann ausgegeben wird.

Am besten startest du Solitär und Cheat Engine.
Du wählst bei CheatEngine Solitär als Ziel aus, und fügst die Adresse Manuell hinzu. Also 0x01007170 und schaust, welche Adresse dort drin steht.
Bei mir ist das z.B. 0x000AB640

Dann startest du dein Solitär Hack und klickst auf Lesen. Dann sollte eine MessageBox kommen, mit dieser Adresse.

Dann kannst du nochmal beim zweiten ReadProcessMemory auch so eine Ausgabe machen. Da sollte dann 0x00AB470 raus kommen, weil ja 0x30 dazu addiert wird.

Und nicht vergessen, wenn du auf Unicode umgestellt hast:
  • FindWindowExW
  • _wtoi()
Benutzten.

Falls noch Probleme sind, kannst du wie immer diese hier im Thread posten.
07/14/2009 12:50 anonymuus#105
PHP Code:
void CSolitärHackDlg::m_lesen(void

    if (
pWnd CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär"))) { 
     
        
hWnd HWND(pWnd->GetSafeHwnd());  
         
    }else{ 
    
AfxMessageBox(_T("Solitär wurde nicht gefunden!")); 
    } 
    
UpdateData(true); 
    
unsigned long address1 0x01007170
    
unsigned long offset 0x30
    
unsigned long address2 
    
int value 
    
DWORD numBytesRead
    
HANDLE hProc
        
    
DWORD procID
    
GetWindowThreadProcessId(hWnd,&procID); 

    
hProc OpenProcess(PROCESS_ALL_ACCESSFALSEprocID); 

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

    
CString strAdress2
    
strAdress2.Format(_T("%x"),address2); 
    
AfxMessageBox(strAdress2);  
    
    
address2 address2+offset 


    
ReadProcessMemory(hProc, (LPCVOID)address2, &valuesizeof(int), &numBytesRead); 
    
strAdress2.Format(_T("%x"),address2); 
    
AfxMessageBox(strAdress2); 

    
m_Value.Format(_T("%i"),value); 
     
    
UpdateData(false); 
     
    
CloseHandle(hProc); 

Ich habs einfach mal so gemacht, bin mir nicht sicher obs korrekt ist. Die erste Meldung teilt mir die Adresse cccccccc mit, die zweite ccccccfc. Ich hoffe dir sagt das mehr als mir :confused:

Danke für die Mühe