AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anwendungsspeicher schützen

Ein Thema von webtom · begonnen am 15. Sep 2008 · letzter Beitrag vom 30. Sep 2008
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#11

Re: Anwendungsspeicher schützen

  Alt 23. Sep 2008, 21:16
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).
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Anwendungsspeicher schützen

  Alt 23. Sep 2008, 21:19
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
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#13

Re: Anwendungsspeicher schützen

  Alt 24. Sep 2008, 07:48
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.
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#14

Re: Anwendungsspeicher schützen

  Alt 24. Sep 2008, 07:55
Zitat von brechi:
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.
Ja, hab auch schon erfahren, dass das mit dem DebugFlag nix mehr bringt.

Wäre es nicht ziemlich trivial rauszufinden wie die Variable verschlüsselt ist, wenn ich sie nur einmal mit einem XOR verknüpfe?
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#15

Re: Anwendungsspeicher schützen

  Alt 24. Sep 2008, 16:40
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.
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#16

Re: Anwendungsspeicher schützen

  Alt 24. Sep 2008, 19:44
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
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#17

Re: Anwendungsspeicher schützen

  Alt 24. Sep 2008, 21:26
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:

if (FValue mod $ABCD) * 7 + $DEF0 soll ich mir für $ABCD und $DEF0 einfach nen eigenen Wert ausdenken?
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#18

Re: Anwendungsspeicher schützen

  Alt 25. Sep 2008, 00:56
Hallo,

zu deinen Fragen:

Zitat von Hedge:
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.
Nein, das geht nicht (da würde sich die Katze in den Schwanz beißen). Irgendwo MUSS ja etwas im Klartext gespeichert sein, und wenn du es dennoch anders versuchen würdest, würdest du dich in einer Endlosen Rekursion von Constructoren wiederfinden. Aber keine Sorge: Mit TSearch oder ähnlichen Proggys kann man diese Variable nicht so leicht aufspüren, weil ihr Wert keinerlei Bedeutung, mit der Angreifer irgendwas anfangen könnte, für die Variablen in deinem Programm hat.
Edit: xor_code hat übrigens nur einen einzeigen Wert für das ganze Programm (nicht für jede Instanz von TSaveInt einen eigenen).

Zitat von Hedge:
2. Was bedeutet ein '$' am Anfang von Integern?
Dass eine Hexadezimale Zahl folgt.

Zitat von Hedge:
3. Auf der Zeile werd ich nicht ganz schlau:
if (FValue mod $ABCD) * 7 + $DEF0 soll ich mir für $ABCD und $DEF0 einfach nen eigenen Wert ausdenken?
Du kannst dir dafür natürlich auch eigene Werte ausdenken, wenn du befürchten musst, dass der Angreifer hier im Delphiforum mitliest.

Viele Grüsse,
Macci
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#19

Re: Anwendungsspeicher schützen

  Alt 25. Sep 2008, 08:16
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?
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#20

Re: Anwendungsspeicher schützen

  Alt 25. Sep 2008, 14:21
Zitat von Hedge:
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?
Weil $40000000 schöner aussieht als 1073741824 Außerdem kann ich mir mehr darunter vorstellen.

Zitat von Hedge:

Hat xor_code := Random($40000000) + $40000000; eine spezielle Bedeutung oder ist es einfach nur so gedacht, dass der Integer keinen Überlauf kriegt?
Ja, ich möchte dass eine positive Zahl rauskommt, allerdings soll das höchstwertige Bit dieser Zahl (nicht das Vorzeichenbit) eine 1 sein (deswegen "+ $40000000"), damit die ursprüngliche Ganzzahl möglichst gut verschleiert wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz