Seite 1 von 1
CrackMes
Verfasst: Mittwoch 22. Februar 2012, 19:56
von the!Angele
Erstmal hallo, das ist mein erster Beitrag.
Ich habe aber schon lange mitgelesen...
Ich habe für euch einige CrackMes geschrieben - also Programme, an denen ihr versuchen
könnt, den "Kopierschutz" zu umgehen.
Also eigentlich ist es kein Kopierschutz, sondern wenn ihr ein Programm normal startet, dann
wird eine Zahl von 0 bis 1000000 zufällig ausgewählt, und daraus ein Hashwert berechnet.
Während es am Anfang wirklich nur eine Hashfunktion ist, bei der man nur das Salt aus der
Datei fischen muss, wird es in den höheren Levels komplizierter.
Eure Aufgabe ist es nun, den Hashwert zu berechnen, den das Programm ausgeben würde,
wenn die Zufallszahl 1000002 währe. Wenn ihr den habt, postet ihn hier und ich schaue, ob er stimmt.
Ich gebe euch auch immer die Lösung für die Zahl 1000001.
Zu Demonstration des Prinzips hier mal Level 0:
Code: Alles auswählen
import hashlib
import random
def check_env(): #Wird natuerlich komplizierter
if random.randrange(1000000) > 1000000:
raise ValueError("Das Manipulieren des Interpretes ist verboten!")
if hashlib.md5("thisisnosalt"+"$"+"g").hexdigest()[:-8] != "839a2e3db552df314a5c563e":
raise ValueError("Das Manipulieren des Interpretes ist verboten!")
check_env()
n = random.randrange(1000000)
v = hashlib.md5("thisissalt$"+str(n)).hexdigest()[:8]
print "theAngeles Python CrackMe - Level 0"
print "Zufallswert: %s"%n
print "Hash: %s"%v
Das Verändern der Module hashlib und random ist verboten. Ansonsten könnt ihr eigentlich machen,
was ihr wollt.
Bitte postet nicht den Weg zur Lösung, sondern nur die Lösung selbst. So kann sich der nächste dann an der
1000003 versuchen.
Die anderen Levels gibt es unter
https://docs.google.com/open?id=0B6wm8U ... Y0YzJkOWEx
Viel Spaß und Erfolg!
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 01:21
von Dav1d
1000002 -> 14f66333
Irgendwie erschließt sich mir da der Sinn nicht, oder mache ich es falsch…
// Edit:
Level1:
1000002 -> 011a62de
Nett: "'/home/maximilian/Arbeitsfl\xc3\xa4che/CrackMes/Level1/script.py'" Was man da alles so finden kann …
//Edit:
Level2:
1000002 -> 3b4dd6c7
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 08:19
von /me
Dav1d hat geschrieben:1000002 -> 14f66333
Irgendwie erschließt sich mir da der Sinn nicht, oder mache ich es falsch…
Das geht mir genauso. Soll da etwas anderes herauskommen als
Code: Alles auswählen
hashlib.md5("thisissalt$"+str(1000002)).hexdigest()[:8]
?
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 11:52
von Dav1d
@/me das is nur der Anfang, es wird "schwerer".
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 16:19
von nomnom
Ich verstehe Level 1 nicht. Ist info.txt nicht falsch? Selbst bei verändertem random-Modul kommt da was anderes raus als vorgegeben …
Afaik:
Level 1:
1.000.003 → 543b3fce
Edit: Hast du eventuell Level 1 und Level 2 vertauscht?
Edit #2: Level 2:
1.000.003 → ad3f16a1
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 17:07
von the!Angele
@nomnom: Ja hast recht, sorry.
@Dav1d: gut, alles richtig!
Aber so vieles hat keinen Sinn...
Okay, ist etwa bei allen noch der Quellcode dabei?
Oder gibt es einen Decompiler, der den Quelltext perfekt wiederherstellt?
Als ich die Rätsel für mich selbst gelöst hatte, schlug ich mit mit dis.dis
und anderen unschönen Methoden rum.
Aber Level 3 hat noch keiner, oder?
OK, das könnte man auch als mehrere Level auf einmal betrachten.
Vielleich mach ich auch noch Level mit pyInstaller oder so, dann sollte es schwerer werden
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 17:17
von webspider
the!Angele hat geschrieben:Okay, ist etwa bei allen noch der Quellcode dabei?
Oder gibt es einen Decompiler, der den Quelltext perfekt wiederherstellt?
Als ich die Rätsel für mich selbst gelöst hatte, schlug ich mit mit dis.dis
und anderen unschönen Methoden rum.
Protip: Wer Rätsel erstellt, sollte idealerweise mehr Ahnung davon haben als die anvisierte Zielgruppe

Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 17:35
von the!Angele
OK, normalerweise brauch man sowas ja auch nicht, oder?
Die meiste Python-Software ist doch eh OSS.
Zugegeben, eine Liste mit allen Konstanten in der Datei kann schon viel wert sein.
IMHO habe ich / hat mein Betriebssystem die ganzen Sourcen mit eingepackt (die Dateien mit der Tilde).
Ich habe mir wohl selbst ein Rätsel getellt

Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 18:15
von nomnom
the!Angele hat geschrieben:IMHO habe ich / hat mein Betriebssystem die ganzen Sourcen mit eingepackt (die Dateien mit der Tilde).
Nein, der Sourcecode ist nicht dabei.
Waren meine Ergebnisse denn auch richtig?
Ich habe mich übrigens nicht mit `dis` oder einem Decompiler rumgeschlagen … Habe einen anderen Weg eingeschlagen.

Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 19:14
von the!Angele
Ja die waren richtig!
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 23:10
von Dav1d
Auf Level 3 habe ich keine Lust, das ist mir zu viel Arbeit, evt. wenn mir mal langweilig ist

