Autor |
Beitrag |
en!gma
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 01.01.05 14:39
das is halt eine sache des ausprobierens...
für hl² zb nimmste ne waffe...und suchst erstmal alle werte ab...also unknown value...
dann kommt halt das ausprobieren...
nimmst andre waffe und gehst auf weiter suchen und has changed...weil du ja deine waffe gewechselt hast...
dann wechselste wieda zur alten waffe und suchst wieder has changed...
dann bissl rumballern leben verlieren hin und herhüpfen...
dann suchste zB mal has not changed...dann musste halt aber aufpassen das du die selbe waffe hast wie zuvor...
|
|
Karlson
Beiträge: 2088
|
Verfasst: Sa 01.01.05 18:54
retnyg hat folgendes geschrieben: | war schon so gemeint, schreib einfach mal den Wert $1 (statt $90) an die betreffende speicheradresse...
wie hast du die eigentlich ausfindig gemacht ? gibt ja sicher tausende Posititonen im Speicher die gerade auf 0 oder 1 stehen |
Nein, das kann doch nicht klappen. Ich würde dann ja schließlich den Befehl mit $1 überschreiben! Die Speicherstelle kenne ich ja im Grunde garnicht (bzw. nur wenn ich mit TSearch danach suche). ICh kenne nur diesen Pointer, zum Befehl, der ausgeführt wird wenn die Adresse geändert wird. Wenn ich diese dann mit NOP überschreibe, kann ich die Waffe nicht mehr bekommen Ich will aber irgendwie an die Waffe kommen!
|
|
en!gma
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 01.01.05 20:02
hmm...
dann solltest du villeicht erstmal die addresse der waffe herausfinden...
erst keine waffe in der hand...nach addressen suchen (unknown value) dann aufsammeln und schaun was sich verändert...
wieder wegschmeissen und wieda suchen und wieda und wieda....bis nur noch wenige übrig sind...
|
|
Karlson
Beiträge: 2088
|
Verfasst: Sa 01.01.05 20:11
Ja, das habe ich doch schon längst getan. Dann habe ich mit TSearch auf Autohack geklickt...das gleiche wie du oben. Die Adresse nutzt mir aber halt leider nichts, denn diese ändert sich ja ständig!
|
|
retnyg
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: So 02.01.05 16:28
Karlson hat folgendes geschrieben: |
Nein, das kann doch nicht klappen. Ich würde dann ja schließlich den Befehl mit $1 überschreiben! Die Speicherstelle kenne ich ja im Grunde garnicht (bzw. nur wenn ich mit TSearch danach suche). ICh kenne nur diesen Pointer, zum Befehl, der ausgeführt wird wenn die Adresse geändert wird. Wenn ich diese dann mit NOP überschreibe, kann ich die Waffe nicht mehr bekommen Ich will aber irgendwie an die Waffe kommen! |
Also, wenn an der betreffenden Stelle im Speicher der Wert $0 steht, dann ist das ein Speicherbereich der Daten enthält (also den Wert SpielerHatWaffeX : 0 oder 1 ... wenn der Wert ein Boolean ist wirst du dir aber wahrscheinlich schwertun...is ja nur ein bit ). Die Daten kannst du problemlos überschreiben.
Ansonsten musst du dir was andres einfallen lassen... z.b. findest du den JMP Befehl zu der Prozedur die eine Megawaffe zu deinem arsenal hinzufügt. dann suchst du eine Prozedur die häufig vorkommt (wie Z.B. PickupEnforcer...das pistölchen bei UT), du aber nicht unbedingt brauchst und lässt von dorthin immer an deine speicherstelle springen...sicher keine besonders elegante lösung, aber mir fällt momentan nix bessres ein
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mo 03.01.05 17:30
Hi!!
Sorry, ich hab' schon wieder ne Frage!! Das mit MineSweeper war ja irgendwie noch einfach... ich schreib euch mal auf, was ich gemacht hab:
1. TSearch nach der aktuellen Zeit gesucht.
2. Adresse 100579C rausbekommen.
3. Auch nach Neustart von Windows und mehreren anderen Programmen im Hintergrund: Adresse bleibt gleich!
4. Das Programm von en!gma umgeschrieben (Window-Title geändert, den Gas-Cheat-Abschnitt gelöscht, die letzten 5 WriteProcessMemory-Zeilen gelöscht, in der ersten WriteProcessMemory-Zeile die Adresse $401F76 durch $100579C ersetzt.
5. Es funktioniert.
So, jetzt nehm ich mir SCPT ran!!
1. TSearch nach den aktuell vorhandenen Blendgranaten gesucht.
2. Adresse 2D36A9C rausbekommen.
3. Bei Neustart des Levels andere Adresse: 2DB771C
4. Ich bin verzweifelt...
5. Im AutoHack einen BreakPoint gesetzt mit der aktuellen Adresse mit dem Wert von den Blendgranaten, bei BspSize einfach mal die 1 gelassen und bei Type Write reingemacht.
6. In der Liste bei Debug event steht jetzt: "10A54AAB: cmp dword ptr [ebp+0x324],0xA" und "10A54AD5: mov eax,[ebp+0x324]"
7. In SCPT eine Blendgranate geworfen.
8. Es taucht der Eintrag "10AC0EBD: mov [edi+0x324],ecx" neu dazu auf.
9. Vermutung, dass das die Aktion ist, die da was bei der Ammo abzieht.
10. Den letzten dazugekommenen Punkt "gepatch" und siehe da: Bei Blendganateschmeißen geht die Ammo nichmehr runter.
Problem: Wenn ich jetzt die Adresse 10AC0EBD im Delphiprogramm reinschreib, stürzt das Spiel ab...
Ich glaube, dass das der Punkt ist, den ich noch nicht verstanden habe, also BITTE sagt mir was ich falsch gemacht habe. Am besten wäre es, wenn ihr einfach den Code posten könntet, der das herabzählen freezt.
THX
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 03.01.05 18:25
wenns fertig ist hätte ichs auch mal gerne um zu schaun wies funzt
|
|
retnyg
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 03.01.05 20:45
SCPT ? was ist denn das ^^
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mo 03.01.05 20:51
SCPT = Splinter Cell Pandora Tomorrow
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
retnyg
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Di 04.01.05 00:36
WeBsPaCe hat folgendes geschrieben: |
8. Es taucht der Eintrag "10AC0EBD: mov [edi+0x324],ecx" neu dazu auf.
Problem: Wenn ich jetzt die Adresse 10AC0EBD im Delphiprogramm reinschreib, stürzt das Spiel ab...
|
poste mal die Prozedur mit der du das machst
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 04.01.05 20:27
Damit:
Delphi-Quelltext 1:
| WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,1,write); |
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 04.01.05 20:29
kann denn hier nochmal die fehlerfreie version gepostet werden plz ?
|
|
retnyg
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Di 04.01.05 22:56
WeBsPaCe hat folgendes geschrieben: | Damit:
Delphi-Quelltext 1:
| WriteProcessMemory(HandleWindow,ptr($10AC0EBD),buf,1,write); | |
du überschreibst nur ein byte - die länge des befehls mov [edi+0x324],ecx ist aber 4 bytes
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 12:50
Gut okay, vielen Dank, ich probiers mal...
Woher weißt du eigentlich, dass es 4 Bytes sind???
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
MrSaint
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mi 05.01.05 13:00
$10AC0EBD = 4 byte..
1 byte = 2 Hex-Zeichen
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 13:02
Gott bin ich blöd!!! Da hätt' ich auch selber draufkommen können!!!
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
retnyg
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 13:04
MrSaint hat folgendes geschrieben: | $10AC0EBD = 4 byte..
1 byte = 2 Hex-Zeichen |
moment mal:
$10AC0EBD ist ein Zeiger zu einem speicherbereich, und in dem fall kein Maschinencode
du liegst also falsch
|
|
WeBsPaCe
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 05.01.05 13:05
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
MrSaint
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mi 05.01.05 13:05
retnyg hat folgendes geschrieben: | moment mal:
$10AC0EBD ist ein Zeiger zu einem speicherbereich, und in dem fall kein Maschinencode
du liegst also falsch |
natürlich... da hab ich wohl zu schnell geantwortet geb mich geschlagen
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
retnyg
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 05.01.05 13:10
@webspace: ich habe nach mov commandos gegoogelt, und mir angesehen wieviel bytes das commando üblicherweise benötigt wenn 2 bytes an daten übergeben werden (0324h)
ich wünschte ich hätte eine tabelle wo zu jedem assemblercommando der entsprechende byte-wert dabeistünde, oder umgekehrt.
oder einen "mini-compiler", der mir ein commando wie "add bx,cx" in den entsprechenden maschinencode umwandelt.
|
|
|