PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reverse-Engineering with a simple crackme



fred777
10.06.2009, 15:40
Jop, ich möchte auch den Free-Hack Nutzern mein Tutorial nicht vorenthalten, da ich denke, auch hier gibt es einige die mit Reversen anfangen möchten, aber nicht so recht wissen wo und wie.
Natürlich zeigt das nur ein Beispiel und es sind auch schon Grundkenntnisse nötig, sonst kommen 1000 Fragen.
Das Crackme gibt es hier:
http://crackmes.de/users/papanyquil/papanyquilkgm/


################################################## #####
# Crackme 1 Tutorial by fred777 #
################################################## #####

0x00 Intro
Ich fange hier mal mit einem ganz einfachen Crackme an und möchte euch so einen
kleinen Einstieg in die Reverser-Scene bieten.
Dafür werde ich auch wie gesagt ein ganz simples Crackme benutzen:
papanyquiLKGM.exe
In C++ geschrieben, fordert es ein Password und ein Usernamen, ist dieser falsch
gibt es einen Error, ansonsten ergibt es eine "true-Meldung".



0x01 Supplies:
Benötigen werdet ihr:
Olly-Debugger (andere gehen natürlich ebenfalls)
Assembler-Grundlagen (minimal)
Win32

################################################## ############

0x02 Knowledge:
Wir starten erstmal die Datei und werden wie schon gesagt mit einem Error aufgrund
der falsch eingegebenen Daten begrüßt. Eine Taste beendet den Spuk.
Nun laden wir die Datei mal in Olly und schauen uns mal um:

Mit Rechtsklick und "search for" "all referenced text strings" sehen wir alle im
Programm enthaltenen Strings, darunter auch die Fehlermeldung und die True-Meldung.
Mit einem Klick darauf gelangen wir im Code an die jeweilige Stelle:

004010B8 |. 85C0 TEST EAX,EAX ; kernel32.BaseThreadInitThunk
004010BA 74 14 JE SHORT papanyqu.004010D0
004010BC |. 68 D0514100 PUSH papanyqu.004151D0 ; ASCII "Incorrect password!"
004010C1 |. 68 E0B44100 PUSH papanyqu.0041B4E0
004010C6 |. E8 C5220000 CALL papanyqu.00403390
004010CB |. 83C4 08 ADD ESP,8
004010CE |. EB 12 JMP SHORT papanyqu.004010E2
004010D0 |> 68 E4514100 PUSH papanyqu.004151E4 ; ASCII "You did it!"
004010D5 |. 68 E0B44100 PUSH papanyqu.0041B4E0

Da die beiden Meldungen so nah bei einander liegen macht es uns das ganze noch einfacher.
Da dies kein Assmebler Tutorial ist werde ich nicht jeden Befehl erklären.
Was wir erkenne können ist, falls unsere Eingaben true sind, wird zu der Adresse 004010D0
gesprungen,welche die "richtige Meldung" mittels Push auf den Stack legt.

004010D0 |> 68 E4514100 PUSH papanyqu.004151E4 ; ASCII "You did it!"

Ansonsten verfolgt uns:

004010BC |. 68 D0514100 PUSH papanyqu.004151D0 ; ASCII "Incorrect password!"

################################################## ############

0x03 Cracking:
Was uns jetzt logisch vorkommt ist, wenn wir aus JE ein dauerhaften JMP machen und zu der Adresse
von "You did it!" springen, ohne das unsere Eingaben überprüft werden.

004010D0 |> 68 E4514100 PUSH papanyqu.004151E4 ; ASCII "You did it!"

Adresse: 004010D0
Befehl: JMP

Wir gehen also in folgende Zeile:
004010BA 74 14 JE SHORT papanyqu.004010D0
und verändern unseren JE mit der Leertaste zu:
JMP 004010D0

Danach könnt ihr es schon testen, egal was eingegeben wird, es wird immer dank JMP zu der
Adresse mit der Erfolgsmeldung gesprungen.
Der gesamte Code sähe dann so aus:

004010B8 |. 85C0 TEST EAX,EAX
004010BA EB 14 JMP SHORT papanyqu.004010D0
004010BC |. 68 D0514100 PUSH papanyqu.004151D0 ; ASCII "Incorrect password!"
004010C1 |. 68 E0B44100 PUSH papanyqu.0041B4E0
004010C6 |. E8 C5220000 CALL papanyqu.00403390
004010CB |. 83C4 08 ADD ESP,8
004010CE |. EB 12 JMP SHORT papanyqu.004010E2
004010D0 |> 68 E4514100 PUSH papanyqu.004151E4 ; ASCII "You did it!"
004010D5 |. 68 E0B44100 PUSH papanyqu.0041B4E0
004010DA |. E8 B1220000 CALL papanyqu.00403390



################################################## ############

0x04 Complete:
Demnächst werde ich noch ein paar solcher Papers machen mit ein paar Schwierigkeiten, sozusagen
Advaced, ich hoffe ihr habt das Prinzip verstanden.
fred777.de and greezZ to my friendsZ

PCFX
10.06.2009, 15:49
Yes man ! :D Werd ich mir sofort anschauen!

Kolabi
10.06.2009, 15:51
Vielleicht ist dieser Link auch noch nützlich :
www.tuts4you.com/download.php?list.17 (http://anonym.to/?http://www.tuts4you.com/download.php?list.17)

$_staX
10.06.2009, 15:59
Ich finde es etwas zu mager und wenn man ein Reverse Engineering Tut für Anfänger macht, sollte man vll. auch die wichtigsten Assembler Befehle etc. erklären.
Die Sprünge und wo Ergebnisse gespeichert werden (Zeroflag etc). Außerdem musst du bedenken, dass ein Newbie noch nie mit Olly gearbeitet hat und desshalb solltest du auch die wichtigsten Funktion von Olly erklären.
Ansonsten ganz nettes, gut strukturiertes Tutorial

Btw: Für jedem, der RE richtig erlernen will, kann ich nur das Empfehlen: http://www.tuts4you.com/download.php?list.17

fred777
10.06.2009, 16:22
Naja ich habe aber schon gesagt:

Olly-Debugger (andere gehen natürlich ebenfalls)
Assembler-Grundlagen (minimal)
Ich habe weder ein Tutorial über Assembler noch über Olly gemacht. Aber hast schon teilweise Recht. Es ist nur so, dass heutzutage wirklich für jedes Detail eine Beschreibung gesucht wird, kaum einer ist mehr in der Lage selber in extra Assembler Papers zu suchen, aber nun gut ;)
Danke für das Feedback und klar ist es lange nicht alles aus RE

Gargarensis
10.06.2009, 17:16
thx, cooles tut, wollte mich schon immer ma damit auseinander setzen,... und was olly angeht,... dess kennt ja nun eig. wirklich jeder, außerdem gibt es mein ich auch n tut hier im forum =) Suchfunktion FTW!