OldSchoolHack

Register / Login English

GameHacking Tutorial Part 06


icon GameHacking Tutorial Part 06 #1

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Das mittlerweile sechste Tutorial ist fertig. Diesmal lernt ihr, wie man in C++ Trainer programmiert.

Download


greetz KN4CK3R

__________________

Hallo
icon #2

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
danke für den Hinweis mit der ProzessID. Gar nicht aufgefallen bei der Kontrolle.
Benutz bitte in Zukunft den
TEXT Code:
  1. Tag, da es keine Unterscheidung zwischen den Sprachen gibt. [img]https://www.oldschoolhack.me/forum/images/button_code.gif[/img]
  2.  
  3.  
  4. greetz KN4CK3R

__________________

Hallo
icon #3

Join Date: Sep 2007

Posts: 19

hmm der trainer kann den prozess net finden xD(zumindest bei mir).ich hab das mit nem anderem programm getestet und da hats geklappt...kann das am ü im namen liegen?

__________________

Vorne ist das Pferd hinten als höher...
icon #4

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
wie gesagt, kA warum das bei dir als einzigstem nicht geht...Weil wenn ich meinen Code 1:1 kopiere geht alles...


greetz KN4CK3R

__________________

Hallo
icon #5

Join Date: Feb 2008

Posts: 7

Erstmal Hallo und Danke für die Tutorials!
Endlich hab ich mich mal an Olly und C++ gewagt (kann hauptsächlich Java)

@ Fenster nicht gefunden:
Bei mir ging
TEXT Code:
  1. FindWindow()
nicht, da der vollständige String anscheinend nicht \"MS Pinball bla\" ist...
(geht da irgendwas durch ein Locale verloren?)
Meine Lösung:
TEXT Code:
  1.  
  2. HWND fenster = 0;
  3. while(fenster == 0)
  4. {
  5. EnumWindows(EnumWindowsCallback, LPARAM(&fenster));
  6. Sleep(1000);
  7. }
  8.  
Und dazu die Hilfsfunktionen:
TEXT Code:
  1.  
  2. int FindStringInString(char *pStr, char *pFind)
  3. {
  4. int strLength = strlen(pStr);
  5. int findLength = strlen(pFind);
  6. if(pStr == 0 || pFind == 0 || strLength < findLength) return -1;
  7.  
  8. for(int i = 0; i < strLength - findLength + 1; ++i)
  9. {
  10. for(int j = 0; j < findLength; ++j)
  11. {
  12. if(pStr[i+j] != pFind[j] ) break;
  13. if(j == strlen(pFind) - 1) return i;
  14. }
  15. }
  16.  
  17. return -1;
  18. }
  19.  
  20. static BOOL CALLBACK EnumWindowsCallback(HWND hWnd, LPARAM lParam)
  21. {
  22. HWND* pCadetWnd = (HWND*)lParam; //zeiger auf handle holen
  23. char sTitle[128];
  24. char sToFind[24];
  25. strcpy(sToFind, "Pinball"); //space cadet reinschreiben
  26. GetWindowText(hWnd, sTitle, 128);//fenster titel reinschreiben
  27.  
  28. if(FindStringInString(sTitle, sToFind) >= 0) //sTitle enthält sToFindyy
  29. {
  30. *pCadetWnd = hWnd; //handle abspeichern
  31. return false; //gefunden, callback aufrufe stoppen
  32. }
  33.  
  34. return true; //weiter callback aufrufen
  35. }
  36.  
(für Noobs: einfach die Hilfsfunktionen vor die main-Funktion stellen, sowie den oberen Code in Kn4ck3rs Beispiel ersetzen)
-> Sucht nach String in String (hier "Pinball"), liefert unglücklicherweise natürlich auch ein Wordfenster, falls ihr Pinball.doc offen habt

2.:
Kann man die Pinballspeicheradressen dynamisch finden?
Hab das Gefühl TSearch gibt absolute Speicheradressen zurück (stimmt das?) und dadurch sind sie jedes mal leicht anders...
icon #6

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
1) ja, in der deutschen Version hat C++ Probleme, da das "ü" nicht gefunden werden kann. Abhilfe dazu:
TEXT Code:
  1. hwnd = FindWindow("1c7c22a0-9576-11ce-bf80-444553540000",NULL);
Einfach nach der Fensterklasse suchen.

2) TSearch liefert, wie alle anderen MemorySearcher auch, die absolute Adresse aus. Ob diese sich von Start zu Start ändert liegt einzig am Programm. DOS Programme -> immer anders, Win32 Programme -> fast immer gleich


greetz KN4CK3R

__________________

Hallo
icon #7

Join Date: Aug 2009

Posts: 7

Beim programmieren mit C++
würde ich gerne ein programm programmieren das einfach nur dateien öffnet

dabei benutze ich diesen befehl: case 1: system("c:\\WINDOWS\\system32\\calc.exe");break;

aber leider funktioniert der nicht mit der antwort :17     case `1' not within a switch statement
                                                                                     break statement not within loop or switch
   
icon #8

Join Date: Jan 2010

Posts: 1

Hallo
Ich bin neu hier und finde die seite echt super  
Hab in den letzten tagen deine tutorials gemacht . große klasse!
Nur hier bei nr.6 komm ich einfach nicht weiter.
Hab den Code (des Lerneffects wegen) Natürlich stück für stück abgeschrieben.
Aber der Trainer bleibt irgendwo nach der 1. Textausgabe und vor der 2. hängen :/
kann nichts machen steht einfach nur : MS Pinball Trainer  Code by KNACKER  .
Hier ist mein Code:

Spoiler
TEXT Code:
  1.  
  2.  
  3. #include <iostream.h>
  4. #include <windows.h>
  5. #include <conio.h>
  6.  
  7. using namespace std;
  8.  
  9. int punkte;
  10.  
  11. int main()
  12. {
  13.  
  14. cout <<"MS Pinball Trainer" << endl <<"Code by KN4CK3R"<< endl;
  15.  
  16. HWND fenster = NULL;
  17. while(fenster == NULL)
  18. {
  19. fenster = FindWindow(NULL, "3D-Pinball für Windows – Space Cadet");
  20. Sleep(100);
  21. }
  22. cout<<"Pinball wurde gefunden!" << endl;
  23.  
  24. DWORD prozessid;
  25. GetWindowThreadProcessId(fenster, &prozessid);
  26.  
  27. HANDLE handleprozess;
  28. handleprozess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, prozessid);
  29.  
  30. DWORD puffer = NULL;
  31. ReadProcessMemory(handleprozess,(void*)(0x0C23EDC),&punkte,sizeof(punkte),&puffer);
  32.  
  33. cout <<"aktueller Punktestand: " << punkte << endl;
  34. cout <<"neuer Punktestand: ";
  35. cin >> punkte;
  36.  
  37. WriteProcessMemory(handleprozess,(void*)(0x0C23EDC),&punkte,sizeof(punkte),&puffer);
  38. WriteProcessMemory(handleprozess,(void*)(0x0D9AEBA),&punkte,sizeof(punkte),&puffer);
  39.  
  40. CloseHandle(handleprozess);
  41.  
  42. return 0;
  43.  
  44. }
  45.  

Mit deinem Bsp. Code und Copy+Paste ging garnichts


Adsun
icon #9

Join Date: Jun 2010

Posts: 50

Hoy ich hab en Problem und zwar kommt bei mir wenn ich auf Ausführen Klicke immer die Meldung "Quelldatei ist nicht kompliemiert" das ändert sich aber auch nicht wenn ich sie komplimiere... hat jemand von euch das gleiche prob. und kann mir helfen?

Mb gz Freeks