Cracking4neWBies - Lekce č.4

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

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

Cracking4neWBies

Lekce č.4

Další hledání seriálu v CMe


Balíček ke stáhnutí zde

Malé upozornění:-):
Celé toto CMe řešení jsem zkopíroval z mojeho řešení, když jsem toto CMe řešil. Tak kdyžtak omluvte trochu nespisovštiny…:-)

České CMe od sF…

Toto je první oficiální CMe ze stránek picasso.poupe.net. Dalo mě to pěknou práci, než jsem došel k úspěchu, ale potom jsem to celé vykrokoval po jednom kroku, a našel jsem správné s/n…
Dost mluvení, jdeme se na to mrknout…
Spustíme to..a otestujeme, zjistíme že tlačítko OK se odblokuje až po napsání 11ctého znaku. Podívame se PEiDem jestli není nějak soubor pakovaný…není a je vytvořený v Delphi.
Natáhneme do DeDe...a hle! Delphi 3...podíváme se na procedurku BtnOkClick...
a je tam tohle:

* Reference to: main.Proc_0042F1C8
|
0042F2C0 E803FFFFFF call 0042F1C8
0042F2C5 C3 ret


už toho víme až až...a hup to zdebuggnout v Olly...
Nastavuju BP na adresu 0042F2C0...zadáme nějaký blábol (12345678901) a hle, zastavilo se to na
CALLu na adrese 0042F2C0...Dáme Trace Into [F7] a sleduju...


0042F1C8 /$ 55 PUSH EBP
0042F1C9 |. 8BEC MOV EBP, ESP
0042F1CB |. 6A 00 PUSH 0
0042F1CD |. 6A 00 PUSH 0
0042F1CF |. 6A 00 PUSH 0
0042F1D1 |. 53 PUSH EBX
0042F1D2 |. 56 PUSH ESI
0042F1D3 |. 57 PUSH EDI
0042F1D4 |. 8BF8 MOV EDI, EAX
0042F1D6 |. 33C0 XOR EAX, EAX
0042F1D8 |. 55 PUSH EBP
0042F1D9 |. 68 B1F24200 PUSH sF_crmeR.0042F2B1
0042F1DE |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0042F1E1 |. 64:8920 MOV DWORD PTR FS:[EAX], ESP
0042F1E4 |. 8D55 F4 LEA EDX, [LOCAL.3]
0042F1E7 |. 8B87 EC010000 MOV EAX, DWORD PTR DS:[EDI+1EC]
0042F1ED |. E8 2EADFEFF CALL sF_crmeR.00419F20
0042F1F2 |. 8B45 F4 MOV EAX, [LOCAL.3]
0042F1F5 |. 8078 05 2D CMP BYTE PTR DS:[EAX+5], 2D //6ty znak musi byt pomlka!!!
0042F1F9 |. 0F85 88000000 JNZ sF_crmeR.0042F287
0042F1FF |. B3 01 MOV BL, 1
0042F201 |. BE F0084300 MOV ESI, sF_crmeR.004308F0 ; ASCII "88451Ť@" //to vypada nadejne :-)
0042F206 |> 8D55 F4 /LEA EDX, [LOCAL.3]
0042F209 |. 8B87 EC010000 |MOV EAX, DWORD PTR DS:[EDI+1EC]
0042F20F |. E8 0CADFEFF |CALL sF_crmeR.00419F20
0042F214 |. 8B45 F4 |MOV EAX, [LOCAL.3]
0042F217 |. 33D2 |XOR EDX, EDX
0042F219 |. 8AD3 |MOV DL, BL
0042F21B |. 8A4410 FF |MOV AL, BYTE PTR DS:[EAX+EDX-1]
0042F21F |. 3A06 |CMP AL, BYTE PTR DS:[ESI]
0042F221 |. 74 09 |JE SHORT sF_crmeR.0042F22C
0042F223 |. 8BC7 |MOV EAX, EDI

Dáme F9 ať se ten kód prožene a vyskočí BadBoy...
Dáme následujici číslo:
88451-78901
...
už nás to pustí přes "kontrolu pomlky"...a dostali jsme se sem:



