Autor Beitrag
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Sa 01.01.05 18:54 
retnyg hat folgendes geschrieben:
:wink: 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 :gruebel:


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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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 :P
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mo 03.01.05 18:25 
wenns fertig ist hätte ichs auch mal gerne um zu schaun wies funzt :)
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 03.01.05 20:45 
SCPT ? was ist denn das ^^
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mo 03.01.05 20:51 
SCPT = Splinter Cell Pandora Tomorrow :D

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 04.01.05 20:27 
Damit:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 04.01.05 20:29 
kann denn hier nochmal die fehlerfreie version gepostet werden plz :? ?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 04.01.05 22:56 
WeBsPaCe hat folgendes geschrieben:
Damit:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mi 05.01.05 12:50 
Gut okay, vielen Dank, ich probiers mal... :D
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mi 05.01.05 13:02 
Gott bin ich blöd!!! Da hätt' ich auch selber draufkommen können!!! :autsch:

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mi 05.01.05 13:05 
Wat jetzt??? :shock: :? :roll:

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: 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


:oops: natürlich... da hab ich wohl zu schnell geantwortet :oops: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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.