Sammelthread: Anfängerfragen zu Crackmes

CDW

Moderator
Mitarbeiter
Auf einen Vorschlag von TheErono entsteht vorerst ein Sammelthread für Anfängerfragen.

Sinn und Zweck: einfache Fragen, die trotz Crackme-FAQ bleiben (oder von dieser nicht abgedeckt werden), sollen hier beantwortet werden.

Prinzip: Frage-Antwort Spiel ohne Googleverweis. Also bitte als Antwort eine Erklärung/konkrete Links liefern ;).

Welche Fragen hier gestellt werden sollen: Grundverständnis/Grundlagen zu Crackmes/Reversing (also quasi 0-Level).

Die Posts/Fragen werden dann regelmäßig zusammengefügt/sortiert, so dass es übersichtlich bleibt.
 

rami

New member
Erste Frage: Gibt es ein empfehlenswertes deutschsprachiges Tutorial? Klar, Englisch ist hier die dominierende Sprache und ich hab auch kein Problem, mir englische Anleitungen vorzunehmen, aber für den Einstieg ist denke ich ein Tutorial in der Muttersprache leichter, schon wegen neuen Fachwörtern. Wär cool, wenn da jemand nen Link hat.
 

jemo.

Member
Da ich selbst vor einiger Zeit auf der Suche nach einem deutschsprachigen Tutorial war und keines gefunden habe, bin ich mir relativ sicher, dass es zumindest kein gutes gibt.

Was aber leicht verständlich ist sind die Reversing for Newbies Tutorials. Die sind zwar in englisch, aber echt nicht kompliziert.

Falls du ein Assembler Tutorial suchst, ich finde dieses hier (wikibooks) ganz gut.
 

Wotan

New member
Grundlagentutorial zum Thema
Autor:ZeroJumpDatum:04.08.2003Target:GrundlagenSize:0 BytesTools:keineKategorie:Grundlagen

Einleitung


Das wohl größte Problem eines Newbiez ist es wohl erst mal den Anfang des
Seils zu finden, an dem man sich langziehen kann, um möglichst effizient
viel Wissen zu erlangen. Dieses Tutorial soll helfen diesen Anfang zu finden,
vielleicht an Stellen, von denen man es nicht erwartet hätte. Es soll
darlegen, in welche Bereiche man beim Cracken eintauchen wird und
gleichzeitig eine Abschreckung sein für alle, die keine Lust haben viel zu
Lesen oder aus zeitlichen Gründen nicht ganz bei der Sache sein können.
Für diese Herrschaften ist das Tutorial hier bereits zu Ende, es sollte
jedem klar sein, dass man nicht einfach in 5 Minuten Cracken lernt und man
auch als erfahrener Cracker immer wieder auf neues unbekanntes Terrain
stößt, dass erforscht werden muss.


Alle, die sich nicht scheuen, den "Pfad des Lernens" zu betreten freuen sich
mit mir auf das erste Tutorial, dass Euch helfen wird den Überblick über
alles zu erhalten.

Cracken, wieso und warum?

Ein heikles Thema, dass ewig Konfilktpunkt sein wird. Und auch hier die
Frage, was war zuerst da, das Huhn oder das Ei? Der Kopierschutz oder der
Cracker? Die Frage ist leicht zu beantworten, natürlich der Kopierschutz,
da sonst der Cracker nichts zu tun hätte. Der Cracker verdankt seine
Existenz dem Raubkopierer, eine Person, die Software stielt, um sie für sich
selbst und/oder andere kostenlos verfügbar zu machen. Um Programme zu
schützen, wurden daher die Kopierschütze entwickelt, die heute in vielen
unterschiedlichen Variationen vorhanden sind. Seit der Existenz des
Kopierschutzes existiert allerdings auch das Bestreben, diesen zu
manipulieren, zu täuschen, zu umgehen. Cracker erlangen Wissen über
Softwaremechanismen, die es verhindern, dass ein Programm
verbotenerweise kopiert wird. Dieses Wissen gibt ein gutes Gefühl, es
erfüllt den Geist, man ist in der Lage kommerzielle Protektionen außer Kraft
zu setzen.

Natürlich ist klar, der Cracker macht sich strafbar durch das Manipulieren
der Software. Das sollte an dieser Stelle ebenfalls jedem bewusst werden.
Wer kommerzielle Software crackt, sogar wer Freeware manipuliert, begeht
ein Verbrechen. Die Ausnahme bilden hier lediglich eigens für diesen Zweck
entwickelte Crackmes, die mit legalen Freewaretools bearbeitet werden dürfen.

