Bez zbytočných rečí a omáčok, účasť na riešení našej crackme zábavky absolútne prekonala všetky očakávania. V časoch, keď medzi programátormi dominuje Java, C# a podobné high-level jazyky, kedy sa veľká väčšina orientuje na webové aplikácie a databázy, nie je jednoduché nájsť ľudí, ktorých vedomosti siahajú ďalej ako „xor eax, eax“. Napriek tomu sa nám prihlásilo 50 ľudí, z ktorých, až na pár výnimiek, všetci poslali aspoň nejaké riešenie. Niektorí potrebovali na vyriešenie viac času, prípadne náš feedback (aby nezostali na zelenine), výsledky však celkovo vyzerajú dosť pozitívne.
Riešenia sa v podstate dali zhrnúť do 7 rôznych kategórií či stupňov – od žiadneho až po kompletné. Druhý stupeň (crackme1 - dump, strings, ďalšie nástroje; bez analýzy) predstavuje riešenia, v ktorých boli jednoducho použité všemožné nástroje a zozbierané rôzne dáta, na základe ktorých sa potom riešitelia snažili uhádnuť, čo naše crackme robí. Samozrejme, popri tom sme sa dočítali najrôznejšie konšpiračné teórie o tom, ako vypíname firewall, že crackme je vlastne backdoor, že ťahá „vírus“ z internetu (testovací súbor EICAR) atď. Nuž, treba nejako začať, aspoň naša úloha zaujala. Skutočná analýza či reverse-engineering nastáva až v ďalšom kroku, keď po dvoch ľuďoch, čo sa v polovici zasekli, prvú úlohu zvládli spolu dvanásti. Tým sme vyčerpali 60% nápadníkov a začíname sa hýbať vo vodách, kde už naozaj treba niečo vedieť. Veľmi populárna zastávka bola „zelenina“ (Nope not here! Now go and grow some vegetables.), kde nie všetkým hneď došlo, že sú v slepej uličke, resp. nevedeli sa dostať ďalej. Posledný trik sa podarilo prelomiť 12 riešiteľom, pričom v dvoch prípadoch tá finálna výmena informácií medzi http serverom a crackme nebola dotiahnutá úplne do konca, ale bolo už jasné, ako to celé skončí. Pravdupovediac, všetky čísla, ktoré tu spomíname, sú aspoň 3-krát vyššie ako sme čakali – „crackerská“ komunita ešte stále na Slovensku (a v Česku) nevymrela. ;)
| Výsledok | Počet riešiteľov |
| bez riešenia | 3 |
| crackme1 - dump, strings, ďalšie nástroje; bez analýzy | 13 |
| crackme1 - stage2 | 2 |
| crackme1 - komplet | 12 |
| crackme2 - stage2 aka "zelenina" | 8 |
| crackme2 - stage3, nedotiahnuté veci okolo http | 2 |
| crackme2 - komplet | 10 |
A teraz stručne k riešeniu. ESET crackme, ako už vieme, sa skladá z dvoch úloh. Prvá je voľne dostupná na adrese http://www.3537.sk a k druhej sa treba dopracovať správnym riešením tej prvej.
Na prvý pohľad je súbor zabalený. Po hlbšej analýze je možné zistiť, že ide o bežne dostupný packer UPX, ale názvy sekcií sú zmenené. Je ho teda potrebné pred analýzou rozbaliť.
Po rozbalení dostávame súbor, ktorý bol napísaný v jazyku Delphi. Obsahuje jednoduché anti-debug triky typu:
Dôležité je, aby konkrétne časti prebehli za určitý čas. O to sa stará kontrola výsledku funkcie GetTickCount.
Celkovo má úloha tri podúlohy a jednu bonusovú. Cieľom je prinútiť aplikáciu, aby vypísala všetky skryté texty na výstup. Tieto texty sú zašifrované použitím operácie XOR a odšifrujú sa iba v prípade, že sú splnené všetky podmienky.
Kód, ktorý sa stará o porovnanie, vyzerá takto:
004062CD > \66:813D FCA74>CMP WORD PTR DS:[40A7FC],833
004062D6 . 0F85 7F010000 JNZ ESET_cra.0040645B
004062DC . 66:833D FEA74>CMP WORD PTR DS:[40A7FE],64
004062E4 . 0F85 71010000 JNZ ESET_cra.0040645B
004062EA . 66:833D 02A84>CMP WORD PTR DS:[40A802],0C
004062F2 . 0F85 63010000 JNZ ESET_cra.0040645B
Po splnení prvej úlohy príde na rad aj overenie hodín. To vyzerá nasledovne:
0040635D 66:833D 04A8400>CMP WORD PTR DS:[40A804],5
00406365 0F85 F0000000 JNZ ESET_cra.0040645B
Opäť, ak sa splnila aj druhá podúloha, tak pribudnú nové podmienky.
004063D6 > \66:833D 06A84>CMP WORD PTR DS:[40A806],0B ; Je 11 minút?
004063DE . 75 7B JNZ SHORT ESET_cra.0040645B
004063E0 . 813D 0CA84000>CMP DWORD PTR DS:[40A80C],36EE80 ; Beží PC aspoň hodinu?
004063EA . 76 6F JBE SHORT ESET_cra.0040645B
Táto podúloha obsahuje aj odkaz na druhú úlohu:
http://www.3537.eu/download/n3x7qu357/crack_me_2.zip
Treba ju dešifrovať ručne aplikovaním kľúča a operácie xor. Dostávame text:
* Skryta uloha #0. Nedosiahnutelna/Nereferencovana uloha.
* Autor programu: Ing. Michal DIDA
* Navrhnute pre ESET, spol. s r. o.
* Ver. 1.0.[Build 1], 05. 03. 2009
Súbor je opäť zabalený použitím UPX, tento krát však nie je pozmenený, a tak je možné ho rozbaliť napríklad použitím UPX s parametrom d. Na prvý pohľad je program napísaný vo Visual C++, o čom svedčia napríklad použité runtime knižnice. V súbore je tiež možné nájsť aj ďalšie súbory, ktoré sa neskôr rozbaľujú.
Súbor používa okrem UPX aj ďalšiu, ktorá využíva veľa anti-debug trikov, ako napríklad:
Zaujímavosťou je, že celá ochrana proti krokovaniu končí skokom do VirtualFree.
Samotná úloha ma tri podúlohy, ktorých cieľom je uhádnuť dve heslá a naprogramovať jednoduchý webový server.
Keďže ide o bežnú Windowsovú aplikáciu, program obsahuje funkciu na obsluhu správ. V nej je možné nájsť heslo „Please let me play with second level“.
V obsluhe sa opäť nachádza heslo „This is so simple, way to simple.“, ktoré je uložené v Base64. Toto heslo je však zlé a aplikácia zahlási „Nope not here! Now go and grow some vegetables.“. Správna obsluha sa nachádza v druhom vlákne a správne heslo je uložené v šifrovanej podobe použitím RC4 algoritmu s kľúčom „magicvalue“. Po dešifrovaní dostávame správne heslo a to „Time for final level“.
Na vyriešenie tejto úlohy treba vedieť aj trochu programovať, pretože je potrebné spraviť HTTP server, ktorý dokáže odpovedať a prijímať príkazy. Aplikácia sa snaží pripojiť na adresu localhost:80, kam posiela náhodný kľúč, a ako odpoveď očakáva slovo „pass“ zašifrované opäť cez algoritmus RC4 s použitím hesla, ktoré poslal serveru. Ak je všetko v poriadku tak aplikácia odpovie správou „The game is over. How did you like this?“
Náročnosť druhej úlohy je vyššia a podrobný opis je veľmi zdĺhavý. Medzi riešiteľmi sa však, na naše potešenie, našiel jedinec, ktorý za nás túto úlohu vyčerpávajúco vyriešil a vypracoval podrobný tutoriál. Ten vám pomôže, ak sa vám doteraz nedarilo naše crackme prelúskať a poslúži aj ako študijný materiál problematiky RE. Tutoriál nájdete tu http://t4c.ic.cz/forum/index.php?topic=664.msg4775#msg4775 a naša vďaka patrí pr0p4g4nd4[SCF].