Wie soll ein Computer Schriftzeichen behandeln können, wenn er doch nur
in der Lage ist mit Binärzahlen zu arbeiten? Er hat nur eine Lösung, er muss
jedem Zeichen eine Zahl zu ordnen in binärer Form, jedes Zeichen erhält
seinen individuellen Binärcode, beginnend bei dezimal 0 und endend bei
dezimal 255, bzw. hex beginnend bei 0 endend bei FF. Oder Binär:
geginnden bei 00000000 endend bei 11111111. Euch ist vielleicht
aufgefallen, dass ich alle "0" hingeschrieben habe. Prinzipiell besteht
zwischen 0, 0000 und 00000000 auch kein Unterschied, jedoch ist es
wegen der Übsicht leichter die "führenden Nullen" auszuschreiben. Im Ascii-
Zeichensatz sind nicht nur für Menschen lesbare Zeichen kodiert. Auch der
Zeilenumbruch, der Tabulator, Backspace und wie alle Sonderzeichen und
-Tasten auch heißen mögen, alle sind im Ascii-Zeichensatz kodiert. Jede
Tastatur beherrscht den vollen Ascii-Zeichensatz.
Es ist wichtig zu wissen, dass es diesen Code gibt, da man Buchstaben
beim Cracken oftmals in Form von Zahlen begegnet, eben ihrem Ascii-Code.
Sorten des Crackens:
Patchen: Unter patchen versteht man ein Programm so zu manipulieren,
dass der eigentliche Kopierschutz oder das durch eine Testversion gesetzte
Limit umgangen wird. Beispielsweise können bei Demos von Adressbüchern
manchmal nur 20 Einträge gemacht werden, durch den Patch können es
dann beliebig viele werden. Oder es ist ein zeitliches Limit gesetzt, was
dazu führt, dass das Programm nur 30 Tage arbeitet, etc.
Keygennen: Testversionen besitzen oft die Möglichkeit in Vollversionen
umgewandelt zu werden, indem man einen aus dem eingegebenen Namen
oder sonstigen Daten einen Registriercode berechnet. Der Anwendet
registriert sich also und erhält einen zu seinen Daten passenden
Freischaltcode. Das Programm führt die Berechnung des Freischaltcodes
ebenfalls durch und vergleicht diesen dann mit dem vom Anwender
eingegebenen. Der Cracker versucht nun, den Algorithmus dieser
Berechnung zu finden und zu verstehen. Anschließend programmiert er ein
kleines Program, genannt Keygenerator bzw. Keymaker, der das gleiche
macht, wie auch das Programm, mit dem Unterschied, dass der richtig
berechnete Freischaltcode anschließend ausgegeben wird und das
Programm somit freigeschaltet werden könnte.
Eng damit verwandt sind Keyfiles. Dies sind Dateien, in denen die
Registrierungsdaten stehen. Das Programm testet dieses keyfile auf
Gültigkeit und läuft im Falle einer gültigen Registrierungsdatei auch im
registrierten Modus. Der Cracker kann einen Keyfilemaker schreiben, der im
Prinzip genauso arbeitet wie der Keygen, nur anschließend eine Datei
ausgibt, das keyfile.
Die einfachere Variante hierbei heißt "Serial sniffing". Dies bedeutet nichts
anderes, als dass man versucht eine gültige Serial zu finden, auf den
Keygen allerdings verzichtet. Oftmals ist dies eine der schnellsten aber
auch langweiligsten Methoden. Dennoch geht es manchmal nicht anders,
da auch heute oftmals Serials noch "hardcoded" sind. Dies bedeutet, dass
überhaupt kein Algorithmus vorhanden sind, sondern der eingegebene
Freischaltcode mit einem verglichen wird, der fest in das Programm
integriert ist.
Der Vorteil beim Serial sniffen, Keygennen oder bei Keyfiles besteht darin,
dass man das eigentliche Programm nicht verändern muss. Dies ist erstens
eleganter und zweitens begeht man ein Verbrechen weniger, da das
Programm nicht direkt manipuliert wird. Keygens sind höher angesehen, da
oftmals ein ganzes Stück mehr Arbeit dazu gehört den Algorithmus zu
verstehen und nachzucoden.
Unpacking: Ein immer beliebterer Schutz gegen Patching ist das Pacen von
Programmen. Das funktioniert im Prinzip genau, wie das Packen von Dateien
mit Winzip, allerdings wird das Programm zur Laufzeit in den Arbeitsspeicher
entpackt und anschließend ausgeführt. Wie das genau funktioniert könnt
ihr in speziellen Unpacking-Tutorials nachlesen. Gepackte Programm kann
man allerdings nicht patchen ohne sie vorher wieder zu entpacken, um die
Originaldatei zu erhalten. Unpacking ist eines der kompliziertesten Themen,
da es sehr viel Wissen über den Aufbau einer *.exe-Datei erfordert,
Stichwort "Portable Executeable" - Format, kurz PE-Format.
Eine Ausnahme bildet hier das Inlinepatching, eine sehr elegante Variante
des Patchens. Kurz gesagt wartet man, bis das Programm in den
Arbeitsspeicher entpackt wurde und macht die Patches, die man sonst in
der exe-Datei selbst gemacht hätte im Arbeitsspeicher. Dies geht entweder
über ein eigens geschriebenes Programm, dass das Target lädt und patcht,
genannt "Loader", oder über einen Inlinepatch, der direkt mit in das
Programm eingebaut wird.
Spiele: Da dies die beliebtesten Opfer sind, sind die Kopierschütze hier in
der letzten Zeit verstärkt überarbeitet worden. Als Newbie hat man hier
keine Chance und muss sich eine ganze Weile gedulden. Kommerzielle
Protections wie Laserlok, Safedisc und wie sie alle heißen verhindern, dass
jeder Anfänger sofort eine Raubkopier erstellen kann.
Tools
Es gibt Unmengen an Tools, von denen viele nur für spezifische Sachen zu
gebrauchen sind. Es gibt allerdings eine gewisse Grundausrüstung, die man
immer wieder benötigt. Dazu zählen ein Disassembler, ein Debugger, und ein
paar Tools, die Monitoring oder Analyse betreiben. (Registry beobachten,
Dateizugriffe überwachen, etc.)
Diese Tools dürften für die meisten Newbiez absolutes Neuland sein, womit
allerdings jeder rechnet
Assembler:
Assembler ist eine Low-Level-Programmiersprache. Low-Level deswegen,
weil sie keine vorgefertigten Konstrukte wie eine "For-Schleife" oder
ähnliches kennt, sondern alles von Hand und mit Assembler-Befehlen
realisiert werden muss. Low-Level auch deswegen, weil sie wesentlich
näher am Prozessor arbeitet. Denn dieser kennt nur Assembler. Alles,
was ein Prozessor wirklich kann ist eine in binär kodierte Anweisung zu erhalten
und diese auszuführen. (dies soll nicht herabwürdigend gemeint sein)
Ein Compiler einer beliebigen Programmiersprache "übersetzt" eigentlich
"nur" die für Menschen besser lesbare Hochsprache in für den Prozessor
besser verständliche Assembler-Anweisungen. Die Befehle der Assembler-
Sprache sind kurze "sprachverstümmelte" Buchstabenfolgen, die irgendwie
immernoch Sinn machen. Diese Befehle nennt man Mnemonics. Beispiele
sind "mov, add, sub, div, idiv, loop, etc.". Diese Assembleranweisungen
nimmt der Prozessor in Form von "Nullen und Einsen" zu sich. Wir können
uns jedes beliebige Programm in der Assemblersprache anzeigen lassen.
Jede Assembler-Anweisung hat seinen eigenen Code. Durchaus vergleichbar
mit dem Ascii-Code. Und hier kommt der Disassembler ins Spiel. Dieses
Programm ist in der Lage den kompletten Code eines Programms einzulesen,
indem es einfach alles zurück nach asm dekodiert. Den Code für eine
Assembler-Anweisung nennt man OperationCode, kurz OpCode.
Was wir erhalten, wenn wir ein Programm disassemblieren, ist ein verdammt
langes Listing von Asm-Instruktionen. All diese Befehle muss der Prozessor
ausführen, wenn wir das Programm starten.
Der Disassembler ist für uns wichtig, um interessante Codestellen zu finden.
Um auf die alten Beispiele zurückzugreifen können wir beispielsweise mit
dem Disassembler nach der Stelle suchen, wo das Programm vergleicht, ob
wir gerade versuchen den 21. Eintrag ins Adressbuch zu tätigen, oder ob
schon der 30. Tag der Testphase abgelaufen ist, und die Demo daher nicht
mehr lauffähig ist. Wie dies im Einzelnen funktioniert und welche Funktionen
bestimmte Disassembler haben erfahrt ihr in den Grundsatztutorials zu den
Tools und in den Tutorials zu bestimmten Targets.
Der bei Newbiez bekannteste Disassembler ist WDasm. Dieser wird allerdings
nicht mehr weiterentwickelt. Dennoch gibt es ein paar Patches, die von
Usern entwickelt wurden und die Funktionen des Programms erweitern. IDA
Pro ist dann die Profi-Alternative, allerdings meiner Meinung nach auch
schwerer zu bedienen.
Ein sehr viel mächtigeres Tool ist der Debugger. Eigentlich wurden diese
Programm dafür entwickelt, Fehler in bestehenden Programmen zu
beseitigen, bzw. ihnen überhaupt auf die Spur zu kommen. Mit einem
Debugger kann man zur Laufzeit eines Programms in dieses einsteigen und
Schritt für Schritt, das heißt Assembler-Zeile für Assembler-Zeile
mitverfolgen, was genau das Programm macht. Vielleicht versteht ihr jetzt
schon, wie man Freischaltcodes findet oder ganze Algorithmen. Der
Debugger kann noch sehr viel mehr. Er kann den Arbeitsspeicher des
gerade debugten Programms anzeigen und durchsuchen und zeigt den
Inhalt der Prozessorregister. Ihr versteht vielleicht noch nicht, wie mächtig
dieses Tools ist, werdet dieses aber kennen und lieben lernen.
Die Meinungen über den besten Debugger spalten sich mehr und mehr. Die
bisherige Profi-Varianten heißt SoftIce (SoftIce Driversuite 2.7), diese
bekommt ständig mehr Konkurrenz von OllyDebug, zumal dieses Programm
auch noch Freeware ist, SoftIce dagegen ein kommerzielles Programm ist.
Ich selbst bin eingefleischter SoftIce-Vertreter und ich sehe auch keine
großen Grund mich da umzugewöhnen. Aber das ist Geschmackssache.
DeDe: DeDe ist ein Komplettanalyse-Tool für mit Delphi entwickelte
Programme. Mit DeDe kann jeder Delphi-Dialog angezeigt werden und die
Einsprungsadressen der durch Buttons aufgerufenen Prozeduren
herausgefunden werden. Ihr versteht wahrscheinlich noch nicht, warum
das ungeheuer nützlich ist, aber ihr werdet es lernen.
Hexeditor: Ein kleines aber äußerst nützliches Tool ist ein normaler
Hex-Editor, der vielleicht noch ein paar Extras hat. Mit diesem könnt ihr
eure patches machen. Die nötigen Informationen habt ihr vielleicht vorher
mit WDasm oder SoftIce herausgefunden, jetzt muesst ihr nur noch die
Manipulation tätigen. Der Hexeditor zeigt euch die komplette Datei Byte für
Byte an und zwar im hexadezimalen Format, daher der Name. Der Hexer
Hiew ist in der Lage ein Programm auch in Asm-Anweisungen darzustellen,
ist aber dafür noch auf Dosebene entwickelt. HexWorkshop oder WinHex
glänzen mit vielen Extras und schöner GUI.
FileMon + RegMon: Diese beiden Programme überwachen Zugriffe eines
beliebigen Prozesses auf die Windows-Registrierdatenbank und auf Dateien.
Dies ist nützlich, wenn man beispielsweise feststellen möchte, ob ein
Programm versucht auf ein keyfile zuzugreifen oder
Registrierungsinformationen aus der Registrierungs zu lesen.
Analyse-Tools: File-Analyser informieren Euch darüber, mit welcher
Entwicklungsumgebung ein Programm entwickelt wurde und ob es gepackt
oder gecrypted wurde, wenn ja, mit welchem Packer/Crypter. Ich empfehle
hierfür die beiden Programme peID und Language2000, wobei peID meist die
genaueren Ergebnisse liefert.
Diese Tools bieten für den Anfang eine gute Ausrüstung, um sich als
Cracker zu versuchen. Bis ihr jedes dieser Tools beherrscht wird eine
Menge Zeit vergehen, jedoch werdet ihr immer wieder ein Stück
dazulernen.
Crackmes
Crackmes sind kleine Programme die extra dafür geschrieben wurden, um
gecrackt zu werden. So blöd das jetzt klingen mag, es ist eine gute Übung,
oftmals sind diese Crackmes wesentlich fieser, als so manche Shareware.
Aus den anliegenden Instruktionen erfahrt ihr, wie ihr das Target zu
cracken habt, oftmals ist Patching verboten. Meistens sollt ihr anschließend
eure Lösung posten, praktisch als Feedback für den Autor. Manchmal sind
kleine Gags in den Crackmes versteckt, reinschauen lohnt sich oftmals auf
jeden Fall
Coding
Im Prinzip könnt Ihr ohne jede Vorkenntnis von Programmiersprachen
anfangen zu cracken. Mit ein klein wenig Erfahrung in diesem Bereich
werdet ihr es allerdings wesentlich leichter haben. Im Lauft der zeit solltet
ihr allerdings auf jeden Fall beginnen programmieren zu lernen. Wie sonst
sollt ihr Loader, Patcher, Keygens und eigene Tools programmieren können?
Ihr merkt, Cracken greift in viele Bereiche ein. Zum einen benötigt ihr ein
größeres Verständnis von der Arbeitsweise eines Durchschnittsusers, zum
anderen wisst ihr mehr über Programme und deren Arbeitsweise als viele
andere. Und schließlich lernt ihr auch noch programmieren. Es ist klar, dass
dies nicht innerhalb von ein paar Monaten zu erlernen ist. Es erfordert Zeit,
Zeit die ihr euch so einteilen solltet, wie ihr es für richtig haltet. Vielleicht
benötigt ihr auch mal eine längere Pause. Vielleicht steigt ihr ein paar
Monate ganz aus, oder beschäftigt euch verschärft mit dem Thema
Hardware oder Programmierung.
Vielleicht merkt Ihr aber auch, dass euch das Coden eigentlich viel mehr
Spaß macht, als alles andere. Hey, in Ordnung, warum nicht? Bleib auf der
Schiene, mach das, wozu du am meisten Lust hast.
Gfx, Tunes
Sicherlich seid ihr schon einmal einem Keygen begegnet, der durch sein
gutes Design und durch seine XM-Musik auffällt. An diesem Keygen waren
in der Regel mehrere Leute beteiligt. Zum einen gibt es da natürlich den
Cracker, der dem Ding seine eigentliche Funktionalität einhaucht. Zum
anderen wurden die Grafiken und die Musik des Keygens wahrscheinlich von
extra Gfxern und Chiptunern erstellt. Ich finde das faszinierend, da der
Keygen dadurch nicht einfach ein Programm ist, sondern ein Ausweis, ein
Abbild der Skills von mehreren Personen. Mehr über dieses Thema in meinem
allgemeinen Keygen-Tutorial.
Um nun endlich zu einem Anfangspunkt für Euch zu kommen
Informiert Euch zunächst ein bisschen über Assembler und die
grundlegensten Dinge eines Prozessors. Gutes Material hierfür ist das Buch
"Das Assemblerbuch", ebenfalls zu finden bei CIP. Das bedeutet aber nicht,
dass ihr jeden FlipFlop des P4s mit Vornamen kennen müsst. Danach solltet
Ihr herausfinden, wie die Tools funktionieren, die oben angesprochen
worden sind. Dazu sind bei CIP schon einige Grundsatztutorials vorhanden.
Hmm, und anschließend, fangt einfach los