Warum crackt man nun also? Ist es allein das Wissen? Oder vielleicht doch
auch das gute Gefühl, das den Geist stärkt, das auch die Wirbelsäule des
derbsten Außenseiters "entkrümmt", sein Ego stärkt? Fragt Euch selber...
Ist es das "prickelnde" Erlebnis etwas verbotenes zu tun in einem Bereich in
dem Versuche ihn gesetzlich zu kontrollieren immer wieder scheitern, bzw.
nur kleine Erfolge zu sehen sind? Wollt Ihr durch Euer Bemühen den
Kapitalismus aufhalten? Indem ihr kleinen Sharewareprogrammierern das
Leben schwer macht und ihre 7,60€ Programm crackt? Seid Ihr Anhänger
der OpenSource-Bewegung und hofft durch Cracken dazu beitragen zu
können, das Microsoft, Symantec oder Macromedia es endlich einsehen und
es nur noch Windows, Norton Utilities und Fireworks zum Selberkompilieren
gibt?

Ich kann, will und muss diese Frage nicht beantworten, denn sie geht an
Euch, an diejenigen, die das hier jetzt lesen... Klärt dies mit Euch, bevor ihr
weitermacht, ansonsten wird euch diese Frage ewig verfolgen...

Cracken ist nicht einfaches Wissen, Cracken ist eine Philosophie, eine
eigene Welt, in der verschiedenste Menschen aufeinanderprallen. Gebt
jedoch den Gedanken auf, alle Menschen hätten die gleichen Chancen in
dieser Welt zu leben. Computer ziehen zwar in mehr und mehr Haushalte
ein, trotzdem sind die Anschaffungskosten dafür und die Internetkosten
nicht für alle Schichten gleichermaßen zu tragen. Vorbei ist es mir der
Chancengleichheit...

Wer wirklich einsteigt kann sich freuen auf ein riesiges Arsenal von
Literatur, auf den IRC und die Leute, die er dort treffen wird. Boards,
nochmehr Tutorials, Internetbekanntschaften, Artcrews, WebCrews,
0dayScene, dies alles sind Bereiche, in die man eintauchen könnte.

Und wieder der Hinweis: Wer es hier nicht mehr aushalten kann endlich das
erste Programm gecrax0rt zu haben, der ist falsch oder sollte nicht so viel
Kaffe trinken.

Trotz alledem möchte ich Euch nun etwas detaillierter zeigen, was für
Dinge ihr lernen/beherrschen werdet.


Zahlensysteme


Ist euch eigentlich bewusst, dass man ein Zahlensystem zu jeder beliebigen
Basis aufbauen könnte? "häääh?" ;) Wir rechnen im 10er-System, die Basis
unseres Zahlensystems ist 10. Wir könnten aber auch zur Basis 8, 16 oder
27 zählen oder zu einer anderen euch bekannten zahl. Alle Systeme, die mit
einer Basis >10 arbeiten benötigen jedoch zusätzliche Ziffernzeichen, da
wir im 10er System ja nur 10 verschiedene Ziffern kennen. Üblicherweise
bedient man sich daher noch der Buchstaben, angefangen beim "a".

Hexadezimales System:

Fast alle Zahlen, denen man beim Cracken begegnen wird sind hexadezimal
angegeben, also im Zahlensystem zur Basis 16. Dazu sollte man als erstes
vielleicht hexadezimal Zählen lernen:

1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,20.....


Wie ihr seht bedient man sich der ersten Buchtaben des Alphabetes, um die
fehlenden Ziffern darzustellen.

Binäres Zahlensystem:

Das hat wohl jeder schon mal gehört, jeder weiß, dass ein Computer auf
Binärebene arbeitet, da man mit 0 und 1 wunderbar einen Zustand
beschreiben kann, nämlich an/aus, bzw. Strom/kein Strom. Die Grundlage,
wie die kleinste Einheit eines Prozessors arbeitet. Eine "1" fast man als
gesetzes BIT auf, eine "0" als nichtgesetztes Bit.

Im binären System gibt es also nur die Ziffern 0 und 1. Zahlen sehen
beispiels weise so aus:

1011

Natürlich ist die jetzt nicht "Tausendundelf". Wir befinden uns im binären
System und muessen die Zahl ins uns vertraute 10er-System
transformieren, die geht folgendermaßen:

^ = "potenziert", "Hoch"

2^0 = 1
2^1 = 2
2^3 = 8
-----------
1+2+8 = 11

