Einzelnen Beitrag anzeigen

zero_x

Registriert seit: 12. Jun 2008
30 Beiträge
 
#30

Re: Anwendungsspeicher schützen

  Alt 27. Sep 2008, 11:37
Hallo Macci und webtom,

die richtige Stelle im Assemblercode zu finden ist im Grunde sehr einfach. Wenn man einen String mit beispielsweise dem Text: "Das Passwort ist falsch" als Plaintext oder in den Ressourcen der Anwendung hat, kann man auf der Adresse vom Text einen Breakpoint setzen und die Anwendung bis zu dieser Stelle laufen lassen. Dann sollte i.d.R. die Verschlüsselung vor diesem Breakpoint stehen.

Wenn man nun ein Passwort hat und dies mit einem anderen Vergleichen möchte und man dies mit einer direkten if-Abfrage macht ist es sehr unsinnig, weil dann schon das richtige Passwort verraten wird und mit einem anderen vergleicht wird. An dieser Stelle kann man das richtige Passwort auslesen oder die Abfrage patchen. Das würde somit keinen als so großen Sinn machen. Wenn man jetzt nun das Passwort stelle für Stelle abfragt macht das um einiges mehr Sinn, denn der Cracker wird schnell die Lust an der Sache verlieren und wird alles verwirrender für ihn. Machen wir mal ein einfaches Beispiel in Assembler:
Delphi-Quellcode:
004013BA C745 FC 0500000>MOV [DWORD EBP-4], 5
004013C1 837D FC 05 CMP [DWORD EBP-4], 123
004013C5 75 26 JNZ SHORT 004013ED
004013C7 C74424 04 00004>MOV [DWORD ESP+4], 00440000 ; ASCII "Richtig!"
Nun, was sehen wir hier? In der ersten Zeile ist unser falsches Passwort: "5". In der zweiten Zeile wird dieses mit "123" Verglichen, falls es falsch ist wird auf eine andere Adresse gesprungen. Ansonsten wird "Richtig" ausgegeben. Somit ist es sehr einfach dies zu patchen. Auf das Theme möchte ich nicht weiter eingehen, da es sonst zu kompliziert wird. Ich möchte einfach nur darauf hinaus, dass wenn man etwas 1 zu 1 vergleicht ist alles sichtbar! Bei Strings oder Lizenzschlüsseln kann man sich das schon denken ... .

Also ich würde dazu raten das Passwort nicht direkt im Code zu programmieren, sondern zur Laufzeit ein Passwort zu generieren mit einem Algorithmus. Das Passwort nicht 1 zu 1 abfragen, sondern stückweise. Wie du das machen möchtest bleibt dir überlassen.

zero_x
  Mit Zitat antworten Zitat