Re: Unique File Key (Seriennummer sicherer)
Verfasst: 31.03.2011 08:04
Ein schwererer Ansatz (aber letztenendes auch crackbar) und ein paar Tipps:
Schreibe in PB einen eigenen Interpreter der Bytecode interpretiert *). In dieser Sprache hinterlegst Du in deinem Programm die Berechnung und Prüfung deiner Seriennummern (zB in Form von SHA256 Hashcodes). Der Hacker findet also den Bytecode deiner Scriptsprache, den er erstmal entschlüsseln muss. Dann muss er darin die passenden Stellen finden und das dann umgehen (Manipulation deines Scriptes). Das macht die Sache recht schwierig. Die Scriptsprache sollte aber nicht nur ein TRUE/FALSE liefern, denn das kann man mit jedem Debugger ganz einfach suchen und "umkehren". Es könnte auch sein, dass dein Programm eine "Magic Number" in irgend einem Algorithmus benötigt um korrekte Werte zu ergeben. Diese Magic-Number könnte das Ergebnis deiner Sicherheitsprüfung sein. Dann wird es echt hart, wenn man den korrekten Wert gar nicht kennt (zB Faktoren einer Grafikroutine oder einen wichtigen Multiplikator etc.).
Wichtig ist, dass Du nicht den Hash oder gar einen echten Key als String im Code hinterlegst. Du könntest den Hashcode in eine Zahl umwandeln (zB durch Addition des jeweiligen ASCII-Wertes + Zeichenposition) und dann diese Zahl hinterlegen. Das nötigt dem Hacker auch etwas mehr Anstrengungen ab. Oder den Hash wenigstens mit was anderem XOR codieren oder so...
Ein weiterer gemeiner Trick: Wenn Du im Programm den falschen Code entdeckst, erstmal so machen als wenn alles in Ordnung ist. Aber dann ein wenig später im Code einen Teil Quellcode ausführen der den Stack durcheinander bringt. Das hier schmiert erst ein paar Befehle später ab (auch im ASM-Debugger wie zB OllyDbg. InlineASM einschalten.): !Sub Esp,4 (muss am besten in einer Prozedur aufgerufen werden). Das verschiebt den Stack des Prozessors um 4 Byte. Wenn dann später irgend ein Code auf den Stack zugreift (oder Prozedur-Rücksprung), dann kracht es. Kann Hacker ganz schön ärgern, weil man die Stelle an der das gemacht wird nicht so einfach finden kann...
*) http://de.wikipedia.org/wiki/Bytecode und http://de.wikipedia.org/wiki/Interpreter
Kukulkan
[EDIT] Link zu dem Absturz-Thema aus 2007: http://www.purebasic.fr/german/viewtopi ... =3&t=14422 [/EDIT]
Schreibe in PB einen eigenen Interpreter der Bytecode interpretiert *). In dieser Sprache hinterlegst Du in deinem Programm die Berechnung und Prüfung deiner Seriennummern (zB in Form von SHA256 Hashcodes). Der Hacker findet also den Bytecode deiner Scriptsprache, den er erstmal entschlüsseln muss. Dann muss er darin die passenden Stellen finden und das dann umgehen (Manipulation deines Scriptes). Das macht die Sache recht schwierig. Die Scriptsprache sollte aber nicht nur ein TRUE/FALSE liefern, denn das kann man mit jedem Debugger ganz einfach suchen und "umkehren". Es könnte auch sein, dass dein Programm eine "Magic Number" in irgend einem Algorithmus benötigt um korrekte Werte zu ergeben. Diese Magic-Number könnte das Ergebnis deiner Sicherheitsprüfung sein. Dann wird es echt hart, wenn man den korrekten Wert gar nicht kennt (zB Faktoren einer Grafikroutine oder einen wichtigen Multiplikator etc.).
Wichtig ist, dass Du nicht den Hash oder gar einen echten Key als String im Code hinterlegst. Du könntest den Hashcode in eine Zahl umwandeln (zB durch Addition des jeweiligen ASCII-Wertes + Zeichenposition) und dann diese Zahl hinterlegen. Das nötigt dem Hacker auch etwas mehr Anstrengungen ab. Oder den Hash wenigstens mit was anderem XOR codieren oder so...
Ein weiterer gemeiner Trick: Wenn Du im Programm den falschen Code entdeckst, erstmal so machen als wenn alles in Ordnung ist. Aber dann ein wenig später im Code einen Teil Quellcode ausführen der den Stack durcheinander bringt. Das hier schmiert erst ein paar Befehle später ab (auch im ASM-Debugger wie zB OllyDbg. InlineASM einschalten.): !Sub Esp,4 (muss am besten in einer Prozedur aufgerufen werden). Das verschiebt den Stack des Prozessors um 4 Byte. Wenn dann später irgend ein Code auf den Stack zugreift (oder Prozedur-Rücksprung), dann kracht es. Kann Hacker ganz schön ärgern, weil man die Stelle an der das gemacht wird nicht so einfach finden kann...
*) http://de.wikipedia.org/wiki/Bytecode und http://de.wikipedia.org/wiki/Interpreter
Kukulkan
[EDIT] Link zu dem Absturz-Thema aus 2007: http://www.purebasic.fr/german/viewtopi ... =3&t=14422 [/EDIT]