Autor |
Beitrag |
Alex_ITA01
      
Beiträge: 56
Win XP
D7 Prof
|
Verfasst: Fr 25.02.05 15:23
wie soll ich das Spiel debuggen? In einem Thread der die ganze Zeit eine Speicheradresse liest? Delphi-Quelltext 1: 2: 3: 4: 5:
| asm mov eax, [$00401111] <- fixe adresse, an der steht immer $6152C50 die kann aber auf jedem PC anders sein mov eax, [eax] add [eax], $10 end; |
Soll ich anstatt der $00401111 jetzt $6152C50 nehmen?
Sorry, aber ich stehe grade ziemlich auf dem Schlauch...
MFG Alex
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Fr 25.02.05 15:33
ich ab das bestimmt schon 20 mal gepostet aber versuch erstmal das tutorial nachzumachen:
www.arschvoll.net/tutcs2d.pdf (hab nu mal als PDF gemacht)
dann verstehste auch wie das alles funzt
solltest das tut net schaffen mussuauch net mit deinem trainer weitermachen
|
|
Alex_ITA01
      
Beiträge: 56
Win XP
D7 Prof
|
Verfasst: Fr 25.02.05 15:37
sorry,dass ich deine 20Post's noch nicht gelesen habe...
Werde mir das Tutorial mal anschauen und ich denke, wenn es gut erklärt ist, dann werde ich es auch hinbekommen.
Danke!
Alex
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: So 27.02.05 02:14
Warum Funktioniert das nicht ?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| .. var s: String; .. begin .. s:= '$123456'; WriteProcessMemory(HandleWindow,Pointer(s),buf,1,write); .. |
So ändert er die Werte im Spiel nicht warum nicht  ?
So klappt es:
Delphi-Quelltext 1: 2: 3: 4: 5:
| .. begin .. WriteProcessMemory(HandleWindow,Ptr($123456),buf,1,write); .. |
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: So 27.02.05 12:13
weil POinter('$12345') <> Pointer($12345)? Du weißt schon was ein String ist und wie der im Speicher aussieht?
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: So 27.02.05 12:43
ja aber wie soll ich das jetzt machen ?
also ich habe einen String den ich dem Befehl als pointer übergeben möchte (oberes Code Beispeiel)
ist das unmöglich ?
|
|
Net-Spider
      
Beiträge: 21
|
Verfasst: So 27.02.05 12:48
so sollte es eigentlich gehen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| var i:integer; begin i:=$123456; WriteProcessMemory(HandleWindow,Pointer(i),buf,1,write); end; |
da musst du nur eben einen integer übergeben...
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: So 27.02.05 13:08
-=LordEvil=- hat folgendes geschrieben: |
also ich habe einen String den ich dem Befehl als pointer übergeben möchte (oberes Code Beispeiel)
|
ja nur leider kann ein offset auch Buchstaben enthalten, deswegen habe ich mich für string entschieden 
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: So 27.02.05 13:19
warum wolle nalle eiegtlich immer einen trainer schreiben die gerade mal bisl mit delphi umgehen können und gar ent wissen was assembler ist?
var s: string;
s := '$12345678';
allein das zeigt doch schon das du überhaupt nicht weißt was du da machst
weißt du was eine adresse ist? und wie ein pchar aufgebaut ist? wie da alles verwaltet wird etc.
wenn nicht dann lern bitte erstmal delphi
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: So 27.02.05 13:24
das das so nicht klappt weis ich selbst!, es ist nur als bs gedacht um nach einer lösung zu suchen, aber da du die antwort auch nicht kennst -.-, frage ich mich was dein post soll?
Enigma hat ein Tutorial geschrieben und ich versuch draus schlau zu werden, wenns dir nicht passt schreib ne PM spämmer!
Edit: ich habs geschafft, danke an alle die mir GEHOLFEN haben!
Zuletzt bearbeitet von SAiBOT am So 27.02.05 13:28, insgesamt 1-mal bearbeitet
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 27.02.05 13:27
Die "Buchstaben" sind in wirklichkeit auch nur Zahlen, nur dass es in diesem
Fall im HEXA-Dezimalsystem angegeben ist. Man kann HEX Zahlen auch in andere Zahlensysteme Umwandeln. Damit das Programm weiß, dass der nächste integer eine Zahl ist, werden HEX-Zahlen mit "$" gekennzeichnet
aber es kann glaube ich mit strtoint umgewandelt werden
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| .. var s: String; .. begin .. s:= '$123456'; WriteProcessMemory(HandleWindow,Pointer(strtoint(s)),buf,1,write); .. |
aber dann kann man auch gleich integer nehmen
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: So 27.02.05 13:32
1. spammer und nicht spämmer
2. ja nur leider kann ein offset auch Buchstaben enthalten, deswegen habe ich mich für string entschieden
hab dir mal den rat gegeben dich mit pchar integer auseinaderzusetzen, diese buchstaben nennt man hexwert
den begriff solltest eigentlich shconmal gehört haben wenn du mit sowas anfängst
3. so wie die meisten sich einen trainer hier zusammen schuster (einfach mal wild noppen, aber net mal wissen
was ne assembler instruction ist, irgendwelche daten ändern etc.) da frage ich mich wirklich
ob das der richtige anfang ist programmieren zu lernen
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 27.02.05 13:56
ok wenn man den code serviert bekommt ist es ja auch net alzu schwer
Aber man sollte schon verstehen was der code macht, wenn man einfach wild im
speicher rumnoppt, können schonmal unannehmlichkeiten passieren
(meistens äußert sich das als sogenannter "Systemcrash" oder auch "Computerabsturz")

|
|
Kedariodakon
      
Beiträge: 30
|
Verfasst: Di 08.03.05 10:26
Da Holle ich mal den alten Tread hervor um ein wenig diesbezuglich ein paar Fragen loszuwerden
1. Wenn ich eine Speicherstelle gefunden hab, an welcher warscheinlich ein Wert gespeichert wird ATM, kann ich auf diese Speicherstelle mir selber einen MBP erstellen, also sprich mit einem Selbstgeschriebenene Programm sozusagen?
Sprich ich bekomm ne Nachricht, wenn jemand darauf zugreift, vielleicht auch mit ner Stelle von der zugegriffen wird, damit ich dann den ASM-Code draus interpretieren kann... ?!?
Dann hab ich die Sache mit SoftIce gelesen, und wollte es mal versuchen, leider aber bekomm ichs auf XPsp2 nicht zum laufen, er kann immer irgendwelche Geräte nicht finden  Welche das auch immer seien mögen...
Na ok, hab ich mal OllyDbg getestet, wo alle so davon schwärmen... Naja misserfolg, 1.Das Spiel ist gepackt, also mekert der ma schon rum ok klinke ich mich hald in einen vorhandenen Prozess ein, naja setz einen MBP, spiele ein Stück wups MBP scheind anzulaufen, naja ok doch nicht hat das Spiel und OllyDbg geschrottet...
Tja irgendwie komm ich in Sachen RuntimeDebugger nicht weiter, da ich irgendwie nichts mehr auf meinem System mehr zu laufen bekomm...
Falls da noch wer nen Tip hätte, vielleicht auch nen software tip, wär ich diebezüglich Ohr
Von mir aus auch per PM
Bye
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 08.03.05 11:04
das problem wird wohl an den anti-debugger code liegen die die meisten spiele haben. den mussu natürlich vorher wegpatchen und dafür brauchste halt viel asm ahnunh, man kann jedes programm mit ollydebug debuggen nur halt die debugger detetcion muss man entfernen und frag jetzt aber nicht wie das ist bei jedem spiel anders
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
Kedariodakon
      
Beiträge: 30
|
Verfasst: Di 08.03.05 11:09
Hmm den muß man ja erst mal finden um den wegzu machen
Am liebsten würd ich wieder mit Sice arbeiten, aber das Dinge läuft mal überhaupt nicht, vermute schon, das es ev. am Fx-51 Prozessor liegt
gibts sonst noch brauchbare Dèbugger, möglichst als free
Bye
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 08.03.05 11:13
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: So 27.03.05 18:23
ok ich habe sehr viel aus diesem Treath gelernt aber eine Frage stellt sich mir immer noch!
Nehmen wir als Bsp. Diablo II 1.10 SingelPlayer.
1. ich ermittel den Gold Wert mit TSearch bekomme irgend eine Adresse.
2. Jetzt finde ich den Pointer mit dem Debugger/AutoHack heraus (9F6D17).
So wenn ich jetzt ein Trainer schreiben will, der den wert zb auf 1000 setzen soll, bräuchte ich ja die gefundene Adresse von Punkt 1, das wäre auch kein Problem! Da sich Wert aber immer ändert (DMA) habe ich es mit dem Pointer den ich mit dem Debugger/AutoHack herausgefunden habe versucht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function WriteProcess(Title: String; Address, PokeValue:Integer): Boolean; begin Result := True; WindowName := FindWindow(nil,PCHAR(Title)); If WindowName = 0 then Result := False; ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); randomize; buf^ := Chr(PokeValue); WriteProcessMemory(HandleWindow,ptr(Address),buf,1,write); FreeMem(buf); closehandle(HandleWindow); end;
...
WriteProcess('Diablo II', $9F6D17, $01); WriteProcess('Diablo II', $9F6D18, $00); WriteProcess('Diablo II', $9F6D19, $00);
... |
dies sollte den GoldWert doch jetzt auf 1 setzen oder nicht ? Leider stürtzt das Spiel immer ab!
Wobei es mit volgendem Code den GoldWert erfolgreich einfriert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| ...
WriteProcess('Diablo II', $9F6D17, $90); WriteProcess('Diablo II', $9F6D18, $90); WriteProcess('Diablo II', $9F6D19, $90);
... |
So nun möcht ich gerne wissen warum ich den Wert nur einfrieren kann und nicht neu setzten!
drückt mal ein Auge zu falls ich irgendwas durcheinander gebracht habe  thx!
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: So 27.03.05 19:02
Hallo,
Der Wert den du nopst ist nicht der Goldwert.
Im TSearch Debuggerfenster müsste irgendwas mit Dec (decrease) stehen. Das ist der Befehl der Ausgeführt wird, wenn der Goldwert verändert wird, oder besser gesagt wenn die Adresse umgeschrieben wird.
wie du die Adresse des eigentlichen Goldwerts herausfinden kannst wurde hier sehr sehr lang diskutiert 
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: So 27.03.05 20:24
|
|