Korrekt, es bleibt bei den Vorrausetzungen ja nichts anderes übrig !
Sicherheit kann entstehen durch definitiv sichere Algorithmen und deren Nutzung. Sie kann aber auch entstehen durch Anticracking Tricks. Diese Tricks sind zwar rechnerisch gesehen 0% Schutz, aber denoch halten sie praktisch gesehen viele Anfänger-Cracker ab. Das Problem bei diesen Tricks ist das sie nur maximal so gut sind wie der Programmierer der sie sich ausdenkt, und auf der Gegnerischen Seite arbeiten Gruppen von viel clevereren Crackern. Also hat ein normaler Profiprogrammierer eigentlich keine Chance von der Wissenbasis her.
Wenn also bestimmte Forderungen vom Kunden vorliegen, zB. das Passwort verschlüsselt zu speichern ohne das man den Passwort-Schlüssel jedesmal eingeben muß, dann muß man auch unsichere Verfahren vorschlagen und darf sie weil sie rechnerisch 0% unsicher sind nicht dem Kunden verschweigen. Davon hängt nämlich auch eine Aufwandsanalyse ab.
Meistens helfen aber ein paar Zahlenbeispiele die dem Kunden dann klarmachen um wievieles unsicher einer bloßer Anti-Cracking-Trick ist.
Meinesachtens arbeiten die effektivsten/ökonomischsten Anti-Cracking-Trick nach folgendem Schema:
- verstecke die Sicherheitsdaten an Orten wo sie nicht auffallen
- tarne diese Daten angepasst auf die häufigst vorkommenden Formate an diesem Ort
- bei Zugriff auf diese Daten gehe immer Umwege
- d.h. scann ALLE Daten am selben Ort wo die Sicherheitsdaten gespeichert wurden
- für alle gescannten Daten führe die gleichen Sicherheitsberechnungen durch, aber NUR für die tatsächlich entscheidenden Daten speichere deren Resultat.
- baue ca. 5 solcher Überprüfungen vollständige autark voneinander in die Anwendung ein
- gehe niemals den direkten Weg zum Ziel
- gehe diesen Weg immer nur sporadisch, z.b. alle 11 Tage o.ä.
Als Beispiel: eine Datei mit Daten soll versteckt werden. Wir entscheiden uns für den \Windows\System32 Ordner. Dort liegen hauptsächlich
DLL's also muss unserer Datendatei eine
DLL sein.
Bei Zugriff auf diese
DLL scannen wir alle
DLL's aus diesem Ordner. Für jede dieser
DLL's lesen wir unserer Daten aus so als wäre sie eine gültige
DLL-Datendatei von uns. Aber nur bei der richtigen Daten-
DLL berücksichtigen wir das Resultat. Ein Cracker nutzt nun FileMon und protokolliert alle unserer Dateizugriffe. Pro
DLL die unserer Anwendung aufruft sieht er ca. 10 Logeinträge, auf meinem Rechner sind in System32/ ca. 2.000
DLL's, er muß also 20.000 Logeinträge überprüfen auf eine verdächtige Aktion. Unsere Program benötigt zur Produktion eine solch großen Anzahl von Logs, nichtmal 10 Millisekunden.
In der Registry sieht es genauso aus. Speichere einen Gültig-erscheinenden Eintrag unter
CLSID ab. Dieser Eintrag muß eine gültige
CLSID Struktur aufweisen damit ein Automatischer Scanner diese
CLSID nicht finden kann. 75% aller Schutzverfahren die ich analysiert habe bauten so auf die Registry sie nutzten ABER NIE die gültigen Strukturen. Somit flogen ihren versteckten Einträge sehr schnell auf. Z.b.
CLSID-Schlüssel ohne Subkeys sind enorm verdächtig.
Nun gut beim Lesen unserer Informatonen scannen wir den Kompletten
CLSID Registrybaum. Ich weiß nich aber 10.000 solcher
CLSID's düften auf meinem System vorhanden sein. Wiederum 10 Logeinträge pro Zugriff in RegMon (Open,Seek,Close,Read,Subopen usw.). Sind also 100.000 Logeinträge die der Cracker analysieren muß und unser Program für ihn in maximal 50 Millisekunden erzeugt hat.
Das falscheste vom Falschen ist es zu versuchen SoftIce/RegMon/FileMon zu detektieren bzw. zu deaktivieren. So einen Schutz bauen nur Anfänger ein.
Gruß Hagen