Alle gesetzen Bits des Binärwertes muessen von rechts mit den
entsprechenden 2er-Potenzen potenziert werden, beginnend bei 2^0, was
per Definition immer "1" ist. Anschließend werden die so gebildeten Werte
addiert und man erhält das Ergebnis im 10er-System. Möchte man eine
beliebige Zahl als Binärwert schreiben so kehr man den Vorgang um, man
probiert, welche höchste 2er-Potenz in die Zahl "passt". Beispiel "83"


83:

2^7 = 128, zu groß
2^6 = 64, passt

für die 2^6 schreiben wir eine "1" und rechnen 83-64, um festzustellen,
welchen Rest wir haben = 19

Dann suchen wir wieder nach der größten 2er-Potenz, die in den Rest
passt.

2^4 = 16, passt.

Doch jetzt Vorsicht, wir dürfen jetzt nicht gleich wieder eine "1" an die Zahl
schreiben, da wir ja sonst alle anderen 2er-Potenzen, die wir jetzt
ausgelassen haben außer Acht lassen würden.

Für jede ausgelassene 2er-Potenz muessen wir daher eine "0" schreiben,
und erst dann die "1" für 2^4.

Unsere Zahl sieht als bis jetzt so aus:

101

Aus 19-16 erhalten wir den Rest = 3

Auch hierzu suchen wir die größte passende 2er-Potenz = 2^1 = 2; Für
jede ausgelassene Potenz schreiben wir wieder ein nicht gesetztes Bit, also
eine "0", für die 2^1 anschließend eine "1".

101001

Den letzten Rest = 3-2 = 1 erhalten wir mit 2^0 = 1 und schreiben
abschließend noch ein gesetztes Bit für 2^0 an die Binärzahl.

Das Ergebnis lautet also: 1010011

Eine eindeutige Beobachtung ist, dass je größter die Basis des Systems ist,
desto kompakter kann man auch große Zahlen schreiben, wärend der
Binärcode auch bei geringen Werten schon viel "Platz verbraucht".

Glücklicherweise muss man die Umrechnungen von dezimal nach binär oder
von dezimal nach hexadezimal (natürlich geht das auch) nicht immer selber
berechnen. Sogar der Windows-Taschenrechner kann dieses für uns
übernehmen.
 
Zuletzt bearbeitet von einem Moderator:

Wotan

New member
Der Ascii-Zeichensatz:
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 :D

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 :D. 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
Quelle: http://cip-re.6x.to/
 
Zuletzt bearbeitet von einem Moderator:

PortJumper

New member
Hallo :)
Das Tut ist sehr hilfreich, jedoch hab ich jetzt ein Problem:
Ich "arbeite" über Windows und dafür finde ich kein SoftICE und der andere debugger will nicht. Außerdem brauche ich auch einen Dissasembler. Die Genannten Programme funktionieren nicht oder ich komme nicht an sie ran.
Währe nett, wenn jemand ein paar Programme zum Cracken kennt und sie hier auflisten würde :)
Danke schonmal im Vorraus

MfG
PJ
 

CDW

Moderator
Mitarbeiter
allgemein ist http://tuts4you.com/download.php
empfehlenswert. Auch was die aktuellen Tools (siehe Untersection "Tools") sowie deren Handhabung (siehe Untersection "Papers") angeht ;)

SICE wird afaik schon länger nicht mehr unterstützt. Und sofern man nicht mit Ring0 arbeitet, ist OllyDbg sowieso deutlich komfortabler.
Sonst gibt es da Syser oder WinDbg, die auf aktuelleren Windowsversionen Ring0 Debugging ermöglichen.

PS:
IDA braucht sowieso nicht extra erwähnt zu werden - allerdings wissen viele nicht, dass die älteren IDA Versionen kostenlos heruntergeladen werden können ;)
 

CDW

Moderator
Mitarbeiter
Quasi-Standard. Ist zwar kompliziert zu bedienen, allerdings macht die Analysefähigkeit alles wieder wett - alleine die vorhandenen Signaturen für Funktionsnamen der verschiedenen Bibliotheken (C Runtime, Delphi, C++ usw).

Auch wenn man IDA nicht wirklich beherrscht *hust*, kann man zumindest Teilergebnisse (wie z.B Labels/Funktionsnamen, Parameternamen, Kommentare dazu) exportieren lassen und im OllyDbg einsetzen, was das Debuggen deutlich angenehmer macht.
 

fox(fux)

