![]() |
Re: Anwendungsspeicher schützen
Hallo,
alles was du tun musst, ist, deine Variablen, die du schützen möchtest, verschlüsselt (am besten mit einer Art Checksumme) zu speichern, und sie immer nur bei Bedarf kurzzeitig entschlüsseln. Ein Skriptkiddie knackt sowas bestimmt nicht (ich denke, die meisten hier im Forum würde es ebenfalls nicht schaffen, wenn du es richtig machst). |
Re: Anwendungsspeicher schützen
Die Variablen können nur inkrementiert werden. Das müsste eine Checksumme unnötig machen, weil ich ja nur schauen brauch ob die Variable sich mehr als +1 verändert hat seit dem letzten Aufruf meiner Funktion, aber danke für den Tipp :)
|
Re: Anwendungsspeicher schützen
das IsDebuggerPresent von Luckie bringt im Grudne gar nichts. Jedes gemoddete OllyDbg bzw jedes einfache plugin (und vill sogar OllyDbg in der neusten Version) macht einfach ein "mov [$7ffde000], 0" am Anfang und das Debugflag ist auf 0, egal wie es ausgelesen wird.
Ich denke es geht um ein Spiel bei dem der Punktestand nicht verändert werden sollte. Dazu kannst du di Variable am besten einmal "verschlüsseln" in dem du sie mit irgend einem wert mit XOR verknüpst. Einfach zum schlüsseln / entschlüsseln vorher XOR aufrufen :) Das doopellte Speichern (um dnan zu vergleichen ob die erhöht wurde) bringt nichts, da TSearch immer ALLE Variablen anzeigt. Dann patchedm an eben beide weg. |
Re: Anwendungsspeicher schützen
Zitat:
Wäre es nicht ziemlich trivial rauszufinden wie die Variable verschlüsselt ist, wenn ich sie nur einmal mit einem XOR verknüpfe? |
Re: Anwendungsspeicher schützen
Naja, glaub bei AOE2 oder so wurde das auch gemacht. Meisten wird TSearch genommen um die Adresse rauszufinden. Man erspielt dann z.B. 100 Punkte und sucht dann mit TSearch nach einem Integer-Wert von 100. Dann spielt man weiter bis man z.b. 150 hat. Aus allen Anfangsergebnissen wird dann rausgefiltert wo der Wert jetzt 150 ist. Das macht man bis man nur noch wenige Adressen hat. Dort ist dann die Variable. Wenn du jetzt zweimal die Variable speicherst bringt dir das nicht. Dann bekommt man zwei Ergebnisse.
TSearch erlaubt dir auch nach "Incrementierten Variablen" zu suchen. Man liest einmal alle Speicheradresen aus, und dann wenn sich er Punktestand ändert sucht man nach allen Variablen bei dem sich der Wert erhöht hat. Durch ein einfaches XOR vor und nach dem verarbeiten der Variable funktioniert beides nicht mehr. (Eine gexorte Variable kann kleiner werden wenn sich der Punktestand erhöht) Dafür gibt es natürlich noch eine Suche bei der man angibt: Hat sich verändert bzw. hat sich nicht verändert. Damit kann man die dann natürlich wieder finden. Im grunde ist es also nur ein kleiner Schutz. |
Re: Anwendungsspeicher schützen
Zitat:
Ich würde es so machen:
Delphi-Quellcode:
und so verwenden:
unit SaveIntUnit;
interface uses Windows; type TSaveInt = class private check : integer; FValue: integer; procedure SetValue(const Value: integer); function GetValue:integer; public constructor Create(Value:integer); property Value:integer read GetValue write SetValue; end; var xor_code:integer; implementation { TSaveInt } constructor TSaveInt.Create(Value: integer); begin if xor_code=0 then begin Randomize; xor_code := Random($40000000) + $40000000; end; Self.Value := Value; end; function TSaveInt.GetValue: integer; begin result := FValue XOR xor_code; if (FValue mod $ABCD) * 7 + $DEF0 <> check then ExitProcess(0); end; procedure TSaveInt.SetValue(const Value: integer); begin FValue := Value XOR xor_code; check := (FValue mod $ABCD) * 7 + $DEF0; end; end.
Delphi-Quellcode:
Viele grüsse,
var wert : TSaveInt;
begin wert := TSaveInt.Create(100); ShowMessage(IntToStr(wert.value)); wert.value := -100; ShowMessage(IntToStr(wert.value)); wert.Free; Macci |
Re: Anwendungsspeicher schützen
Ah..danke.
Das Prinzip verstehe ich und es macht auch Sinn, aber 3 Fragen hätte ich noch: 1. Sollte xor_code nicht ein Element der Klasse TSaveInt sein, weil es ja an einigen Stellen benutzt wird und für jede Instanz einen anderen Wert übergeben kriegt. 2. Was bedeutet ein '$' am Anfang von Integern? 3. Auf der Zeile werd ich nicht ganz schlau:
Delphi-Quellcode:
soll ich mir für $ABCD und $DEF0 einfach nen eigenen Wert ausdenken?
if (FValue mod $ABCD) * 7 + $DEF0
|
Re: Anwendungsspeicher schützen
Hallo,
zu deinen Fragen: Zitat:
Edit: xor_code hat übrigens nur einen einzeigen Wert für das ganze Programm (nicht für jede Instanz von TSaveInt einen eigenen). Zitat:
Zitat:
Viele Grüsse, Macci |
Re: Anwendungsspeicher schützen
OK, das habe ich jetzt soweit verstanden, aber da kommen 2 neue Fragen auf
(Sorry dafür, aber ich will auch verstehen was ich da tue). Warum benutzt du Hex-Werte und nicht normale Integer? Hat xor_code := Random($40000000) + $40000000; eine spezielle Bedeutung oder ist es einfach nur so gedacht, dass der Integer keinen Überlauf kriegt? |
Re: Anwendungsspeicher schützen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz