Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

Erste CrackMes

Diskussion: Erste CrackMes im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige Hi @ All, ein Freund von mir ist Interessierter in Programmierung, da habe ich ihm mal gebeten ein paar ...

Antwort
Alt 29.10.10, 21:13   #1 (permalink)
 
Registriert seit: 17.09.10
sn00p2501 Leistung: Facit NTK
Likes: 0
Standard Erste CrackMes

Anzeige

Hi @ All,

ein Freund von mir ist Interessierter in Programmierung,
da habe ich ihm mal gebeten ein paar CrackMes zu basteln.
Er hat darauf auch ein paar gemacht mit unterschiedlichen Compilern, diese will ich euch natürlich nicht vor enthalten, natürlich sind sie sehr einfach, da ersten seine ersten sind, aber dennoch bitte:

PS:
Wäre nett wenn mir jemand sagen könnte wie man den ersten CrackMe patched, da der wichtige jump ausserhalb ist...

Angehängte Dateien
Dateityp: zip CrackMe1.zip (430,3 KB, 101x aufgerufen)
Dateityp: zip CrackMe2.zip (126,9 KB, 32x aufgerufen)
sn00p2501 ist offline   Mit Zitat antworten
Alt 30.10.10, 03:56   #2 (permalink)
Member of Honour
 
Benutzerbild von +++ATH0
 
Registriert seit: 02.04.05
+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3
Likes: 76
Standard

Hint/Patch   
Ich beantworte nur mal deine Frage, da ich denke, dass du den Rest alleine schaffst.

Zitat:
PS:
Wäre nett wenn mir jemand sagen könnte wie man den ersten CrackMe patched, da der wichtige jump ausserhalb ist...
Die Instruktionen der Hauptschleife des Programms sind zwar zum Zeitpunkt des Ausführens außerhalb. Aber die können ja nicht einfach "aus dem nichts" kommen.
Tatsächlich befindet sich der Code (und auch Konstanten übrigens) zuvor in der ".data" Section der Executable und wird von da erst herauskopiert in neu reserviertem Speicher.
Dort können wir natürlich erst hinterher patchen. Also zum Zeitpunkt des Ausführens.
Aber in der ".data" Section können wir schon vorher patchen.

Den Jump hast du sicher schon gefunden. In der ".data" Section findet man den dann auch:

Code:
10128190   21C0                        AND EAX,EAX
10128192   0F84 FCFFFFFF               JE 10128194
Vorsicht. Noch ist der Jump ungültig. (Die Instruktion jumpt "in sich selbst hinein")
Das Sprungziel wird erst hinterher korrigiert. Also nachdem der unkorrigierte Code von ".data" zu dem reservierten Speicherbereich kopiert wird.

Zum patchen gibt es nun zwei Möglichkeiten. Die eine ist einfach und langweilig. Dort patcht man einfach die Instruktionen vor dem Sprung so, dass immer das Z-Flag gelöscht ist.
Die zweite ist etwas interessanter. (Weil man noch etwas lernt. ;) )

Den Sprung selbst kann man nicht einfach noppen. Da an die Stelle (Sprungziel wird korrigiert) später noch geschrieben wird, leider auch über unsere Nops.

Wir müssen also etwas intelligenter patchen. Wir wollen nicht, dass gesprungen wird.

Wir sehen, dass zuvor ein AND EAX, EAX ausgführt wird.
Wir schauen nach, welche Flags AND mit einem DEFINIERTEN konstanten Wert immer gleich besetzt.
Wir sehen hier (vorletzte Spalte):
http://ref.x86asm.net/geek.html#x21

Dass das Overflow-Flag wird IMMER gelöscht, also auf Null gesetzt wird, nach JEDER AND Operation.

Wenn wir also den Jump auf ein JO (Jump if Overflow) ändern, dann wird unter keinen Umständen gesprungen.

Um das nun zu ändern, können wir leider nicht OllyDbgs Assemble-Funktion benutzen, da er für den Sprung eine andere Kodierung nimmt, die nicht die gleiche Instruktionsgröße hat. (Es gibt mehrere Kodierungen)
Das würde wieder schiefghen, wenn das Sprungziel im Nachhinein korrigiert wird.

Die Sprunginstruktion ist diesem Falle eine Two-Opcode Instruktion mit dem prefix 0x0F.

Wir schauen also in diese Tabelle und suchen JO.
http://sandpile.org/ia32/opc_2.htm

Und sehen, dass wir 0F84 in 0F80 ändern müssen. Und schon wird nie gesprungen, da nach einem AND das Overflow-Flag garantiert gelöscht ist.

Wie gesagt. Es geht noch einfacher. Aber nur mal als Anstoß für einen etwas anderen Ansatz. :wink:
Angehängte Dateien
Dateityp: zip CrackMe_patched.zip (430,3 KB, 13x aufgerufen)

Geändert von +++ATH0 (30.10.10 um 04:41 Uhr)
+++ATH0 ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 30.10.10, 10:53   #3 (permalink)
Themenstarter
 
Registriert seit: 17.09.10
sn00p2501 Leistung: Facit NTK
Likes: 0
Standard

Vielen herzlichsten Dank für deine ausführliche Hilfe.
Das war u.a. ein Teil, den ich bisher nicht durch Tutorials mir aneignen konnte!

Werde nächste Woche evtl. noch mehr uppen, wenn er bereits welche fertig hat, u.a. auch welche mit AutoIT.
Habe sie mir mal angeschaut, verstehe in denen aber nur Bahnhof...

PS: Netter Avatar
sn00p2501 ist offline   Mit Zitat antworten
Alt 01.11.10, 10:17   #4 (permalink)
Themenstarter
 