.
Erst bei Level3 habe ich meinen/den Decompiler ausgepackt

,
http://nedbatchelder.com/blog/200804/th ... files.html hat mir geholfen. Std.-Lib patchen (wie nomnom?) wollte ich nicht, weil "the!Angele" ja auch meintest man dürfe das nicht.
Ach
Oder gibt es einen Decompiler, der den Quelltext perfekt wiederherstellt?
Ja den gibt es.
Interessant wäre es, ob es einen Python-Debugger gibt, der .pyc debuggen kann (gibts wahrscheinlich, ist mir nur nicht bekannt), normalerweise geht man ja an CrackMes mit gdb oder Olly ran.
Re: CrackMes
Verfasst: Donnerstag 23. Februar 2012, 23:33
von nomnom
Dav1d hat geschrieben:Std.-Lib patchen (wie nomnom?) wollte ich nicht, weil "the!Angele" ja auch meintest man dürfe das nicht.
Ja, ich habe die Standardbibliothek „gepatchet“. Ich dachte mir, wenn man den Schutz umgehen soll (ValueError), dann umgeh’ ich ihn eben.

Und den Interpreter hab ich ja nicht verändert, wie es auch im Code von Level 0 steht …
Re: CrackMes
Verfasst: Freitag 24. Februar 2012, 16:30
von the!Angele
@nomnom: Da hab ich mich halt doof ausgerückt...
Naja, so viel leichter hast du es dir damit auch nicht gemacht.
Hauptsächlich ging es mir darum, das keiner
schreibt
Zu Level 3:
Es gibt einen einfacheren Weg!
Wenn man drauf gekommen ist, muss man nur eine Stufe entpacken!
Also überladet nicht eure Zeitvorgaben!
Re: CrackMes
Verfasst: Freitag 24. Februar 2012, 17:44
von nomnom
theAngeles Python CrackMe - Level 3
Zufallswert: 1000002
Starte berechnungen (kann kurz dauern)
Stufe 1
Stufe 2
Stufe 3
Stufe 4
Hash: 7a9da4e7

Und das ganze mit 10 Zeilen (Leerzeilen nicht inbegriffen) mit höchstens 31 Zeichen … Ich finde, die Lösung ist effizient genug.
Re: CrackMes
Verfasst: Samstag 25. Februar 2012, 14:38
von the!Angele
Richtig!
Und nach dem posten des letzten Beitrags ist mir auch eingefallen,
wie man es löst ohne eine einzige Stufe zu entpacken.
Das nächste Level wird wahrscheinlich etwas ganz anderes....
Ich arbeite aber noch dran.