Target - Neewbie shool 1cme(Acid Burn cme)

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 poppade 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 ppade 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 :)

-------------------------------------------------------------------------------------------------------------------------------------------------------------    

void Sort_CollegeScore(AllCollege *as) //按学院总分排序(直接插入排序) { int i,j,k; printf("\t|----------------------------------------------------------------|\n"); printf("\t|---- 学院编号\t|学院名字 |男团体总分|女团体总分|总分 |----|\n"); printf("\t|----------------------------------------------------------------|\n"); for (i = 2;i<as->College_num;i++) { as->College[0].boys_score = as->College[i].boys_score; as->College[0].girl_score = as->College[i].girl_score; as->College[0].shool_score = as->College[i].shool_score; as->College[0].College = as->College[i].College; strcpy(as->College[0].College_name,as->College[i].College_name); j = i - 1; while (as->College[0].shool_score < as->College[j].shool_score && j >0) { as->College[j+1].boys_score = as->College[j].boys_score; as->College[j+1].girl_score = as->College[j].girl_score; as->College[j+1].shool_score = as->College[j].shool_score; as->College[j+1].College = as->College[j].College; strcpy(as->College[j+1].College_name,as->College[j].College_name); j--; } as->College[j+1].boys_score = as->College[0].boys_score; as->College[j+1].girl_score = as->College[0].girl_score; as->College[j+1].shool_score = as->College[0].shool_score; as->College[j+1].College = as->College[0].College; strcpy(as->College[j+1].College_name,as->College[0].College_name); } for (k = 2;k<=as->College_num;k++) { printf("\t|---- %-9d|%-8s |%-4d\t|%-10d|%-8d|----|\n",as->College[k].College,as->College[k].College_name,as->College[k].boys_score,as->College[k].girl_score,as->College[k].shool_score); printf("\t|----------------------------------------------------------------|\n"); } printf("\n\n");system("pause"); }
最新发布
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值