|
You last visited: Today at 04:47
Advertisement
[Tutorial] Gamehacking Howto I [Ger]
Discussion on [Tutorial] Gamehacking Howto I [Ger] within the Coding Tutorials forum part of the General Coding category.
10/14/2009, 17:31
|
#136
|
elite*gold: 0
Join Date: Oct 2009
Posts: 30
Received Thanks: 5
|
wenn du es z.b. in nem mmorpg machst dann wirst du nur im client den betrag ändern du siehst zwar z.b. 9999 gold aber die bringen dir nichts da das geld in den datenbanken der server gespeichert sind
|
|
|
10/14/2009, 17:41
|
#137
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by Magix92
Okay, das habe ich mir eigentlich auch schon so gedacht.
Habs mal bei Pinball versucht, klappt wunderbar.
Super Tutorial
Jetzt Noobfrage des Jahrhunderts: Warum macht man dann nicht einfach somit Geld in iwelchen Onlinegames hoch?
Engine wird detected oder...wäre ja sonst zu einfach 
|
macht man ja auch nur nicht mit geld weil das in der regel serversided ist sondern mit dingen die im client bearbeitet werden wie speed oder ähnliches
CE wird nicht überall detected meistens nur wenn es ein protect programm gibt
|
|
|
10/14/2009, 17:51
|
#138
|
elite*gold: 0
Join Date: Oct 2009
Posts: 37
Received Thanks: 8
|
Okay super-ich danke euch.
Aber ich hänge mich gerade ständig an dem Schrit mit dem Pointer auf, ich suche die edi Adresse, setze Haken bei Hex und drücke new scan.
NICHTS wird gefunden.
Was mache ich falsch?
Next scan bringts auch nicht.
Gestern hab ichs noch hinbekommen
|
|
|
10/14/2009, 19:04
|
#139
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Nix zu danken.
Es ist nicht immer EDI! Du musst den Wert von dem Register nehmen, das in dieser "Rechnung" verwendet wird!
Hier ist es mov eax, [esi+30] an der stelle von esi kann auch was anderes stehen udn davon musst du den Wert nehmen!
CE ist aber so nett und schreibt ein bischen weiter unten (kann man auch auf dem screen sehen) nach welchem Wert man suchen muss
|
|
|
10/14/2009, 19:12
|
#140
|
elite*gold: 0
Join Date: Oct 2009
Posts: 37
Received Thanks: 8
|
Quote:
Originally Posted by xhelloselm
[esi+30]
|
In Pinball steht da aber nur [esi] ohne die +30
Was nun?
|
|
|
10/14/2009, 19:23
|
#141
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
ja dann nimmst du nur den wert von esi!
aber es kann auch sein, dass du den falschen befehl ansiehst!
bei adroxxx auf dem screen ist ja auch einmal
mov eax, [esi+30]
mov [esi+30], eax
dann könnte man glauben es geht um eax
deswegen nutze ich wie gesagt den tipp von CE  :
da könnte man auch glauben es geht um ecx oder edx deswegen wie gesagt ich nehm den tipp von CE^^
|
|
|
10/14/2009, 19:42
|
#142
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Quote:
Originally Posted by Magix92
In Pinball steht da aber nur [esi] ohne die +30
Was nun?
|
Bei Pinball findet man den Poiter etwas anders. Da musst du am besten mit Olly ran und einen BP machen, und dann einen BP auf den Funktionanfang und dann auf die RET adresse, und dann schauen wo ESI geschrieben wird.
|
|
|
10/14/2009, 19:48
|
#143
|
elite*gold: 0
Join Date: Oct 2009
Posts: 37
Received Thanks: 8
|
Danke soweit.
Aber ich hänge gerade an dem Punkt
"Nun rufen wir bei der Funktion OnBnClickedButton1() die funktion m_lesen auf."
Wie gehtn das?
Sorry, noob am Start
|
|
|
10/14/2009, 20:06
|
#144
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Steht doch da....
Ist doch
BlaBlub::OnBnClickedButton1() {
//Aufruf von m_lesen
m_lesen();
}
|
|
|
10/14/2009, 20:10
|
#145
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
aber das steht doch auf der ersten seite^^
einfach in die funktion
m_lesen();
rein
@Adroxxx:
Vielleich hilft das noch:
Wie gesagt hWnd und ProcID sind richtig, also kanns ja nur am Handle zum Programm liege, und das würde auch Sinn ergeben!
Scheinbar erkennt mein Vista nichtmal, dass der Trainer überhaupt einer ist.
Bei CE muss ich mit aktivierter UAC ein Adminpasswort eingeben, bei meinem Trainer nicht, obwohl sie beinahe die selbe Funktionsweise haben.
Also liegt es entweder echt am Handle oder an Mfc.
Ich vermute eher am Handle, diese ist nämlich jedes Mal gleich und da mein Trainer ja so einen verrückten Wert anzeigt, könnte es ja sein, dass er die Adresse nicht in Solitär sucht, sondern im eigenen Prozess oder einem ganz falschen...wäre das möglich?
Der Teil mit dem ReadProcessMemory ist aber richtig oder?
Mal so ne Frage: Könntest du mir vielleicht mal deinen Basepointer und dein Offset sagen, ich passe den Source daran an, gebe den Trainer dir und du prüfst ob es funktioniert? Wenn der Handle richtig ist, müsste es ja bei dir gehen, wenn es bei dir auch nicht geht, dann liegt es wohl am Handle.
Was mich am meisten verwirrt, ist dass sich der angebliche Basepointer nach spätestens 2 Reboots verändert und mit Olly kann ich Solitär nicht öffnen.
|
|
|
10/14/2009, 20:40
|
#146
|
elite*gold: 0
Join Date: Apr 2007
Posts: 18
Received Thanks: 0
|
Quote:
Originally Posted by xhelloselm
aber das steht doch auf der ersten seite^^
einfach in die funktion
m_lesen();
rein
@Adroxxx:
Vielleich hilft das noch:
Wie gesagt hWnd und ProcID sind richtig, also kanns ja nur am Handle zum Programm liege, und das würde auch Sinn ergeben!
Scheinbar erkennt mein Vista nichtmal, dass der Trainer überhaupt einer ist.
Bei CE muss ich mit aktivierter UAC ein Adminpasswort eingeben, bei meinem Trainer nicht, obwohl sie beinahe die selbe Funktionsweise haben.
Also liegt es entweder echt am Handle oder an Mfc.
Ich vermute eher am Handle, diese ist nämlich jedes Mal gleich und da mein Trainer ja so einen verrückten Wert anzeigt, könnte es ja sein, dass er die Adresse nicht in Solitär sucht, sondern im eigenen Prozess oder einem ganz falschen...wäre das möglich?
Der Teil mit dem ReadProcessMemory ist aber richtig oder?
Mal so ne Frage: Könntest du mir vielleicht mal deinen Basepointer und dein Offset sagen, ich passe den Source daran an, gebe den Trainer dir und du prüfst ob es funktioniert? Wenn der Handle richtig ist, müsste es ja bei dir gehen, wenn es bei dir auch nicht geht, dann liegt es wohl am Handle.
Was mich am meisten verwirrt, ist dass sich der angebliche Basepointer nach spätestens 2 Reboots verändert und mit Olly kann ich Solitär nicht öffnen.
|
Also ich hab denk ich ma das selbe problem wie du , denke aber nich das es am Programm liegt sondern am "basepointer" . Der Wert ist bei mir auch schon im CE so hoch , und im Programm gibt er dann den selben wert aus .
|
|
|
10/14/2009, 20:48
|
#147
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Quote:
Originally Posted by xhelloselm
@Adroxxx:
Vielleich hilft das noch:
Wie gesagt hWnd und ProcID sind richtig, also kanns ja nur am Handle zum Programm liege, und das würde auch Sinn ergeben!
|
Aha. Und was soll der Unterschied zwischen hWnd und dem Window Handle sein?
Und wenn die procID richtig ist, kann es doch logischerweise nicht der falsche handle sein. Weil Write-&ReadProcessMemory über die ProcID gehen und nicht über den Handle.
Quote:
Originally Posted by xhelloselm
Mal so ne Frage: Könntest du mir vielleicht mal deinen Basepointer und dein Offset sagen, ich passe den Source daran an, gebe den Trainer dir und du prüfst ob es funktioniert? Wenn der Handle richtig ist, müsste es ja bei dir gehen, wenn es bei dir auch nicht geht, dann liegt es wohl am Handle.
Was mich am meisten verwirrt, ist dass sich der angebliche Basepointer nach spätestens 2 Reboots verändert und mit Olly kann ich Solitär nicht öffnen.
|
o.O Basepointer muss überall gleich sein. Sprich du müsstest auch die gleiche Adresse und Offset haben wie ich im Tutorial.
Hast du mal anstatt FindWindowExW, FindWindowEx oder nur FindWindow versucht?
|
|
|
10/14/2009, 21:24
|
#148
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by Adroxxx
Aha. Und was soll der Unterschied zwischen hWnd und dem Window Handle sein?
|
nein es geht ja über FindWindow zum pWnd zum hWnd zur procID zum hProc und mit
dem verwendet man doch ReadProcessMemory^^
also:
FindWindow ergebnis: pwnd mit GetSafeHwnd ergebnis: hwnd mit GetWindowThreadProcessId und dem hwnd ergebnis: procID
mit procID und OpenProcess ergebnis: HANDLE hProc
so und dann mit ReadProccesMemory und hProc und den Adressen liets man ja den Speicher aus.
bis zur ProcID ist alles richtig (mit spy++ und dem Taskmgr kontrolliert) also kanns nur am Handle liegen (code nochmal^^ siehe unten)
Quote:
Und wenn die procID richtig ist, kann es doch logischerweise nicht der falsche handle sein. Weil Write-&ReadProcessMemory über die ProcID gehen und nicht über den Handle.
|
s.o.
Quote:
|
o.O Basepointer muss überall gleich sein. Sprich du müsstest auch die gleiche Adresse und Offset haben wie ich im Tutorial.
|
warum hast du dann nie was beim source gesagt? xD da steht doch meine adresse drin UND sogar zwei mal ne Offset rechnung weil ich über 2 pointer gehen muss! hast du vista oder xp?
wie kanns denn dann sein dass CE mir nen anderen BasePointer (wirklich grün) gibt, der damit auch wirklich klappt! nur nicht mit dem trainer
und er ändert sich komischerweise =/ aber er ist grün!
Quote:
|
Hast du mal anstatt FindWindowExW, FindWindowEx oder nur FindWindow versucht?
|
wär ein versuch wert, ich guck dann auch mal, ob es vielleicht mit deiner adresse geht, auch wenn mit CE etwas anderes sagt
code:
Code:
UpdateData(true);
pWnd = CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär"));
if (pWnd = CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär")))
{
hWnd = HWND(pWnd->GetSafeHwnd());
m_hwnd.Format(_T("%x"),hWnd);
unsigned long address1 = 0x00cc60f4;
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);
m_procID.Format(_T("%d"),procID);
hProc = OpenProcess(PROCESS_VM_READ,FALSE,procID);
m_hproc.Format(_T("%x"),hProc);
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);
}
else
{
AfxMessageBox(_T("Fenster nicht gefunden!"));
}
|
|
|
11/03/2009, 21:21
|
#149
|
elite*gold: 0
Join Date: Aug 2009
Posts: 2
Received Thanks: 0
|
Hallo zusammen,
ich bin noch recht neu hier und habe mal die ganzen Tut´s durchgeackert.
Riesen Lob an den Ersteller des Tutorials, ich als totaler Anfänger habe es auf anhieb einiger Maßen verstanden!!!
Ich bleibe jedoch immer an einem Punkt hängen. Vorab gleich die Anmerkung, das ich hier keinen Ausfragen möchte, bzw. soll mir einer die ganze Arbeit erledigen. Ich möchte das ganze schon von allein lernen.
Es ist jedoch nicht ganz so einfach, also frag ich hier und da mal, bevor ich völlig verzweifle.
Also...
Es geht um ein Flash-Onlinegame. Man kann sich verschiedene Waffen kaufen um andere anzuschießen. So, ingame hab ich dann mal CE 5.5 angeworfen und die Waffenadresse gescannt. Anschließend habe ich nach dem Pointer gescannt, diesen auch gefunden.
Ergebnis: 050f3180 - fld dword ptr [esi+eax*4-00000f48]
oder 050f2f32 - fld dword ptr [ecx+eax*4+04]
Bei einem Offset von +30 ist mir klar was ich eintragen muß, bei *4-00000f48 jedoch nicht.
Wer kann mir auf die Sprünge helfen?
|
|
|
11/06/2009, 19:19
|
#150
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
eigentlich musst du genau so vorgehen
das offset ist (wert aus eax)+4-00000f48
heißt du müsstest beim offset bei der pointereinstellung eingeben, welchen wert eax hat+4+f48
ich gehe mal davon aus, dass eax aber dynamisch ist.
das heißt du müsstest dir die befehle über dem geposteten mal ansehen und herausfinden, aus welcher adresse in eax geschoben wird.
|
|
|
All times are GMT +1. The time now is 04:48.
|
|