0042F206 |> /8D55 F4 /LEA EDX, [LOCAL.3]
0042F209 |. |8B87 EC010000 |MOV EAX, DWORD PTR DS:[EDI+1EC]
0042F20F |. |E8 0CADFEFF |CALL sF_crmeR.00419F20
0042F214 |. |8B45 F4 |MOV EAX, [LOCAL.3]
0042F217 |. |33D2 |XOR EDX, EDX
0042F219 |. |8AD3 |MOV DL, BL
0042F21B |. |8A4410 FF |MOV AL, BYTE PTR DS:[EAX+EDX-1]
0042F21F |. |3A06 |CMP AL, BYTE PTR DS:[ESI]
0042F221 |. |74 09 |JE SHORT sF_crmeR.0042F22C //jestli ZF=0 tak BadBoy...
0042F223 |. |8BC7 |MOV EAX, EDI
0042F225 |. |E8 6A020000 |CALL sF_crmeR.0042F494 //call na badboy
0042F22A |. |EB 62 |JMP SHORT sF_crmeR.0042F28E
0042F22C |> |43 |INC EBX
0042F22D |. |46 |INC ESI
0042F22E |. |80FB 06 |CMP BL, 6
0042F231 |.^\75 D3 \JNZ SHORT sF_crmeR.0042F206


Kupodivu to doopravdy byla kontrola čisel 88451...uf...aspoň nemusíme nic luštit…

ale kde je zbytek??...trasujeme dále....

nějak jsme se dostopovali k dalšímu stringu...tentokráte 13435 .... Já jsem to zbrkle nastavil za pomlčku a BadBoy :-(..tak lehké to nebude...

Tak...čislo ponechám a jdeme dál trasovat...

dokrokovali jsme sem:


0042F264 |. 33D2 XOR EDX, EDX
0042F266 |. 8BC3 MOV EAX, EBX
0042F268 |. E8 2B73FDFF CALL sF_crmeR.00406598
0042F26D |. 81FB BF1B0100 CMP EBX, 11BBF //11BBFh = 72639 dec..
0042F273 |. 75 09 JNZ SHORT sF_crmeR.0042F27E //jestli nesouhlasi...badboi
0042F275 |. 8BC7 MOV EAX, EDI
0042F277 |. E8 74010000 CALL sF_crmeR.0042F3F0 //call na badboy
0042F27C |. EB 10 JMP SHORT sF_crmeR.0042F28E
0042F27E |> 8BC7 MOV EAX, EDI

Tudíž správné s/n je

88451-72639

zkusíme to...a jde to :-)
neptejte se mě, jak se to počítá...to už fakt ne...prostě když uvidím CMP někde před JE,JNZ,JMP a jinými "jumpy",
tak se mrknu do paměti, anebo si to překonvertuju z hex do dec...
Jak jste mohli vidět teď...něco ve mě trklo a řeklo mi,
že mám hodit 11BBF do dec a hle a bylo to...jako projížděl jsem CALLy, to jo..ale,
mám svůj styl crackování...a už do vás hustim takový sena...asi sem toho o sobě prozradil dost :-)...
Jsem začátečník a toto CMe hodnotím na 3/10...vzhledem k tomu že jsem ho vyluštil i já...


Použité nástroje:
DeDe
Na podívání, co skrýva btnOkClick za kód...
OllyDbg
Na zjištění s/n
Windows Kalkulacka...
Na konvertovaní dec -> hex a naopak...
WinHex
Tam jsem se podíval co je 2D za znak (pomlčka)

…just…
s/n:
88451-72639


Celé toto CMe řešení jsem zkopíroval z mojeho řešení, když jsem toto CMe řešil. Tak kdyžtak omluvte trochu nespisovštiny…

Ještě bych chtěl dodat…
13435, jak jsem si myslel že se jedná o správný kód (resp.o správnou druhou část), tak 13435h = 78901 dec. Tudíž to je moje ZADANÁ druhá polovina. Převod druhé poloviny do hex se nachází zde:
0042F25A - Zde vejděte do Callu,
004065F6 – Zde vejděte do Callu(hned první call), a zde co bude probíhat je převod druhé poloviny s/n do hex, do reg. EAX, ten se potom přesune do ESI a do finálního EBX. Zde jsou přesně ty instrukce, které provádí převod:



00402874 |> /80EB 30 /SUB BL, 30
00402877 |. |80FB 09 |CMP BL, 9
0040287A |. |77 2A |JA SHORT sF_crmeR.004028A6
0040287C |. |39F8 |CMP EAX, EDI
0040287E |. |77 26 |JA SHORT sF_crmeR.004028A6
00402880 |. |8D0480 |LEA EAX, DWORD PTR DS:[EAX+EAX*4]
00402883 |. |01C0 |ADD EAX, EAX
00402885 |. |01D8 |ADD EAX, EBX
00402887 |. |8A1E |MOV BL, BYTE PTR DS:[ESI]
00402889 |. |46 |INC ESI
0040288A |. |84DB |TEST BL, BL
0040288C |.^\75 E6 \JNZ SHORT sF_crmeR.0040287




A příště si crackneme opravdový prográmek :-)