Autor Beitrag
DeltaEx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Di 22.10.02 02:22 
wir kann ich das in Delphi das ich die datei so ändern kann also eine Exe datei schreiben die die Hexwerte ändert:

Öffnet mit einem Hexadezimal-Editor die im Spieleordner befindliche "gamedll.rez" und ändert bei den Adressen die jeweiligen Werte.

Adresse 000E6FF2: den Wert 46 in 54 ändern
Adresse 000E6FF4: den Wert 41 in 52 ändern
Adresse 000E6FF6: den Wert 4C in 55 ändern
Adresse 000E6FF8: den Wert 53 in 45 ändern
Adresse 000E6FFA: den Wert 45 in 00 ändern

Im Editor sieht die Zeile etwa so aus:
000E6FF0 05 00 46 00 41 00 4C 00 53 00 45 00 00 00 00 00 ..F.A.L.S.E.....
Nach dem Editieren siehts dann so aus:
000E6FF0 05 00 54 00 52 00 55 00 45 00 00 00 00 00 00 00 ..T.R.U.E.......

Thx im voraus

_________________
Delphi forever
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 22.10.02 07:34 
Na, das sieht man doch! Da zwischen deinen Werten immer eine Null steht, nimmst du eine Variable vom Typ WORD (die ist 2 Bytes groß), dann setzt du sie z.B. auf 54.

Halt! Natürlich nicht auf 54, das ist ja der Hex-Wert. Du setzt die Variable auf die ganz normale dezimale Entsprechung. Bin jetzt zu faul zum Umrechnen oder Tabelle rauskramen.

Dann springst du an die Adresse, die du brauchst -etwa 000E6FF2- und schreibst den Wert in die Datei. Gleich danach -ohne Positionsänderung!- schreibst du den nächsten Wert usw.

Weil es wie gesagt ein WORD-Typ ist, kannst du die Werte hintereinander schreiben. Der Inhalt der WORD-Variablen sieht nämlich so aus (am Beispiel des Wertes 32, da kenne ich den passenden Hex-Wert :wink:)
ausblenden Quelltext
1:
00 20					

Beim Speichern wird aber -nur unter Windows?- das niederwertige Byte zuerst geschrieben, wodurch das gewünschte Format von
ausblenden Quelltext
1:
20 00					

entsteht. Deswegen brauchst du die Position auch nicht ändern, denn durch das Schreiben der 2 Bytes bist du automatisch am Offset des nächsten Wertes, den du ändern willst.

Die Alternative wäre, den Wert als Unicode-String bzw. -Array zu behandeln. Wer sich bei einer 2000/XP-Text- oder Systemdatei im Textformat schon mal gewundert hat, warum zwischen den Buchstaben immer eine Stelle frei ist, hat so die Erklärung. :) (Ich hoffe, ich habe jetzt keinen zu großen Müll geredet.)
Und da es ja hier um "FALSE" und "TRUE" als Worte zu gehen scheint, wäre dies auch eine Möglichkeit.


Endlich mal einer, der auch in Spieldateien rumfummelt. :)
Habe ich schon ewig nicht mehr gemacht, aber ich erinnere mich noch an meine nächtelangen Sitzungen, weil ich die Savegame-Formate von DOOM, und Co. knacken wollte, und mir dann Savegame-Editoren geschrieben habe. 8)

Hex-Editor, wie umständlich ... wozu ist man denn Programmierer? :wink:

"gamedll.rez" - hört sich an wie ein Game mit Monolith-Engine?
NOLF? NOLF2?
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Di 22.10.02 07:52 
MathiasSimmack hat folgendes geschrieben:
Endlich mal einer, der auch in Spieldateien rumfummelt. :)

Das seit ihr nicht alleine 8)

MathiasSimmack hat folgendes geschrieben:

Habe ich schon ewig nicht mehr gemacht, aber ich erinnere mich noch an meine nächtelangen Sitzungen, weil ich die Savegame-Formate von DOOM, und Co. knacken wollte, und mir dann Savegame-Editoren geschrieben habe. 8)


