Serial-Unpacking

Hi!

Aufgrund dieses Threads ist mir eine Idee gekommen.

Ich hab ein Crackme für euch gebastelt, das (wenn es gecrackt ist) dazu in der Lage ist, jede Minute die geöffneten Fenster zu spichern und sie, wenn es gestartet wird, wiederherzustellen. Ich war allerdings zu faul, das Programm die Seriennummer speichern zu lassen, deshalb wird bei jedem Start neu danach gefragt.

Die Aufgabe ist also, die Serial-Abfrage herauszupatchen und das Programm so zu ändern, dass es minimiert startet. Das Programm kann man dann in den Autostart-Ordner packen (oder sich einfach freuen, dass man das Crackme geknackt hat).

Geschrieben habe ich das Ganze mit dem masm, also sollte der Code nicht allzu schwer zu versehen sein.

Das Crackme verlangt einen Key, der benutzt wird, um das Hauptprogramm zu entschlüsseln. Natürlich habe ich keine starke Verschlüsselung benutzt, damit es nicht zu schwierig wird ;-)

Viel Spaß!
 
Hi,

Ich bin grade am Knobeln bei deinem Serial Unpacking Crackme...
Kann es sein das es einen Fehler enthält?

Code:
PUSH DWORD PTR DS:[403290]		/lParam
PUSH EDI				|wParam // <<---- EDI ist immer 0
PUSH 0D				|Message = WM_GETTEXT
PUSH 3EF				|ControlID = 3EF (1007.)
PUSH [ARG.1]			|hWnd
CALL <JMP.&user32.SendDlgItemMessageA> 	\SendDlgItemMessageA

Da EDI immer 0 ist (und ich nicht ersehen kann ob es irgentwo außerhalb des codes geändert wird)
wird das darauffolgende CMP EAX, 13 immer failen und die Meldung mit "falscher key" erscheint..

Weiterhin habe ich bisher den ersten und dritten Block der Serial aber auf den zweiten und vierten gibt es keinen Hinweis (Vielleicht habe ich ihn noch nicht gefunden :-) )
Ich knobel weiter bis dann..
 
Das mit mem "push edi" ist wirklich merkwürdig. Ich hab's wohl irgendwie per copy and paste da reingebaut. Beim Debugging ist mir das leider nicht aufgefallen, da edi bei mir an dieser Stelle nie 0 war. Ich habe oben die gefixte Version hochgeladen.


Es gibt tatsächlich keinen Hinweis, bis auf den bereits entschlüsselten Code ;).

Ihr könntet euch zum Beispiel anschauen, was der MASM typischerweise vor die IAT schreibt, und euch außerdem überlegen, was die Einträge in der IAT für den Code bedeuten.
 
Okey,


ich habe das CrackMe mit ein bisschen Hilfe von einem Bekannten gelöst

Es gibt viele mögliche Keys..

//creditz to kynox .. ;-)

gswc-ad{i-````-aaaa
kyno-x***-ljyl-x/0"

War echt ein nettes CrackMe, bisschen schwerer die zweite Hälfte des Keys rauszufinden aber war machbar.

Achja im Anhang eine gepatchte Exe die einfach ohne die Keyeingabe startet.
Vielleicht hab ich ja nochmal Lust die Exe so umzuschreiben das sie minimiert startet :-)

grüße DerXenon.
 
Gratulation, du bist der erste, der das Crackme gecrackt hat! ;)

Das Programm so minimiert zu starten, sodass es im Tray landet ist auch nicht ganz trivial. Wenn du noch Lust hast, dann kannst du dich ja nochmal daran versuchen. (oder jemand anderes) :)
 
Danke...

Ich hab noch ein bisschen Zeit gefunden das Programm so umzuschreiben, dass es minimiert startet.
Der Code ist ein bisschen unsauber geworden, aber hauptsache es funktioniert :-)

PS: Im Anhang befinden sich 2 Exe'n, eines ist das Programm einfach ohne Keyaufforderung und das zweite startet im Tray.
 
darf ich mal fragen womit das gecoded ist?
wie schaffst du es das proggi unter 10 kb zu kriegen?
wenn ich etwas in c++ compeliere dann isses meistens n halben mb groß
 
@DerXenon: Das ging schneller als erwartet! ;) Ich schau's mir an, wenn ich mal wieder Windows starte.

Original von Kaddy
darf ich mal fragen womit das gecoded ist?
wie schaffst du es das proggi unter 10 kb zu kriegen?
wenn ich etwas in c++ compeliere dann isses meistens n halben mb groß

Wie ich oben schon geschrieben habe, mit dem MASM, also in Assembler. Da ich allerdings keinerlei Komprimierungs-Tricks eingebaut habe ist die Exe immerhin etwa 3 kb groß.

Was hast du eigentlich für einen merkwürdigen C++-Compiler? Die Executables von meinem Compiler (der/die GCC) sind für einfache Programme nur 15-20 kb groß!

Obwohl, lass mich raten... Benutzt du Microsofts VisualC++-Compiler? Der baut (so weit ich weiß) wirklich eine Menge überflüssigen Code in sämtliche Executables. :P
 
OT:
Da ich allerdings keinerlei Komprimierungs-Tricks eingebaut habe ist die Exe immerhin etwa 3 kb groß.
versuche mal beim Linken folgende Optionen zu nutzen:
Code:
ml /c /coff /nologo my.asm
Link /SUBSYSTEM:WINDOWS /FILEALIGN:512 /MERGE:.data=.text /section:.text,RWE  my.asm
wobei man dann das Merge für alle andere Sections wiederholt.

BTW: Mein GCC Compiler
Code:
g++ --v
Using built-in specs.
Target: i686-pc-mingw32
Configured with: /usr/local/src/gcc/configure --prefix=/home/Marco/Desktop/compi
le-win-win/gcc-XYZXYZ-win --with-sysroot=/home/Marco/Desktop/compile-win-win/gcc
-XYZXYZ-win/sys-root --build=i686-pc-linux-gnu --host=i686-pc-mingw32 --target=i
686-pc-mingw32 --enable-languages=c,c++,java --enable-libgcj --disable-shared --
with-gnu-as --with-gnu-ld --disable-nls --disable-debug --disable-checking --ena
ble-threads=win32 --disable-win32-registry --enable-java-gc=boehm --enable-java-
maintainer-mode --with-gmp=/home/Marco/Desktop/compile-win-win/gmp-out --with-mp
fr=/home/Marco/Desktop/compile-win-win/mpfr-out --enable-sjlj-exceptions --with-
build-sysroot=/home/Marco/Desktop/compile-win-win/gcc-XYZXYZ-win/sys-root --with
-gcj=i686-pc-mingw32-gcj
Thread model: win32
gcc version 4.3.0 20070222 (experimental)
generiert mit Standardsettings bei mir auch ein 4.5MB große HelloWorld.exe :)
 
Zurück
Oben