[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]
unit cheat;
interface
uses crt;
type PValue=^TValue;
TValue=object
{ Encrypted value }
value:integer;
{ Unsigned key }
key:integer;
{ Signed key }
key2:integer;
{ Init }
constructor init(v:integer);
{ Done }
destructor done;
{ Get value }
function get:integer;
{ Set value }
procedure put(x:integer);
{ Re-encrypt }
procedure encrypt;
end;
implementation
constructor TValue.init(v:integer);
begin
{ Set value }
value:=v;
{ No key }
key:=0;
{ No key }
key2:=0;
{ Encrypt }
encrypt;
end;
destructor TValue.done;
begin
{ Nothing to dispose of }
end;
function TValue.get:integer;
var temp:integer;
begin
{ Decrypt value and store temporarily }
temp:=value xor (key xor key2);
{ Re-encrypt }
encrypt;
{ Return value }
get:=temp;
end;
procedure TValue.put(x:integer);
begin
{ Set new value }
value:=x xor (key xor key2);
{ Re-encrypt }
encrypt;
end;
procedure TValue.encrypt;
var temp:integer;
begin
{ Decode }
temp:=value xor (key xor key2);
{ Random unsigned key }
key:=random(32000);
{ Random signed key }
key2:=random(64000)-32000;
{ Encrypt }
value:=temp xor (key xor key2);
end;
end.
{ ------------------ CUT -------------------}
CHEAT
Unit Documentation
by Emil Mikulic
CHEAT is a something that I've been trying to get around to for
quite a while. It's a simple, reasonably fool-proof anti-cheat measure.
It is used to encrypt important values in games or programs from
pesky memory-meddling programs and Cheat Makers (i.e. GW).
Here's the definition of the PValue object:
type PValue=^TValue;
TValue=object
{ Encrypted value }
value:integer;
{ Unsigned key }
key:integer;
{ Signed key }
key2:integer;
{ Init }
constructor init(v:integer);
{ Done }
destructor done;
{ Get value }
function get:integer;
{ Set value }
procedure put(x:integer);
{ Re-encrypt }
procedure encrypt;
end;
You use TValue.Init to initialise a value.
Here's an example:
var money,lives:PValue;
begin
money:=new(PValue,Init(100)); { Give player a hundred bucks }
...
You don't need to use TValue.Done when disposing of your PValue
because it doesn't have anything to dismantle.
To get the decrypted the value, use TValue.Get - ex:
...
writeln('You have exactly ',money^.Get,' bucks on you.');
...
To set the value use TValue.put - ex:
...
writeln('Sold for $20');
money^.Put(Money^.Get-20);
...
If you want more control, you can use TValue.Encrypt to
re-encrypt the data, the value remains but the encrypted value
and the keys change.
That's it.
Emil Mikulic, 1997.
[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]