Zitat von
Hedge:
Wäre es nicht ziemlich trivial rauszufinden wie die Variable verschlüsselt ist, wenn ich sie nur einmal mit einem XOR verknüpfe?
Deswegen würde ich noch zusätzlich eine Prüfsumme abspeichern. So kannst du beim Zugreifen auf die Variable gleich herausfinden ob sie verändert wurde. Das sollte ausreichen um die meisten Angreifer davon abzuhalten, dein Proggy zu manipulieren.
Ich würde es so machen:
Delphi-Quellcode:
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.
und so verwenden:
Delphi-Quellcode:
var wert : TSaveInt;
begin
wert := TSaveInt.Create(100);
ShowMessage(IntToStr(wert.value));
wert.value := -100;
ShowMessage(IntToStr(wert.value));
wert.Free;
Viele grüsse,
Macci