UPX Protector 1
0040100C 85C0 TEST EAX,EA
0040100E . 74 1E JE SHORT damn_con.0040102E 00401010 . A3 95234000 MOV DWORD PTR DS:[402395],EAX 00401015 . 8307 01 ADD DWORD PTR DS:[EDI],1 00401018 . 33C0 XOR EAX,EAX
0040101A . 50 PUSH EAX ; /lParam => NULL 0040101B . 68 45104000 PUSH damn_con.00401045
00401020 . 50 PUSH EAX ; |hOwner => NULL 00401021 . 6A 73 PUSH 73 ; |pTemplate = 73 00401023 . FF35 95234000 PUSH DWORD PTR DS:[402395]
00401029 . E8 B3030000 CALL damn_con.004013E1
0040102E > 6A 00 PUSH 0 ; /ExitCode = 0 00401030 . E8 F4030000 CALL damn_con.00401429 ; \ExitProcess
Sta sam vam rekao na OEPu smo. Sada preostaje samo da izvrshimo dump programa i to je to. Idemo na Plugins -> OllyDump -> Dump debuged proccess. Default podesavanja su OK pritisnite Dump i snimite fajl. Zatvorite Olly i probajte da startujete novi fajl i on radi !!!!!! Ok uspeli smo. Da bi smo proverili da li je sve OK otvorimo dumpovan fajl u Olly-u. Idemo na Desno dugme -> Search for -> All referenced strings. Vidimo ovo:
Text strings referenced in dmp:CODE
Address Disassembly Text string
00401000 PUSH 0 (Initial CPU selection) 0040108D PUSH dmp.00402023 ASCII "-=[ ABOUT ]=-"
00401092 PUSH dmp.00402031 ASCII "You are just trying to solve DAMN's Official joinig Contest. Made by tHE EGOiSTE/DAMN. At
first make a keygen for this simple keycheck routine, then try to crack this program. The LOCKED - Button should show an UNLOCKED-sign and if "...
00401107 PUSH dmp.0040227D ASCII "-=[ YEAH! ]=-"
0040110C PUSH dmp.0040220E ASCII "You got it! Thank you for registering!" 00401124 PUSH dmp.00402353 ASCII " " 00401149 PUSH dmp.00402321 ASCII " " 0040127E PUSH dmp.00402317 ASCII "About"
004012CE PUSH dmp.0040228B ASCII "-=[ CHECK ]=-"
00401301 MOV EDI,dmp.00402353 ASCII " "
Ovo izgleda ok. Sada idemo na ALT + E da proverimo da li su svi imorti OK. Desno dugme na ime .exe fajla pa na View names. Tabela izgleda ovako:
Names in dmp
Address Section Type ( Name Comment 004030B0 .idata Import ( user32.AppendMenuA
004030B4 .idata Import ( user32.DeleteMenu 004030F8 .idata Import ( GDI32.DeleteObject 004030B8 .idata Import ( user32.DialogBoxParamA 004030BC .idata Import ( user32.DrawMenuBar 004030C0 .idata Import ( user32.EnableWindow 004030C4 .idata Import ( user32.EndDialog 004030EC .idata Import ( kernel32.ExitProcess 004030C8 .idata Import ( user32.GetDlgItem 004030CC .idata Import ( user32.GetDlgItemTextA 004030F0 .idata Import ( kernel32.GetModuleHandleA 004030D0 .idata Import ( user32.GetSystemMenu 004030D4 .idata Import ( user32.Loa dBitmapA 004030D8 .idata Import ( user32.LoadIconA 004030DC .idata Import ( user32.MessageBoxA 00401000 CODE Export <ModuleEntryPoint>
004030E0 .idata Import ( user32.SendDlgItemMessageA 004030E4 .idata Import ( user32.SendMessageA
004030AC .idata Import ( user32.SetWindowTextA 004030A8 .idata Import ( user32.wsprintfA
Sve izgleda OK. Znaci sve je OK t.j. raspakovali smo fajl kako treba !!! Po imortima se zakljucuje da je ova .exe fajl pisan u ASMu.
PEtite 2.2
Do sada smo rucno trazili OEPe, ali cemo za odpakivanje PETitea koristiti Ollyev plugin OllyScript kako bi brze i lakse nasli sam OEP. Meta koju cemo koristiti se nalazi u folderu Cas10 a zove se crackme.petite.exe a olly skripta koja ce nam trebati se nalazi u fajlu ...\ Download\OllyDBG scripts.rar a
zove se petite2.2.txt.
Kada imamo sve sto nam treba mozemo da pocnemo sa odpakivanjem mete. Ucitajte metu u Olly. Ako Olly bude izbacivao neke poruke, pritisnite Yes. Sada samo treba da izvrsimo petite2.2.txt pomocu Plugins -> OllyScript -> Run Script... Pritisnemo OK tri puta i nalazimo se na OEPu. Brzo zar ne ?? Ono sto vidimo je ovo:
004012C0 55 DB 55 ; This is the entry point 004012C1 8B DB 8B
Naravno ovo je sigurno OEP samo treba da ga analiziramo pomocu Ollya. Pritiskom na CTRL + A vidimo ovo:
004012C0 /. 55 PUSH EBP ; This is the entry point 004012C1 |. 8BEC MOV EBP,ESP
Sada treba da uradimo standardan memory dump i da popravimo importe. Dump cemo uraditi preko LordPEa, uradicemo full dump. Sve do sada je bilo lako, i ostatak je lak samo morate da naucite par novih trikova. Otvoricemo ImpRec i ucitacemo crackme.petite.exe u njega. Moramo da promenimo OEP podesavanja kako bi smo dobili tabelu importa za korektan OEP. Promenicemo OEP na adresu 000012C0, pritisnucemo IATAutoSearch, pa GetImports. Kao sto vidimo nisu svi importi tacni, za oba .dll fajla nam fali po nekoliko importa. Kliknucemo na dugme Show Invalid, pa cemo onda pronaci sve netacne importe desnim klikom na selektovane importe i selekcijom Trace Level1 dobicemo sve importe koji nam fale. Ostaje samo da popravimo dumpovan fajl klikom na Fix Dump i to je to, uspesno smo odpakovali PETite.
tElock 0.80
Moram da priznam da sam fajl sa ovom zastitom slucajno nasao medju svojom kolekcijom targeta. Naime ovaj fajl se nalazio zajedno sa programom pod imenom DZA patcher crackerske grupe TNT! Posto nisam nikada pre odpakivao ni jedan program pakovan sa tElocom odlucio sam da probam. Naravno posto nigde nisam nasao tutorijal kako bih odpakovao ovu zastitu (a nisam ni trazio posto pri ruci nisam imao internet pa sam samo prekopao svoj hard disk) odlucio sam da ovo uradim onako muski, na nevidjeno. Meta za ovaj deo poglavlja ce biti fajl demo.tElock.exe, ovaj fajl cemo ucitati u Olly i pokusacemo da ga odpakujemo. Imajte na umu da sam se ja mucio oko ovoga nesto malo manje od pola sata i da cu neke stvari ovde izgledati mozda malo nelogine ali su tu kako bi ubrzale proces odpakivanja, stoga ih shvatite kao apriori, to jest kao cinjenice koje su takve i ne dokazuju se.
Posle vecanja kako da odpakujem ovu metu odlucio sam da je najlakse da postavim jedan memoriski break point na CODE sekciju fajla i da odatle krenem sa reversingom. Da bi smo ovo uradili moramo da odemo prozor modules ALT+M i da desnim klikom na sekciju CODE postavimo Set Memory breakpoint on access. Taj prozor izgleda kao ovaj sa slike dole. Ja sam vec vise puta startovao ovaj program pa znam da ce vam on praviti gomily execptiona i da necete moci da ih sve zaobidjete pritiskom na CTRL+F9. Zato cemo pritiskati CTRL+F9 onoliko puta koliko je potrebno da se predju svi ovi exceptioni i da se dodje do prvog memoriskog break-pointa. Ja sam pritisnuo CTRL+F9 cak 10x kako bi strigao do prvog memoriskog break-pointa. Posto sam ja ovaj kod vise puta analizirao otkrio sam da on sluzi za odpakivanje koda u memoriju. Sada se mozemo vratiti u prozor Memory map i iskljuciti break-point na CODE sekciji. Kada se vratimo nazad u CPU prozor videcemo gde smo to stali sa izvrsavanjem koda.