So ich schreibe jetzt ein TUT fürs 2. Crackme. Die Vorgehensweise ist eigentlich bei beiden fast gleich. Nur beim ersten muss man noch MEW mupen. Das wurde glaube ich schon genug behandelt.
So wie fängt man normalerweise an ?
Klar PEID und gucken was los is.
UPX, aha. Upx runterladen und mit "upx -d Crackme2.exe" unpacken.
Nochmal mit PEiD untersuchen, und gucken was der KryptoAnalyser sagt.
Oha. Alles voll

. Interessant ist CryptDecrypt. Anscheinend wird eine Ressource in der Exe Entschlüsselt. Das könnte wichtig sein.
So jetzt starten wir ollyShadow (spezielle Version von OllyDbg zu finden auf
www.blackheaf.de.vu) und laden es rein. Das normale OllyDbg sollte es auch tun.
Rechtsklick -> Search for -> All intermodular Calls.
Hmm, nicht viel zu sehen von irgendwelchen Calls die interessant sein könnten, wie zum Beispiel GetWindowTextA.
Was wir sehen ist aber : IsDebuggerPresent. Olly Shadow hat ein nettes Plugin das diesen Störenfried für uns erledigt. Alternativ patcht ihr die Stelle halt, das sollte kein grosses problem für euch darstellen.
So Was jetzt ? Wir erinnern uns. CryptDecrypt. Ja , und wir finden sogar den Call dahin unter All intermodular Calls.
ADVAPI32.CryptDecrypt
So da springen wir hin und sehen folgendes:
Code:
00404616 . 53 PUSH EBX
00404617 . 50 PUSH EAX
00404618 . 6A 00 PUSH 0
0040461A . 8BCA MOV ECX,EDX ; ntdll.KiFastSystemCallRet
0040461C . 83E1 03 AND ECX,3
0040461F . 6A 01 PUSH 1
00404621 . F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
00404623 . 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20]
00404626 . 6A 00 PUSH 0
00404628 . 51 PUSH ECX
00404629 . FF15 1CC04000 CALL DWORD PTR DS:[<&ADVAPI32.CryptDecry>; ADVAPI32.CryptDecrypt
0040462F . 85C0 TEST EAX,EAX
00404631 . 75 32 JNZ SHORT Crackme2.00404665
So, ich nehme an dass das was entschlüsselt wird in EAX gepusht wird und dann durch den Call gejagt wird. Also setzten wir ein Breakpoint an der Stelle "PUSH EAX".
Und jetzt F9. Jetzt steht in EAX die Adresse zu dem Zeugs was entschlüsselt werden soll. Im Register-Fenster machen wir Rechtsklick auf den Wert von EAX und dann "Follow in Dump". So ganz schön verwirrtes Zeug steht da jetzt.
Aber wir sind ja dabei es zu entschlüsseln
So jetz steppen wir über den Call hinweg mit F8 bis zu TEST EAX, EAX.
Und jetzt hat sich der Hex-DUMP verändert. Unten links müsste jetzt das entschlüsselte stehen. Und HUCH wir entdecken einen Auschnitt der uns doch verdammt bekannt vorkommt:
"This program cannot be run in Dos mode".
Wir haben gerade eine weitere Executable im tiefsten inneren des Programms entschlüsselt. Was wir jetzt machen ? Wir makieren diesen Wust von der Adresse 02E90650 (also da wo MZ steht) bis zu 02E97650. Das sind die letzten Werte die überhaupt noch im Dump stehen, danach kommt nur noch 00 00 00 00 usw.
An dieser Stelle macht sich OllyShadow wirklich bezahlt. Denn wir können unter Rechtsklick auf das was wir markiert haben -> Export to Table -> Pascal Style.
Wir haben jetzt ein Array of Byte, das wir in Delphi oder Pascal mit Blockwrite zu einer binären Datei schreiben.
Ich hab das so in Delphi gemacht :
Code:
...
const
Values: array [0..28687] of Byte = (
/////// RIESEN Dump ausgeschnitten ;)
)
procedure TForm1.Button1Click(Sender: TObject);
var
f:File;
begin
AssignFile(f,'Dump.exe');
ReWrite(f);
BlockWrite(f, Values,225);
CloseFile(f);
end;
So kompilieren, starten auf den Button klicken und jetzt haben wir die entschlüsselte exe aus dem Crackme.
Mal kurz starten und wir sehen, das eigentlich Crackme ist diese exe hier.
So mit Peid mal kurz gucken und *SCHLUCK* : C# .NET.
Also gut, Lutz Roeder's .NET Reflector mal kurz runtergeladen, gestartet und die exe damit mal angeguckt.
Es erscheint eine VoidMain-Node. +, dann auf die exe +, dann die Schwalbenklammern + . Wir sehen a,b,c....
Wir machen d auf und dann b(Object, EventArgs). Rechts sehen wir nun das Kernstück des Crackmes. Wir sehen ein Array of Char, dessen einzelne Zeichen zusammen den SHA1 Hasch bilden. Wenn der eingetippte String in die Textbox dem String entspricht, das in SHA1 gehasht worden ist, dann soll Well Done ausgegeben werden.
Wie gesagt. Ich hatte nie viel am Hut mit C# und IL-CODE Kram. Deswegen hat mir das gereicht und ich sehe es als gesolved an. Ich weiss ehrlich gsagt nicht wie man das patcht. Nun gut. Das wars dann auch. Sers.