Registriert seit: 17.09.10
sn00p2501 Leistung: Facit NTK
Likes: 0
Standard

Wie versprochen habe ich hier noch ein Paar weitere!
Wobei ich schon wieder das gleiche Problem habe wie beim ersten CrackMe das mit Blitz3D compiliert wurde.
Finde zwar den jump im Debugger, aber komischerweise nicht im Hex

Und mit dem 2. hier, das mit AutoIT gemacht ist, sehe ich mal gar nicht durch, wenn mir jemand da auf die Sprünge helfen könnte, wäre ich sehr dankbar!

CrackMe 3:
http://www22.zippyshare.com/v/61757347/file.html

CrackMe 4:
http://www22.zippyshare.com/v/40127169/file.html

CrackMe 5:
http://www4.zippyshare.com/v/68570591/file.html

EDIT: sorry für den externen Hoster, aber habe leider ja schon durch die ersten beiden Anhänge das Limit fast erreicht oO

Geändert von sn00p2501 (02.11.10 um 09:33 Uhr)
sn00p2501 ist offline   Mit Zitat antworten
Alt 16.12.10, 01:25   #5 (permalink)
 
Registriert seit: 15.12.10
Nerdworld Leistung: Facit NTK
Nerdworld eine Nachricht über ICQ schicken Nerdworld eine Nachricht über Skype™ schicken
Likes: 0
Standard

Zitat:
Zitat von sn00p2501 Beitrag anzeigen
Wie versprochen habe ich hier noch ein Paar weitere!
Wobei ich schon wieder das gleiche Problem habe wie beim ersten CrackMe das mit Blitz3D compiliert wurde.
Finde zwar den jump im Debugger, aber komischerweise nicht im Hex

Und mit dem 2. hier, das mit AutoIT gemacht ist, sehe ich mal gar nicht durch, wenn mir jemand da auf die Sprünge helfen könnte, wäre ich sehr dankbar!

CrackMe 3:
http://www22.zippyshare.com/v/61757347/file.html

CrackMe 4:
http://www22.zippyshare.com/v/40127169/file.html

CrackMe 5:
http://www4.zippyshare.com/v/68570591/file.html

EDIT: sorry für den externen Hoster, aber habe leider ja schon durch die ersten beiden Anhänge das Limit fast erreicht oO

Au3 ist die Programmiersprache, die ich so ziemlich am besten kann - auch wenns mehr oder weniger als "schwache" Sprache gilt, hat die an sich zieeemlich viel Power.

AutoIt lässt sich aber witzigerweise komplett dekompilieren.

Source   
$INI = @WindowsDir & "\data.ini"
If Not FileExists($INI) Then
IniWrite($INI, "account", "user", _STRINGENCRYPT(1, "normaluser", "abc123", 5))
IniWrite($INI, "account", "pass", _STRINGENCRYPT(1, "system", "abc123", 5))
EndIf
$ORIGUSER = _STRINGENCRYPT(0, IniRead($INI, "account", "user", ""), "abc123", 5)
$ORIGPASS = _STRINGENCRYPT(0, IniRead($INI, "account", "pass", ""), "abc123", 5)
$INPUT1 = GUICtrlCreateInput("", 120, 144, 105, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_PASSWORD))
#region ### START Koda GUI section ### Form=
$FORM1 = GUICreate("CrackMe !!!", 313, 124, 277, 173)
$INPUT1 = GUICtrlCreateInput("", 128, 18, 153, 21)
$INPUT2 = GUICtrlCreateInput("", 128, 50, 153, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_PASSWORD))
$LABEL1 = GUICtrlCreateLabel("Erkennungscode:", 16, 18, 108, 23)
$LABEL2 = GUICtrlCreateLabel("Passwort:", 56, 50, 64, 23)
$LOGIN = GUICtrlCreateButton("Anmelden", 32, 90, 83, 25, 0)
$CANCEL = GUICtrlCreateButton("Abbrechen ", 160, 90, 113, 25, 0)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
$NMSG = GUIGetMsg()
Switch $NMSG
Case $GUI_EVENT_CLOSE
Exit
Case $LOGIN
If GUICtrlRead($INPUT2) = $ORIGPASS And GUICtrlRead($INPUT1) = $ORIGUSER Then
MsgBox(64, "Passwort korrekt", "Sie haben sich erfolgreich eingeloggt")
Exit
Else
MsgBox(48, "Passwort inkorrekt", "Sie haben das Passwort oder den Benutzernamen falsch eingegeben")
EndIf
Case $CANCEL
MsgBox(48, "Anmeldung Abbgebrochen", "Sie haben die Anmeldung abbgebrochen.", 3)
Exit
EndSwitch
WEnd


Und bei dem Blitz3D-Crackme (in der Sprache programmiere ich momentan auch sehr viel) habe ich das Passwort "aus versehen" erraten, beim erstem Versuch.


Edit: Das ist jetzt zwar nicht auf die herkömmliche Art und Weise gecracked, aber das macht einen Hacker ja erst aus, nach alternativen Wegen zu forschen.

Geändert von Nerdworld (16.12.10 um 01:27 Uhr)
Nerdworld ist offline   Mit Zitat antworten
Alt 02.07.11, 16:14   #6 (permalink)
 
Registriert seit: 28.03.10
aldituete Leistung: Facit NTK
Likes: 0
Standard Hab's raus!

Ich hab' das CrackMe auf eine ganz andere Art gelöst

Geniale Lösung   
Durch Bruteforce habe ich bei meiner 2. Eingabe das PW "test" herausgekriegt. Es handelte sich dabei um manuelles Brute Forcing ;)
aldituete ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » Erste CrackMes
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61