New member
Hallo,
hätte da wieder eine Frage.
Es geht um Olli.
Wenn ich eine bestimmte .exe (nur bei dieser, also bei anderen wäre mir das nicht aufgefallen. Ich werde diese nun als 'a.exe' definieren. ^^).
Also wenn ich a.exe in ollydbg lade, und dann Einzelschritte oder alles debuggen will, dann crasht diese a.exe (a.exe funktioniert nicht mehr).
So, habe was von anti-olly-tricks usw. gelesen.
Jetzt habe ich eine modifizierte Olly-Version (Shadow-Version) geladen und in diese die a.exe geladen.
Dort kann ich problemlos debuggen. (Aber das Aussehen, usw. stört mich.)
Deshalb will ich diese a.exe auch im 'normalen' Olly laden können.
Was brauche ich dazu?? - Wie gehts?

mfg und vielen Dank - fox(fux)
 

CDW

Moderator
Mitarbeiter
Kommt auf die Anti-Debugtricks an ;).
Manche suchen nach bestimmten Strings wie "ollyDbg" oder "CPU" im Fenstertitel, nach bestimmten Exportfunktionen (OllyDbg bietet nämlich einige Funktionen an, die dann von Plugins genutzt werden können). Manche suchen einfach nur generisch nach einem Debugger.

Du kannst prinzipiel mehrere Dinge machen:
Zum einen lässt sich auch Shadows Ausssehen modifizieren (OllyDbg ist da recht gut konfigurierbar - Farbe, Schriftart usw und Shadow ist letzendlich nur eine Modifikation, die im wesentlichen auf Olly beruht und nur zusäztliche Plugins mitbringt, sowie ein vorkonfiguriertes Aussehen).

Zum anderen kannst Du auch die Plugins von Shadow auf Dein OllyDbg transferieren. Einfach in Ollys Ordner kopieren und schon sollte es klappen ;)
Dabei sollte man aber nicht vergessen, die einzelnen Optionen nach Olly Start zu aktivieren.

Allerdings mag ich persönlich Shadow nicht wirklich, da zu viele Plugins den Debugger nur unnötig langsammer werden lassen und zudem öfters für Abstürze sorgen.
Also solltest Du erstmal nur die Anti-Anti-Debug-Plugins von Shadow übernehmen:
das wären (je nach Version): Phant0m, OllyAdvanced, HideXYZ (die Plugins sollten sich bei Shadow im Pluginordner befinden. I.R ist es nur eine DLL, die man kopieren kann).

Grundsäztlich sollte man sich die Plugins selbst zusammenstellen (und im groben wissen, was die bewirken ;) ) da die Plugins wie gesagt auch eine Fehlerquelle sein können (ich habe schon einige male erlebt, dass Shadow bestimmte Exen partout nicht laden wollte und abstürtzte - mit dem normalen Olly ging es aber wunderbar).


Sauberer Weg:
Du schaust bei tuts4you Downloads nach OllyDbg Plugins,
http://tuts4you.com/download.php?list.9
speziell nach "Anti-Anti-Debug", z.B Phant0m, OllyAdvanced (patcht zudem einige Bugs), Olly Invisible, "Hide Debugger" usw. Ich empfehle erstmal entweder Phant0m oder Advanced.

Zudem kann man die Exe mit RDG oder PEID scannen und schauen, ob ein Protektor verwendet wird und dementsprechend bei BIW, tuts4you oder ARTeam nach Papers dazu suchen - da werden speziell die Antidebug Tricks behandelt und Gegenmaßnahmen erläutert sowie Plugins für Olly empfohlen.

Für "homemade" Protektions (also vom Programmierer selbst) reicht in 98% der Fälle eher OllyAdvanced.
Schön ist es troztdem, wenn man weiß, wie großteil der Anti-Debug Tricks funktionieren - dafür gibt es auch einige schöne Papers:
http://tuts4you.com/download.php?list.66
http://www.symantec.com/connect/articles/windows-anti-debug-reference


PS:
Speziell um zu testen, wie "unsichtbar" Dein Olly ist:
http://tuts4you.com/download.php?list.5
 

fox(fux)

New member
Wow. :thumb_up:
Spitzenantwort.
Aber ich habe mein Problem schon herausgefunden.
Es ist das Zusammenspiel zwischen OllyDBG 1.10 und Win 7 x64.
Diese 2 Dinge funktionieren nicht einwandfrei. ^^
Bin jetzt auf OllyDBG 2.0a umgestiegen... (Jetzt gehts einwandfrei...)
Vielleicht habe ja mehrere dieses Problem...

mfg fox(fux)
 

+++ATH0

