Target - Neewbie shool 1cme(Acid Burn cme)
Obti瀗ost - 1/10
Nastroje - jen OllyDBG 1.10(ke stahnuti na T4C),kalku鑛a z windows
-Pro nauceni zakladu s ollydbg doporucujeme tutorialy,ktere jsou volne ke stazeni na T4C.ic.cz
Cauec vsichni za桧naj韈?crackeri.Jiste m醫e jako my problem vubec za桧t,jeliko?na internetu neni zas tak mnoho jednoduchych cme a popripade tutorialu,ktere by vysvetlily co a jak.Proto vznikla na foru T4C nase neewbie skolka.
Postupne na jednoduchych cme se budete ucit,jake maji ochrany,po桧tani seriovych 桧sel a spoustu dal氻ch v靋i.
Zaroven to slou烅 za鑙najicim programatorum,a to tak,ze primo vidi kde se jejich ochrany stavaji slabymi a budou si moci otestovat svuj vyd鴈ny program,na kterem stravili jiste hodne casu.
!!!VESKERY MATERIAL SLOUZI KE STUDIJNIM UCELUM,ZA JAKEKOLIV ZNEUZITI NEMAME ZODPOVEDNOST!!!
Tak sm靗e do toho :)
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Cast 1 - ziskavani informaci.
Jelikoz nam autor primo napsal,ze na target neni aplikovan zadny packer tak ho nemusime nijak scanovat pres nap?PeID(Program slou烅 k detekci packeru a poppade z醟ladn韒u unpacku).
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Cast 2 - Prvni otev鴈ni a nakouknuti
Spustime olly a otevreme si nas target.Bez problem u se otev鴈.
Nyni ho spustime(F9 nebo 歩pka play na panelu ikon) a vidime - NAG okno,odklikneme a a pak vidime hlavni okne kde mame tla桧tka name/serial,exit,serial.
Ok,zavreme program a restartujeme ho v olly.Reset se provadi CTRL + F2.
Klikneme na hlavni okno s kodem(leva horni cast) pravym tlacitkem > Search for > All referenced text strings.
To nam vypise vsechny textove(stringove) hodnoty.Pokusime se najit text nag okna,tedy "welcome ...nechce se mi to opisovat :)". Bingo,nasli jsme(v ppade vice textu muzeme pouzit vyhledavani,a to pravym tlacitkem a search text)
a dvakrat poklikame na nas hledany dek.Ocitneme se v okne v kodu tady:
0042F784 6A 00 PUSH 0
0042F786 . B9 A0F74200 MOV ECX, cwcrackm.0042F7A0 ; ASCII "hello you have to kill me!" <<-tady se nam na鑙ta hlavi鑛a nag okna
0042F78B . BA BCF74200 MOV EDX, cwcrackm.0042F7BC ; ASCII "Welcome to this Newbies Crackme made by ACiD BuRN [CracKerWoRlD]" <<-tady se ocitneme po dvojkliku | tady se na桧ta na?text do zasobniku
0042F790 . A1 480A4300 MOV EAX, DWORD PTR DS:[430A48]
0042F795 . 8B00 MOV EAX, DWORD PTR DS:[EAX]
0042F797 . E8 D4A9FFFF CALL cwcrackm.0042A170 <<-tady se zobrazuje okno s textem
0042F79C . C3 RETN <<-tady se vraci na hlavni rutinu v zobrazeni hlavniho okna
Nejb鞛n靔氻m zpusobem obejiti NAG okna je 瀍 se vyNOPpuje volaci call rutina.Tedy vyzkousime.Najedeme v ollydbg na 0042F797 a dvakrat poklikame na instrukci.Vysko鑙 nam okno s instrukci,kterou prepiseme na NOP.vidime ze nam vysko鑙lo misto:
0042F797 . E8 D4A9FFFF CALL cwcrackm.0042A170
toto:
0042F784 6A 00 PUSH 0
0042F786 . B9 A0F74200 MOV ECX, cwcrackm.0042F7A0 ; ASCII "hello you have to kill me!"
0042F78B . BA BCF74200 MOV EDX, cwcrackm.0042F7BC ; ASCII "Welcome to this Newbies Crackme made by ACiD BuRN [CracKerWoRlD]"
0042F790 . A1 480A4300 MOV EAX, DWORD PTR DS:[430A48]
0042F795 . 8B00 MOV EAX, DWORD PTR DS:[EAX]
0042F797 90 NOP ---|
0042F798 90 NOP ---|
0042F799 90 NOP -------toto je nas vynopovany call
0042F79A 90 NOP ---|
0042F79B 90 NOP ---|
0042F79C . C3 RETN
Spustime program F9 a vida,chyba.Tak tudy cesta nevede.Kdyz se vyskytnou problemy pri tomhle druhu nopovani,pak nezbyva vetsinou nez najit jiny call,ktery vola funkci na volani okna anebo celou rutinu p鴈sko鑙t.Ja zvolil druhou mo瀗ost.
Resetujeme program crtl + f2.Opet najedeme na na歩 rutinu 0042F78B.Koukneme znovu na kod a vidime osamoceny 鴄dek:
0042F784 6A 00 PUSH 0
Tak tedy v韒e,瀍 na adresach 0042F786 a?0042f797 se nam na鑙ta na?nag.Tak tedy vyu瀒jeme na?osamoceny push.Dvojklik na instrukci a p鴈pi歵e ji na
0042F784 EB 16 JMP 0042F79C
Odentrujem a spustime program F9.
Vida,nag je fu?:) Prvni p鴈ka瀔aje za nami.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Cast 3 - Name/Serial
Spustime name/serial cast a zadame jmeno a cislo.Ja davam vsude Master a heslo 123456789.Klimknem na potvrzeni a vidime "Sorry, serial ...blablabla"
dame tedy vyhleda tuhle hlasku opet ve string referencich jak jsme vyhledavali predchozi nag hla歬u.Ocitneme se tady(jsou 2 mista,kde se hla歬a vyskytuje,tak se neleknete,kdyz se objevite na jinem miste,zkuste tu druhou v referencich):
0042FA47 . 8935 58174300 MOV DWORD PTR DS:[431758], ESI
0042FA4D . A1 6C174300 MOV EAX, DWORD PTR DS:[43176C]
0042FA52 . E8 D96EFDFF CALL cwcrackm.00406930 <<-nejake volani,zjistime co se deje.
0042FA57 . 83F8 04 CMP EAX, 4 -|
0042FA5A . 7D 1D JGE SHORT cwcrackm.0042FA79 --tady je nejaka kontrolni rutina
0042FA5C . 6A 00 PUSH 0
0042FA5E . B9 74FB4200 MOV ECX, cwcrackm.0042FB74 ; ASCII "Try Again!"
0042FA63 . BA 80FB4200 MOV EDX, cwcrackm.0042FB80 ; ASCII "Sorry , The serial is incorect !" <<-tady se ocitnem
0042FA68 . A1 480A4300 MOV EAX, DWORD PTR DS:[430A48]
0042FA6D . 8B00 MOV EAX, DWORD PTR DS:[EAX]
0042FA6F . E8 FCA6FFFF CALL cwcrackm.0042A170 <<-bad boy(volani)
0042FA74 . E9 BE000000 JMP cwcrackm.0042FB37
Tak tady vidime prvni misto kde se hazi hlaska BADBOY(vyznam snad kazdy pochopi :) )
Nastavime breakpoint(BP) na 0042FA47.Nastavi se poklikem na hexovou cast intrukci(myslim tim 8938 58.....) a z鑕rvena vam adresa 0042fa47(cervena = BP nastaven).Zadame opet jmeno a cislo a potvrdime.Zasekneme se na nasem BP.
Podivame se na nasi BP adresu a ve spodnim okenku vidime jen nejake patlanice.Pomoci F8 trasujem program az na call 0042FA52.
Na call adrese si vsimnete ze se do registru eax(registrove okenko je prave horni,josu tam registry eax,ecx atd.) zapsalo nase zadane jmeno.
Ok.F8 na 鴄dek 0042FA57 a nahle vidime ze se v eax neco zmenilo.Ji?tam neni ASCII hodnota Jmena,ale cislo(v hexove soustave).Kdyz porovname cislo a delku naseho jmena,tak se shoduji,to bude ono.Tedy na nasem radku:
0042FA57 . 83F8 04 CMP EAX, 4 <<-zde se kontroluje,zda je delka jmena 4 a vice(JGE je rovno nebo vice).
!!!Mala poznamka,kdyz v registrech poklikate treba na hodnotu na eax(00000006) vyskoci vam okenko,v nem mate hexova hodnota,deciamlni hodnota, a vespod mate 4 poli鑛a,3 z nich nevim co delaji,ale posledni poli鑛o ukazuje ascii hodnotu.Tedy,kdyby jste meli v registrech eax nap?4D,decimalni hodnota je 77 a ascii odpovida pismenku M.Je to ted sice trochu komplikovane,ale po nekolik cme uz zjistite co a jak.!!!
Tedy vime ze jmeno musi byt 4 a vice,to splnujeme,trasujeme dale:
0042FA79 > /8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10] <<-sem dame BP
0042FA7C . 8B83 DC010000 MOV EAX, DWORD PTR DS:[EBX+1DC]
0042FA82 . E8 D1AFFEFF CALL cwcrackm.0041AA58
0042FA87 . 8B45 F0 MOV EAX, DWORD PTR SS:[EBP-10]
0042FA8A . 0FB600 MOVZX EAX, BYTE PTR DS:[EAX]
0042FA8D . F72D 50174300 IMUL DWORD PTR DS:[431750]
0042FA93 . A3 50174300 MOV DWORD PTR DS:[431750], EAX
0042FA98 . A1 50174300 MOV EAX, DWORD PTR DS:[431750]
0042FA9D . 0105 50174300 ADD DWORD PTR DS:[431750], EAX
0042FAA3 . 8D45 FC LEA EAX, DWORD PTR SS:[EBP-4]
0042FAA6 . BA ACFB4200 MOV EDX, cwcrackm.0042FBAC ; ASCII "CW" <<-ascii hodnota ktera se pridava na zacatek serialu
0042FAAB . E8 583CFDFF CALL cwcrackm.00403708
0042FAB0 . 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
0042FAB3 . BA B8FB4200 MOV EDX, cwcrackm.0042FBB8 ; ASCII "CRACKED" <<-ascii ktera se pridava na konec
0042FAB8 . E8 4B3CFDFF CALL cwcrackm.00403708
0042FABD . FF75 FC PUSH DWORD PTR SS:[EBP-4]
0042FAC0 . 68 C8FB4200 PUSH cwcrackm.0042FBC8
0042FAC5 . 8D55 E8 LEA EDX, DWORD PTR SS:[EBP-18]
0042FAC8 . A1 50174300 MOV EAX, DWORD PTR DS:[431750]
0042FACD . E8 466CFDFF CALL cwcrackm.00406718
0042FAD2 . FF75 E8 PUSH DWORD PTR SS:[EBP-18]
0042FAD5 . 68 C8FB4200 PUSH cwcrackm.0042FBC8
0042FADA . FF75 F8 PUSH DWORD PTR SS:[EBP-8]
0042FADD . 8D45 F4 LEA EAX, DWORD PTR SS:[EBP-C]
0042FAE0 . BA 05000000 MOV EDX, 5
0042FAE5 . E8 C23EFDFF CALL cwcrackm.004039AC
0042FAEA . 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
0042FAED . 8B83 E0010000 MOV EAX, DWORD PTR DS:[EBX+1E0]
0042FAF3 . E8 60AFFEFF CALL cwcrackm.0041AA58
0042FAF8 . 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
0042FAFB . 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
0042FAFE . E8 F93EFDFF CALL cwcrackm.004039FC <<-kontrola spravneho a spatneho sn | zaroven si vsimnete v registru eax neceho zajimaveho,copak to je :) ano je to on,na歟ho srdce 歛mpiopn :)
0042FB03 . 75 1A JNZ SHORT cwcrackm.0042FB1F <<-nerovna se??BAD BOY
0042FB05 . 6A 00 PUSH 0
0042FB07 . B9 CCFB4200 MOV ECX, cwcrackm.0042FBCC ; ASCII "Congratz !!"
0042FB0C . BA D8FB4200 MOV EDX, cwcrackm.0042FBD8 ; ASCII "Good job dude =)"
0042FB11 . A1 480A4300 MOV EAX, DWORD PTR DS:[430A48]
0042FB16 . 8B00 MOV EAX, DWORD PTR DS:[EAX]
0042FB18 . E8 53A6FFFF CALL cwcrackm.0042A170
0042FB1D . EB 18 JMP SHORT cwcrackm.0042FB37
0042FB1F > 6A 00 PUSH 0
0042FB21 . B9 74FB4200 MOV ECX, cwcrackm.0042FB74 ; ASCII "Try Again!"
0042FB26 . BA 80FB4200 MOV EDX, cwcrackm.0042FB80 ; ASCII "Sorry , The serial is incorect !"
0042FB2B . A1 480A4300 MOV EAX, DWORD PTR DS:[430A48]
0042FB30 . 8B00 MOV EAX, DWORD PTR DS:[EAX]
0042FB32 . E8 39A6FFFF CALL cwcrackm.0042A170
Tak瀍.V歩mn靦e si na歩 kontrolni rutiny na 0042FAFE,tady se kontroluje nas spravny a spatny serial.V registrech eax se nam primo vypise jeho kompletni podoba.Toto je nejzakladnejsi problem ochran,tohle je prakticky ukazkovy priklad jak by se to nemelo delat.U lepsich ochran se vetsinou ze zadaneho serial pocita neco az z toho vznikne treba jen cislo 1 a to se porovna,tady se musi u?pocitat,ale to nekdy jindy.
Nedoka瀠 presne popsat jak se pridavaj ascii hodnoty cw a cracked,jeliko?sem se do kodu na tohle nedival.
Toto je ta ukazkova rutina:
0042FAF8 . 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10] <<-v zasobniku je nase zadane cislo
0042FAFB . 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C] <<-v zasobniku je spravne cislo
0042FAFE . E8 F93EFDFF CALL cwcrackm.004039FC <<-porovnani spravne spatne
Tedy u meho zadani:
Master
CW-6314-CRACKED
Toto jsou moje hodnoty.
Odtud nas zajima cislo 6314 a jak k nemu doslo.Jdeme to zjistit.Opet BP na 0042FA79.
A trasujeme:
0042FA79 > /8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10] <<-sem dame BP
0042FA7C . 8B83 DC010000 MOV EAX, DWORD PTR DS:[EBX+1DC]
0042FA82 . E8 D1AFFEFF CALL cwcrackm.0041AA58
0042FA87 . 8B45 F0 MOV EAX, DWORD PTR SS:[EBP-10] <<-do eax delka jmena
0042FA8A . 0FB600 MOVZX EAX, BYTE PTR DS:[EAX] <<-zde se do eax dava prvni pismeno jmena(u me je to M=4D v hexove soustave)
0042FA8D . F72D 50174300 IMUL DWORD PTR DS:[431750] <<-Prvni pismeno nasobime hexovou 29=41 v decimalni hodnote
0042FA93 . A3 50174300 MOV DWORD PTR DS:[431750], EAX <<-zde se vynasobena hodnota C55 kopiruje do 431750
0042FA98 . A1 50174300 MOV EAX, DWORD PTR DS:[431750] <<-zde se kopiruje opet z 431750 do eax C55
0042FA9D . 0105 50174300 ADD DWORD PTR DS:[431750], EAX <<-a zde se k hodnote z 431750 pripocitava hodnota z eax(C55 + C55) a ulozi se do 431750
0042FAA3 . 8D45 FC LEA EAX, DWORD PTR SS:[EBP-4]
Tedy cela vypocetni procedura vypada takto:
Prvni pismeno ze jmena do hex * hex 29 = vysledek
vysledekkonecny = vysledek + vysledek
vysledekkonecny se prevede zpet do decimalni hodnoty
A v mem pripade:
M = 4D(hex)
4D * 29(hex) = C55(hex)
C55 + C55 = 18AA
18AA = 6314(dec)
6314 = CW-6314-CRACKED (shoduji se) pocitali jsme tedy spravne.
Tudi?mame name/serial za sebou.Jdeme na posledni,tedy na serial.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Cast 4 - Serial
Spustime cast serial a zadame opet 123456789(nap鴌klad).Odklikneme a badboy "Try again",najdeme to tedy v referencich.Dvojklik a ocitneme se tady:
(poznamka:opet je tam vice hlasek try again,najdeme tedy,ktera ma v hlavi鑓e Failed.)
0042F47E . 55 PUSH EBP
0042F47F . 68 2CF54200 PUSH cwcrackm.0042F52C
0042F484 . 64:FF30 PUSH DWORD PTR FS:[EAX]
0042F487 . 64:8920 MOV DWORD PTR FS:[EAX], ESP
0042F48A . 8D45 FC LEA EAX, DWORD PTR SS:[EBP-4]
0042F48D . BA 40F54200 MOV EDX, cwcrackm.0042F540 ; ASCII "Hello" -----|
0042F492 . E8 7142FDFF CALL cwcrackm.00403708 |
0042F497 . 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8] |
0042F49A . BA 50F54200 MOV EDX, cwcrackm.0042F550 ; ASCII "Dude!" -------toto vypada podez鴈le
0042F49F . E8 6442FDFF CALL cwcrackm.00403708
0042F4A4 . FF75 FC PUSH DWORD PTR SS:[EBP-4]
0042F4A7 . 68 60F54200 PUSH cwcrackm.0042F560
0042F4AC . FF75 F8 PUSH DWORD PTR SS:[EBP-8]
0042F4AF . 8D45 F4 LEA EAX, DWORD PTR SS:[EBP-C]
0042F4B2 . BA 03000000 MOV EDX, 3
0042F4B7 . E8 F044FDFF CALL cwcrackm.004039AC
0042F4BC . 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
0042F4BF . 8B83 E0010000 MOV EAX, DWORD PTR DS:[EBX+1E0]
0042F4C5 . E8 8EB5FEFF CALL cwcrackm.0041AA58
0042F4CA . 8B45 F0 MOV EAX, DWORD PTR SS:[EBP-10] -| <<-nase zadane do eax
0042F4CD . 8B55 F4 MOV EDX, DWORD PTR SS:[EBP-C] -| <<-spravne do edx
0042F4D0 . E8 2745FDFF CALL cwcrackm.004039FC --A nase stara dobra kontrolni rutina.sem hodime BP
0042F4D5 . 75 1A JNZ SHORT cwcrackm.0042F4F1
0042F4D7 . 6A 00 PUSH 0
0042F4D9 . B9 64F54200 MOV ECX, cwcrackm.0042F564 ; ASCII "Congratz!"
0042F4DE . BA 70F54200 MOV EDX, cwcrackm.0042F570 ; ASCII "God Job dude !! =)"
0042F4E3 . A1 480A4300 MOV EAX, DWORD PTR DS:[430A48]
0042F4E8 . 8B00 MOV EAX, DWORD PTR DS:[EAX]
0042F4EA . E8 81ACFFFF CALL cwcrackm.0042A170
0042F4EF . EB 18 JMP SHORT cwcrackm.0042F509
0042F4F1 > 6A 00 PUSH 0
0042F4F3 . B9 84F54200 MOV ECX, cwcrackm.0042F584 ; ASCII "Failed!"
0042F4F8 . BA 8CF54200 MOV EDX, cwcrackm.0042F58C ; ASCII "Try Again!!" <<-tady se ocitnete
0042F4FD . A1 480A4300 MOV EAX, DWORD PTR DS:[430A48]
0042F502 . 8B00 MOV EAX, DWORD PTR DS:[EAX]
0042F504 . E8 67ACFFFF CALL cwcrackm.0042A170
V callu 0042F4D0 se nam opet kontroluje spravne a spatne.V eax najdeme nase a v edx spravne.Tak koukneme na edx a vidime text "Hello Dude!".
Ten si tedy opisem a zkusime.Voila GOODBOY.
Tak lidi,a tohle je konec.Nebylo to zas tak te瀔e 瀍???Pro za鑑tek vam to snad sta桧.Doufam ze sem to napsal srozumitelne.Kdyby neco,tak se ozvete na maila nenbo si prectete jin鑙 tutorial :)
Pamatujte - 萾ete,萾ete a jeste jendnou 萾ete cokoliv a zkousejte :)
-------------------------------------------------------------------------------------------------------------------------------------------------------------