. Schnappt Euch ein Tutorial,
lest es und versucht das geschriebene nachzuvollziehen. Programmiert
nebenbei ein bisschen, mit ein bisschen Fantasie könnt ihr vielleicht sogar
schon richtig nützliche Sachen coden, einen Konverter für Zahlen in
Zahlensysteme mit beliebiger Basis, ich bin sicher euch fällt was ein...
Eines jedoch wird ganz sicher passieren: Irgendwann kommt der Zeitpunkt
an dem ihr nur noch frustriert seid. Dann werdet ihr wahrscheinlich erst mal
aufgeben und die ganze Sache ruhen lassen. Nehmt euch die Zeit, ihr habt
ja keine Verpflichtungen. Macht vielleicht ein viertel Jahr mal was anderes,
konzentriert euch verstärkt aufs coden, vielleicht entwerft ihr websites
oder arbeitet ein bisschen an Euern Grafik-Künsten? Vielleicht stekct auch
ein guter XM-Musiker in euch? Bei all diesen Bereichen bleibt ihr doch
letztenendes beim Ausgangsthema...
Abschließendes
Bei all diesen neuen Interessensgebieten wird sich einer als euer
persönlicher Favourit herauskristallisieren. Ihr solltet jedoch in alle Bereiche
einen Einblick tätigen und dann auf eure innere Stimme hören. Diese wird
euch mitteilen, in welchen Bereich ihr wirklich gehört.
Es wartet viel Arbeit auf Euch, aber es macht Spaß... Happy Cracking,
ZeroJump