Autor :Merlin [NeuRoM@nCerZ]
e-mail merlinz@gmx.at
How to crack OCX's Part I
Inhaltsverzeichnis:
1) Allgemeines
1.1) Problemstellung
1.2) Registry Licensing
1.3) LIC File Protection
1.4) Benötigte "Werkzeuge"
2) Bsp für Registrylicensing
3) Bsp für LIC-File Protection (Part II)
1. Allgemeines:
Willkommen zu meinem ersten Tutorial. Dieses Tutorial ist in erster Linie für Anfänger geschrieben aber ich hoffe, dass auch fortgeschrittene Cracker noch etwas lernen können. Wir werden uns zuerst einmal damit beschätigen, wie OCX-Licensing im Allgemeinen funktioniert bevor wir uns im weiteren einige Beispiele ansehen. Ich gehe mal davon aus, dass jemand der dieses Tut liest weiß was OCX sind und wie sie in eine Entwicklungsumgebung eingebunden werden.
1.1 Problemstellung :
OCX'e werden bei den fertigen Programmen mit ausgeliefert, d.h. dass das OCX mit dem der Entwickler sein Programm geschrieben hat auch auf dem Rechner des Anwenders vorhanden ist. Um nun zu verhindern, dass der Anwender mit diesem OCX auch entwickeln kann muss etwas auf dem Entwicklerrechner vorhanden sein, was auf dem Anwenderrechner fehlt. Dafür gibt es grundsätzlich 2 Möglichkeiten entweder ein Registryeintrag oder ein File das jeweils nur auf dem Entwicklerrechner vorhanden ist.
Dies ist die Grundidee; für uns stellt sich also das Problem wie können wir, ohne uns zu registrieren, mit diesen OCX'en entwickeln? Wir machen uns unsere Registrierung einfach selber ;-)))))))
1.2 Registrylicensing:
Bei dieser Art der Registrierung gibt es wiederum zwei grundsätzliche Möglichkeiten .
a) Es wird das Standardverfahren von Microsoft benutzt
b) Ein vom Programmierer selbst entwickeltes Verfahren kommt zum Einsatz
Dieses Tutorial wird sich hauptsächlich mit der Variante a beschäftigen. Nachdem man die Variante a verstanden hat sollte die b Variante aber kein Problem sein.
Bei der ersten Variante wird also ein Standardverfahren benutzt, das Microsoft selbst für seine Produkte verwendet. Bei dieser Variante wir das OCX über einen Eintrag unter HKEY_CLASSES_ROOT\Licenses registriert. Somit wird aus einer Demoversion eine Vollversion. Wenn man sich die Einträge in diesem Schlüssel mal ansieht, dann kann man daraus alleine noch nicht viel erkennen. Aber mit den richtigen Hilfsmitteln wird das ganze schon klarer :-) Dazu aber später mehr.
1.3 LIC-File Protection:
Bei dieser Art des Schutzes wird zur Registrierung eine Lizensierungsdatei verwendet (xxxxxx.lic die x stehen für den Namen des OCX). Lässt man sich registrieren , was wir aber nicht vorhaben, dann erhält man soch eine .Lic Datei, die im selben Verzeichnis wie die OCX-Datei untergebracht sein muß. Die bloße Anwesenheit dieser Datei bringt das OCX aber noch nicht dazu uns als registrierten Benutzer zu akzeptieren. Es muss also in dieser Datei noch etwas bestimmtes drinnstehen. In der Regel sind dies unverschlüsselte Copyrightvermerke. Na ja "in der Regel", es gibt natürlich auch wieder Ausnahmen.Diese Ausnahmen sind aber sehr selten. Bei den Lic Dateien wird normalerweise nur die erste Zeile eingelesen, so dass es vorkommen kann , dass noch weiterer Text in dieser Datei zu finden sein kann. Solange dieser aber nicht in der ersten Zeile steht hat er für uns keine Bedeutung. Es gibt, wie soll es anders sein, auch diesmal wieder Ausnahmen :-(. Wie diese Copyrightvermerke im einzelnen aussehen ist sehr verschieden. Bei dem einen OCX kann der Text einfach mit einem normalen Texteditor eingefügt werden bei anderen muss dieser Text im WIDECHAR-Format vorliegen. Dieses Widecharformat lässt sich dann nur mit einem Hexeditor erstellen.
Somit wären wir auch schon bei den benötigten Tools:
1.4 Benötigte "Werkzeuge":
1) Filemon :zeichnet alle Dateiaktionen auf: zb welche Dateien von welchem Programm geöffnet werden.
2) Regmon :Loggt alle Zugriffe auf die Registrierungsdatenbank
3) Softice :bester Debugger überhaupt
4) Hexeditor :ich benutze M&I WinEditor v3.31. Es geht aber jeder andere auch
5) Disassembler :wird aber nur selten benötigt. Gut wäre zb W32dasm8.93
Diese Proggi's findet man zb auf unserer Seite http://neuromancerz.cjb.org oder auf http://protools.cjb.net
Unsere "Opfer" findet man auf den Homepages der Hersteller oder beim deutschen Distributor ZoschkeData ( www.zoschke.de)
2. Bsp für Registry Licensing:
Der einfachste Vertreter dieser Kategorie ist Videosoft mit seinen OCX'en (www.videosoft.com):
Wir laden uns zb VS Flex Grid 6.0 runter und installieren das Control. Danach öffnen wir unsere Entwicklungsumgebung (ich verwende hier VB6) und laden dieses OCX in die Entwicklungumgebung. Dann starten wir Filemon und Regmon. Beide natürlich gefiltert , dh unter "OPTIONS\FILTER\Processes Include" tragen wir bei beiden Programmen VB6 ein. Jetzt ziehen wir eine Instanz dieses OCX auf unsere Form . Es ist noch kein "NAG Screen" aufgetaucht . Hmmm.......
Wir starten also unsere Form aus der Entwicklungsumgebung heraus. Bummm!!
Da ist ja der NAG. Jetzt können wir uns Filemon ansehen, kurz durchgeschaut, nix, kein Zugriff auf eine LIC Datei. Filemon also wieder zumachen. In Regmon reingeschaut und was sehen wir da:
Das sieht doch schon sehr vielversprechend aus.The End is near my dear.
Entwicklungsumgebung schließen und REGEDIT aufrufen,wechseln in den Schlüssel wie oben aufgeführt (btw man kann in Regmon auch auf diesen Eintrag doppelklicken und kommt dann direkt in diesen Schlüssel).Den Key 7C8181C0-0A96-11d2-BAA4-04F205C10000 legen wir jetzt von Hand an. VB6 wieder aufgemacht und wieder eine Instanz auf die Form gezogen. Starten und ...............kein NAG. Yep, wir sind registriert.
Anmerkung:VB6 sollte bevor man zum zweiten Mal eine Instanz auf die Form zieht geschlossen werden, denn in einer Sitzung wird nur einmal die Information aus der Registry ausgelesen.
Videosoft überprüft also nur ob dieser Schlüssel vorhanden ist, noch nicht einmal ob ein Wert in diesem Schlüssel steht. Brbrbr. Das kann man ja wohl kaum "Protection" nennen.Übrigens diese Methode funzt bei allen OCX'en von Videosoft. Man muss aber auch sagen nur Videosoft macht es einem so leicht. Die anderen Hersteller lassen sich zum Teil bessere Sachen einfallen.
Kommen wir zu einem anderen Hersteller von OCX'en: DataDynamics (http://www.datadynamics.com). Von dessen HP saugen wir uns mal Active Reports 1.0. Wieder gleiches Vorgehen: VB6 aufmachen, Control laden und Regmon starten(mit Filter). Man kann natürlich Filemon auch mitlaufen lassen, aber dieses Control arbeitet über die Registry, so dass man in Filemon sowieso nichts sehen wird. Eine Instanz auf die Form gezogen....kein NAG. Jetzt unter "PROJEKT\WEITERE ACTIVE X CONTAINER" Data Dynamics Active Reports auswählen und schon ist der NAG zu sehen. Zu Regmon wechseln und was sieht man dort :
HKEY_CLASSES_ROOT\Licenses\A7BA9AD0-701F-11D1-8AF2-00A0C98CD92B not found
Wieder in die Registry wechseln und diesen Key anlegen. Jetzt wieder das ganze von vorne. Damn!!!! immer noch ein NAG. Das Control erwartet also noch einen bestimmten Wert in diesem Key. Nur welchen ?????
In diesem Moment kommt Softice ins Spiel. Damit wir was zur Kontrolle haben tragen wir noch schnell einen Wert in diesem Key ein zb 112233445566.
Wir öffnen erneut unsere Entwicklungsumgebung, bevor wir jedoch unseren NAG auslösen wechseln wir mit Strg-D in Softice und setzten einen Breakpoint auf lstrcmp (bpx lstrcmp). Wir wählen diesen Breakpoint weil der eingelesene String(112233445566) mit dem richtigen verglichen werden muß. Es gibt natürlich noch mehr Möglichkeiten aber ich hab in einer langen Sitzung diesen Bpx gefunden und er funzt wirklich gut. Wenn man sich die Aufzeichnung in Regmon ansieht, dann stellt man fest, dass die Abfrage des License String als letztes kommt. Das bedeutet auch der Stringcompare kommt als letztes. Wir wählen "PROJEKT\WEITERE ACTIVE X CONTAINER" Data Dynamics Active Reports, und Softice breakt sofort. Erst einmal immer mit F5 das Proggi weiter laufen lassen und mitzählen bis zum Schluß. Das ganze nochmal von vorne und beim letzten Break mit F11 raus aus der Funktion. Wir finden uns in "ACTRPT" wieder. Wir scrollen etwas hoch und sehen folgenden Code:
| :20036C30 | MOV | EAX,[ESP+18] | <--echter Key |
| :20036C34 | LEA | ECX,[ESP+00000098] | <--unser Key [1122334..] |
| :20036C3B | PUSH | EAX | |
| :20036C3C | PUSH | ECX | |
| :20036C3D | CALL | [Kernel32!lstrcmp] |
Wir brauchen nur noch den korrekten Wert in die Registry eintragen und schon ist das ActiveX-Control terminiert.
--------------------------------------------------ENDE-----------------------------------------------
Ich hoffe ich konnte etwas Wissen vermitteln........;-)
O-O
ciao bis zum nächsten Mal....Merlin [NeuRoM@nCerZ]
Bei Fragen oder Anregungen mailt mir: merlinz@gmx.at
Wenn ihr jetzt sagt diesen Schriebs kannste knicken, auch dann dürft ihr mir mailen.
Lob ist natürlich auch gerne gesehen !
GREETZ fly out to: _vladimir_,mnemonix;ViperZx,wedix,Ozelot,Nudnik,tco95´,Pit Pirate,Windowskiller,
BLACKHAwK,Tachion,KnowlIsPwr and all I've forgotten