Crackme 8 (Delphi) - pokročilý
UPOZORNĚNÍ: TENTO DOKUMENT SLOUŽÍ POUZE KE STUDIJNÍM ÚČELŮM. AUTOR NENESE ŽÁDNOU ZODPOVĚDNOST ZA JEHO ZNEUŽITÍ
Soubor CrackMe3.zip
CrackMe jako vždy nejprve spustíme a vyzkoušíme. Rozhodně bychom si měli všimnout, že
chyba je zobrazena pomocí MessageBoxu po kliknutí na tlačítko "Registrovat".
Protože víme, že se jedná o CrackMe napsané v Delpi, zkusíme požít rovnou DeDe jako
obvykle. Po načtení a Processingu zjistíme nemilou věc - DeDe nerozeznal žádné třídy, žádné
formáláře a tedy ani žádné prvky a kód. To může být způsobeno jen tím, že program není
napsán v Delphi, nebo jsou data šifrovaná. Budeme předpokládat, že je použit nějaký PE
šifrér nebo kompresor, což budeme muset potvrdit. Protože o PE šifrérech a kompresorech
víme dost, tak zjistíme jeho přítomnost manuálně v programu StudPE.
V programu StudPE otevřeme crackme a podíváme se do záložky Sections, kde vidíme, že
entry point není v první sekci, ale až v poslední se jménem ".lodus" - domněnka o PE šifréru /
kompresoru byla potvrzena. Nyní musíme exe nějakým způsobem dešifrovat. Pokud byste
chtěli napsat vlastní dešifrér, stačí pochopit dešifrační rutinu PE šifréru za použití debuggeru a
případně i disassembleru. Pokud se tuto rutinu rozhodnete prozkoumat, zjistíte, že exe bylo
zašifrováno PE šifrérem uvedeným v této práci.
Cracker však vždy místo vlastní dešifrační rutiny nejprve vyzkouší již napsané programy.
Pokud si vzpomenete na kapitolu o PE šifrérech, pak si jistě vzpomenete na zmíněnou
účinnou zbraň proti PE šifrérům - dumpery, ty jsou však zase používány až po tom, co selžou
univerzální dešifréry, které program dešifrují a upraví zpět do původního stavu (před
zašifrováním). Jeden univerzální dešifrér najdete i na přiloženém CD. Jedná se o program
QUnpack.
Spustíme QUnpack, tlačítkem Open file otevřeme naše crackme. Jako vstupní informaci je
nutné uvést adresu originálního entry pointu, ale QUnpack disponuje i algoritmem, který se
OEP pokusí najít (rozeznat). U textového pole OEP je tlačítko [>], klikneme na něj a hned by
se v něm měla objevit adresa rozeznaného entry pointu. Nyní můžeme kliknout na tlačítko
Unpack now! Pokud se na konci stavového okna objevil řádek "Target has been successfully
unpacked", pak crackme bylo v pořádku dešifrováno a přestavěno. Dešifrované crackme je
pojmenováno jako CrackMe3__.exe. Díky QUnpacku můžeme crackme načíst do DeDe a tam
začít bez problémů analyzovat.
V DeDe najdeme si proceduru kliknutí na tlačítko a podíváme se na kód:
| 0044F17A push dword ptr fs:[eax] | ;nastavení SEHu |
| 0044F17D mov fs:[eax], esp | ;nastavení SEHu |
| 0044F180 jmp 0044F186 | ;skok na konec callu (?!) |
| Praktická zkouška z odborných předmětů – Ochrana programů proti kopírování | |
| 68 | |
| 0044F182 call 6444F187 | |
| 0044F187 mov eax, [$00000018] | |
| ... | |
| 0044F1A3 loop -$18 | |
| 0044F1A5 add [eax], al | |
| 0044F1A7 add bl, ch | |
| 0044F1A9 fdiv qword ptr [eax+eax+$00] | |
| ... |