Member of Honour
speziell nach "Anti-Anti-Debug", z.B Phant0m, OllyAdvanced (patcht zudem einige Bugs), Olly Invisible, "Hide Debugger" usw. Ich empfehle erstmal entweder Phant0m oder Advanced.

Wer diesbezüglich was aktuelles haben möchte, was auch gegen neuste Protektoren gefeit ist, sollte sich mal nach "StrongOD" umschauen.
 
  • Like
Reactions: CDW

fox(fux)

New member
Hallo,
Habe (wieder einmal ^^) ein Problem:
Wenn ich a.exe in OllyDBG (1.10 oder 2.1a) lade, und F9 drücke, dann läuft alles normal. Aber sobald ich steppe ( F7/F8 ) oder einen Breakpoint gesetzt habe, wird vor der eigentlichen Form der a.exe eine Fehlermeldung ausgegeben: "Entfernen Sie alle Viren und installieren Sie das Programm neu". (So in der Art). Habe ich aber eben keinen Brakepoint und steppe auch nicht, dann komme ich ohne diese Meldung auf die Form.
Ist dies auch ein Anti-Debug-Trick?

fox(fux)
 

CDW

Moderator
Mitarbeiter
Wenn es die Exe selbst ausgibt und die Meldung beim Nichtdebuggen eben nicht erscheint, bleiben nicht viele Optionen übrig ;)

Wie gesagt, scanne das Teil mit PEID, damit Du den Protector herausfindest.

Ansonsten wäre diese Erkennungsart folgendermaßen umsetzbar:
im Programm wird ein Extrathread gestartet, der regelmäßig den Abstand zwischen zwei Zeitständen bestimmt.
z.B
Code:
time1 = gettime_ms()
blub
noch mehr Code
time2 = gettime_ms()
if (time2 - time1) > 2000 then:
    debugger-detected!
(alternativ kann statt einer Timefunktion direkt RDTSC benutzt werden bzw. kein Thread, sondern die Zeitmessungen direkt im Hauptcode stehen - aber das sind nur Implementierungsdetails)

Denn sobald man einen Breakpoint setzt, bei dem Olly dann pausiert geschweige denn durch das Programm stept, werden alle Threads eingefroren und vom Programmcode nichts mehr ausgeführt.
So kann man davon ausgehen, wenn der Zeitabstand zu groß wird, dass das Programm in der Zeit nicht lief - ergo debuggt wurde.
 

fox(fux)

New member
Problem ;)

Danke für deine Hilfe.
GetSystemTimeAsFileName (oder so ähnlich) war es. ^^
Jetzt funktionierts auch mit dem Debuggen.
Aber:
Nächstes Problem:
Im Programm ruft sich das Programm selbst noch einmal auf. Die 1. Instanz wird dann geschlossen. Wie kann ich diese 2. Instanz weiter-debuggen??

//EDiT: Ok mein Anti-Debug-Patch hat dazu geführt, dass sich das Programm noch einmal startet.
Der Fehler liegt an mir.

Somit ist das Problem mit der 2. Instanz gelöst!

mfg fox(fux)
 
Zuletzt bearbeitet:

5830

Stammuser
Hallo, folgende Frage: ich versuche mich gerade an folgendem (eigentlich sehr simplen CrackMe) https://drive.google.com/file/d/0B3A-LZ3RoA_rS2VCRWVxSUdNbEk/view?usp=sharing
Das ganze ist ja recht simpel strukturiert:

  • Lese %d (per scanf) von stdin
  • Mache ein 0x11 faches ror (Soweit ich gelesen habe einen rechten Bitshift) auf EAX
  • Lade 0x554F0000 nach ebx
  • Vergleiche eax mit ebx
  • Wenn gleich: geschafft
Der logisch folgende Lösungsansatz wäre doch jetzt einen 0x11 fachen linken Bitshift auf 0x554F0000 anzuwenden, das (zu Dec umgewandelt) in das Programm einzugeben ? Das wäre dann 2931180961792d bzw. 0x2aa78000000 ? Wenn ich das jetzt aber ins Programm eingebe, funktioniert das ganze nicht, und EAX ist um Meilen danaben.

Einfach nur um es auszuprobieren, habe ich den gleichen Shift rechtsherum angewandt, und siehe da: es passt _fast_ EAX ist dann 0x54F00005. Wie ich davon jetzt zum Zielwert komme, erübrigt sich mir nicht so wirklich.

Wär nett, wenn mir jemand auf die Sprünge helfen könnte. :)

(Für alle, die das jetzt nicht in IDA/Olly/... laden wollen:
29w61lg.png
) Vielen Dank im Voraus :)
 
Oben