Hach das waren noch Zeiten (schwärm) :mrgreen:

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 22.10.02 09:07 
Ach, bloß heute lohnt das nicht mehr. Die Cheats werden ja meist von den Spiele-Mags noch vor dem Release des Games veröffentlicht. Früher war das anders -

Da musste sich ein Mann (oder eine Frau) noch mit dem Hex-Editor hinsetzen, die Bytes raussuchen, manuell ändern, gucken ... jubeln ... und dann halt ein Programm schreiben, dass es automatisch macht, so dass man nur noch komfortabel -wie im Laden- auswählen brauchte:

"Ja, ich hätte gern die Kettensäge ... und die doppelläufige Schrotflinte ..."
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 22.10.02 09:50 
HAB ICH EUCH! IHR SINGLE-PLAYER-CHEATER!

Ne, mal im Ernst, cheaten nimmt doch jedem Spiel den Spass. Ein Kollege hat das auch immer gemacht, der hat Doom gekauft, an zwei Tagen durchgezockt und es dann in die Ecke geworfen.

So kann doch gar kein Spass aufkommen. Wer noch nie System Shock 2 ohne Cheats durchgezockt hat, hat eindeutig was verpasst.

Gut, es gibt schon manche Stellen in Spielen, wo man wirklich seine Zähne in die Tastatur schlagen könnte...

Von Multiplayer-Cheats wollen wir gar nicht erst reden...

Cu, :)
Udontknow
DeltaEx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Di 22.10.02 11:11 
Das ist kein Cheat sondern das anmachen von Blut bei NOLF2:-)

Ich habe es leider nicht kapiert:-( da ich noch ein kleiner delphiNoob bin
kannst du ein Code reinschreiben?? ich weiss nicht wie ich anfangen soll

_________________
Delphi forever
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 22.10.02 11:18 
Wenn auf der CD mehrere Sprachversionen drauf sind, dann probier den alten NOLF1-Trick -
Für die Installation die Ländereinstellung auf "English (US)" (z.B.) einstellen und das Game installieren. Dann konnte man wieder auf Deutsch umstellen und trotzdem ungeschnitten spielen.

Ansonsten (ungetestet, sollte aber gehen):
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
const
  Magic : array[1..5]of word =
    ($54,$52,$55,$45,0);
var
  f : file;
  acWrite : integer;
begin
  {$I-}
  AssignFile(f,'gamedll.rez');
  Reset(f,1);
  if(IoResult = 0) then
    begin
      Seek(f,$E6FF2);
      BlockWrite(f,Magic,sizeof(Magic),acWrite);
      CloseFile(f);
    end;
  {$I+}
end;
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 22.10.02 12:24 
Früher war ich für solche Anliegen immer bei www.bloodpatches.de, aber da ist nun auch die BPjS eingeschritten. :cry:

Aber ein einfaches googeln wie z.B. "Mafia Bloodpatch" hilft mir meistens weiter.

Cu,
Udontknow
DeltaEx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Di 22.10.02 13:10 
JO super das Funktioniert wunderbar!! nur habe ich ne Frage was die Befehle heissen will auch was dazulernen

Und warum die 0 an ende??
Magic : array[1..5]of word = ($54,$52,$55,$45,0);

_________________
Delphi forever
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 22.10.02 16:54 
Die Null am Ende stammt aus deiner eigenen Beschreibung:
DeltaEx hat folgendes geschrieben:
Adresse 000E6FF2: den Wert 46 in 54 ändern
Adresse 000E6FF4: den Wert 41 in 52 ändern
Adresse 000E6FF6: den Wert 4C in 55 ändern
Adresse 000E6FF8: den Wert 53 in 45 ändern
Adresse 000E6FFA: den Wert 45 in 00 ändern

:roll:
Außerdem ergibt es sich zwangsläufig, wenn man sich das entstehende Wort im ASCII-Teil des Hex-Editors ansieht:
ausblenden Quelltext
1:
2:
FALSE = 5 Buchstaben
TRUE  = 4 Buchstaben

Du musst also die Null tatsächlich ergänzen, um das Wort FALSE komplett zu überschreiben, sonst würde da TRUEE stehen, und der "Patch" dürfte nicht mehr hinhauen.