Cracking4neWBies - Lekce č.2

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: DjH
Datum: 14.8.2007
Hodnocení/Hlasovalo: 1.22/9

Cracking pro začátečníky...podruhé :-)

Cracking4neWBies

Lekce č.2

Serial fishing v CrackMe


Ani neuplynulo čtvrt dne a je tu druhý díl :-)... Ovšem pořád platí, že je to jen pro studijní účely...
Zůstaneme u stejného CMe, ale nyní zkusíme vyluštit s/n. Natáhneme si tedy ORiGiNÁLNí soubor CrackMe.exe (který je ke stáhnutí v první lekci) do Olly a nastavíme BreakPoint (dále jen BP) na adresu 00401167. Zde totiž začíná výpočet.

…… 00401167 . 33C0 XOR EAX, EAX //EAX=0
00401169 . 33C9 XOR ECX, ECX //ECX=0
0040116B . A1 D3304000 MOV EAX, DWORD PTR DS:[4030D3] //do EAX dej to, co je v EDITu
00401170 . B9 5A415244 MOV ECX, 4452415A //ECX=4452415Ah
00401175 . 33C1 XOR EAX, ECX //Vyxoruj EAX s ECX
00401177 . 33D2 XOR EDX, EDX //vynuluj EDX
00401179 . BB 77770100 MOV EBX, 17777 //EBX=17777h
0040117E . F7F3 DIV EBX //vyděl EBX
00401180 . 35 86140000 XOR EAX, 1486 //Vyxoruj EAX s 1486h
00401185 . /75 1E JNZ SHORT crackme_.004011A5 //Jestli není s/n správný skoč…
00401187 . |6A 00 PUSH 0
00401189 . |68 CC304000 PUSH crackme_.004030CC
0040118E . |68 6A304000 PUSH crackme_.0040306A

………
Cílem instrukce XOR EAX, 1486 je, aby v EAX bylo také 1486h, a pokud se XORují dvě stejné hodnoty, tak se nastaví ZF, protože v EAX bude 0. Takže celý fór je v početní operaci, kterou by měl zvládnout žák 8. Třídy(já:-)).
Spustíme si tedy kalkulačku a přepneme se do Hex. Zadáme 1486 a vynásobíme číslem 17777 (vše v hex). Teď dáme XOR a číslo 4452415A a rovná se. Vyšlo nám 5A4B9510. Což je naše správné s/n. Číslo ale má být string, a tak tedy si spustíme nějaký hexeditor. Počítače x86 jsou Little-Endian, hex.č. se musí číst pozadu:

+•KZ - zajímavý výsledek… ale je správný. Podle návodu na Programujte.com se píše toto:
Takže pokud vyxoruji to, co mi vzniklo po XORu v EAX s ECX, tak získám původní EAX, tedy správné registrační číslo. Výsledkem této operace je hodnota 5A494C42h, ale heslem musí být nějaký řetězec, a proto převedem toto číslo na znaky ASCII.
Poněvadž počítače x86 jsou little-endian, tak musíme číst text odzadu.
Tím řetězcem je slovo „BLIZ“. Teď jděte do nabídky „Debug“ a zvolte volbu „Restart“, nastavte breakpoint na adresu 00401167 a spusťte program (F9). Napište správný klíč a krokujte program klávesou F7 (pokud budete chtít přeskakovat instrukce CALL, tak potom krokujte klávesou F8). Koukejte se přitom na výpočet a kód v debuggeru a uvidíte, že to vše do sebe zapadá a nakonec se vám zobrazí věta „Registrace byla úspěšně dokončena“.

5A494C42h – zajímalo by mě, jak k tomu mám dojít, když nevím jaký výsledek má být v EDX (zbytek po DIV EBX)…zde je pár komentářů přímo ze stránky:

1. Pri konzulácii tohto článku ma kamarát Master upozornil i na ďalšie riešenie. A to 0x5A4B9510, až na tie prvé dva znaky... :) //což na to jsme došli taky…



2. OK, takže úprava... možností je ďaleko viacej a to kvôli deleniu, resp. zvyšku po delení, ktorý sa zahadzuje.

Interval je <1E19D44A, 1E1B4BC0> a ľubovolné číslo z tohto intervalu stačí xornúť hodnotou 4452415A a dostávame riešenie. Otázkou je ASCII reprezentácia znakov, čiže kvôli ľahšiemu zadávaniu treba filtrovať tlačiteľné znaky. //Dlouho jsem přemýšlel jak k tomu došel, ale už mě to napadlo:
1E19D44A – toto je vlastně 1486h * 17777h…to co jsme vlastně taky vypočítali…
1E1B4BC0 – toto je 1E19D44A + 17776h, takový může být vlastně maximální zbytek v EDX, který s hodnotou 1486h v EAX nemá nic společného. Tudíž autor s CMe trochu ujel…a zajímalo by mě, kde to číslo vzal. Když ten výsledek +•KZ dám do schránky (Ctrl+C) a pak vložím do Editu v CMe, vypíše nám to hlášku o úspěchu. Když napíšeme BLIZ taky to vypíše úspěch, protože zbytek v EDX se nepočítá, ale i přesto je v EAX 1486.

Je tam ale i tento komentář:

3. Hoy hezky...jen nejak nechapu jak kde si vzal ten zbytek z EDX? jak mam vedet jakej je kdyz nevim jaky jsou spravny hodnoty...? moh by mi nekdo osvetlit jak k tomu dojit? diky moc

Vlastně jsme si na to odpověděli, zbytek si autor někde přičaroval.

Co bude příště? Ve třetím dílu se můžete těšit na další pokoření dalšího CMečka :-), zatím zdarec...