  - -- Tutorial -- -
- ------------------------------------ -
- Soft : boRNbuRNT crackme for newbies -
- Tool : SoftIce v4.xx/Hiew            -
- ------------------------------------ -
        - -- Cracked by Creeper^ --  -

Hi wszystkim. Jako, ze nie mialem w sumie co robic na kompie to poszperalem co nie co po dysq i qrde znalazlem crackmerka od boRNbuRNT`a <- Greetz boy! Wchodze na crackmes4u i pisze ze uncracked. Zabralem sie za niego po raz 4 w zyciu. Pisze ze no patchez. Po krotkim oblookaniu crackmeka jest on na pierwszy rzut oka zpackowany UPX`em. Wiec go depackujemy (ja procdumpem). Dobra. Wlazlem do crackmeka i wpisalem do name Creeper^ a do  serial : 987654321. 
Wchodzimy do SoftIce (CTRL+D) i wlaczamy pulapke na hmemcpy :

	bpx hmemcpy

Teraz wychodzimy z Si (F5) i wciskamy OK. Crackmek zlapal sie. Wciskamy F5 zeby dostac sie do miejsca w kodzie po break`u ktore zostalo spowodowane pobraniem SERIALA do pamieci a nie NAME`a! Teraz wciskamy F11 i 11 razy F12 i jestesmy w kodzie crackme ;)

:00401927 8D55B8                  lea edx, dword ptr [ebp-48] <<< Tutaj jestesmy
:0040192A 8D45C0                  lea eax, dword ptr [ebp-40]
:0040192D E81EB60300              call 0043CF50
:00401932 FF4B1C                  dec [ebx+1C]
:00401935 8D45B8                  lea eax, dword ptr [ebp-48]
:00401938 BA02000000              mov edx, 00000002
:0040193D E8DEB50300              call 0043CF20
:00401942 3BBDF8FDFFFF            cmp edi, dword ptr [ebp+FFFFFDF8]
:00401948 7424                    je 0040196E                 <<< Jakis skok
:0040194A A1002E4400              mov eax, dword ptr [00442E00]
:0040194F 6A10                    push 00000010
:00401951 B906E34300              mov ecx, 0043E306           <<< String "Serial check"
:00401956 BAECE24300              mov edx, 0043E2EC           <<< String "Cos zrobiles zle..."
:0040195B 8B00                    mov eax, dword ptr [eax]
:0040195D E8CAB30300              call 0043CD2C

Czyli na trzeci rzut oka widac jak byk, ze zawsze nie wykonamy skoku JE 0040196E (adres:00401948)
Czemu? Hmmm... z gory przewidziane przez autora? Czyzby on sobie w ..... polecial? Przeciez pisze w crackme ze nie mozna go patchowac... No coz, lecimy dalej (F10) zmieniajac flage na tej instrukcji (piszac r fl z) do miejsca :

:0040199B E880B50300              call 0043CF20
:004019A0 59                      pop ecx
:004019A1 84C9                    test cl, cl
:004019A3 0F8490000000            je 00401A39       <<< Jump
:004019A9 66C74310F800            mov [ebx+10], 00F8
:004019AF BA14E34300              mov edx, 0043E314 <<< String : "Wpiszy serial..."
:004019B4 8D45B0                  lea eax, dword ptr [ebp-50]
:004019B7 E804B40300              call 0043CDC0

Jak nie wykonamy skoku pod 004019A3 to ukaze nam sie messagebox z infem ze nie wpisalismy seriala! Ale mysmy wpisali wiec lecimy dalej az do kolejnego sprawdzania :

:00401A66 E8B5B40300              call 0043CF20
:00401A6B 59                      pop ecx
:00401A6C 84C9                    test cl, cl
:00401A6E 0F8490000000            je 00401B04       <<< Jump
:00401A74 66C743101C01            mov [ebx+10], 011C
:00401A7A BA3BE34300              mov edx, 0043E33B <<< String : "Wpisz imie..."
:00401A7F 8D45A4                  lea eax, dword ptr [ebp-5C]
:00401A82 E839B30300              call 0043CDC0

Wiadomo co sie stanie jak nie wykonamy skoku ;) Otrzymamy komunikat ze nie wpisalismy imienia.
Dobra, znow spelniamy warunek gdyz wpisalismy imie. I docieramy do tego miejsca :

:00401B04 8D45C4                  lea eax, dword ptr [ebp-3C]
:00401B07 E8FCB40300              call 0043D008
:00401B0C 83F814                  cmp eax, 00000014  <<< Porownanie eax z 14H
:00401B0F 0F8D90000000            jnl 00401BA5       <<< dziwne,jakis skok
:00401B15 66C743103401            mov [ebx+10], 0134
:00401B1B BA5FE34300              mov edx, 0043E35F  <<< String : "Imie musi miec..."
:00401B20 8D459C                  lea eax, dword ptr [ebp-64]

Heh, w eax mamy jakis gowniany numerek : EAX=00000008 a porownywany jest z 14H
Ciekaw jestem ile to 14H rowna sie w decymalnym systemie... Wpisuje w SoftIce ?14
i ukazalo mi sie :

00000014    0000000020    " "
  HEX           DEC      ASCII

Wiec 14H=20D. Ale wciaz nie wiemy co to jest te 08 w eax... Od razu powiem ze to jest dlugosc naszego name. Skad to wiem? Nie wiem, jakos tak od razu mi sie nawinala ta odpowiedz po zobaczemiu stringa : "Imie musi miec..." nieco dalej za kodem - sam nam mowi o tym,ze progs sprawdza dlugosc name`u :) No dobra, ale teraz jeszcze jump JNL - if my english is good - and it is - then JNL means : JUMP NOT LESS czyli oznacza to Skok nie mniejsze (od). Czyli jesli wartosc jest mniejsza od 14 to skox do 00401BA5. I teraz najdziwniejsza rzecz w tym calym kawaleczku kodu. Jak debugowalem pod SoftIce to pisalo mi JGE 00401BA5 zamiast JNL 00401BA5. Wobec tego ciekawe dlaczego Win32Diasm tak glupio mi zdisassemblowal ta instrukcje... Jakies niedociagniecie czy co? Aha... Przeciez skok jesli nie mniejsze to to samo co skocz jesli wieksze lub rowne ;)))
Teraz to juz jasne ;) No i w tym momencie musze powiedziec, ze musimy sobie zmienic name z 8 znakow na 20. Ja se zrobilem : Creeper^[Atomic^cRk] - akurat 20 znakow ;) Teraz dochodze znowu do tego samego miejsca i ladnie skacze do 00401BA5. I teraz jak juz jestesmy w tym miejscu to od razu mozesz sobie zastawic BPX`a na 004030EC. Czemu? Bo przez te lekko kolo a moze nawet ponad 100 instrukcji pomiedzy zakresem adresowym 00401BA5 a 004030EC to gowno ktore trza ominac. Tam nic nie ma! No wiec teraz zobaczmy co jest pod 004030EC :

:004030E5 E8FE890200              call 0042BAE8
:004030EA 85C0                    test eax, eax
:004030EC 7504                    jne 004030F2     <<< OTO TO MIEJSCE
:004030EE B054                    mov al, 54       <<< 'T'
:004030F0 EB02                    jmp 004030F4
:004030F2 B04E                    mov al, 4E       <<< 'N'
:004030F4 C78578FDFFFFFD020000    mov dword ptr [ebp+FFFFFD78], 000002FD
:004030FE 0FBEC0                  movsx eax, al
:00403101 8B9578FDFFFF            mov edx, dword ptr [ebp+FFFFFD78]
:00403107 81C204FFFFFF            add edx, FFFFFF04
:0040310D 899574FDFFFF            mov dword ptr [ebp+FFFFFD74], edx
:00403113 8B8D74FDFFFF            mov ecx, dword ptr [ebp+FFFFFD74]
...
...

Jak widzimy przed 004030EC jest CALL - mozna wejsc i posprawdzac co sie dzieje. Debugujac dalej po skoku z 004030EC widze porownanie ze jesli jest T w AL to wszystko jest spox i dalej jest message box ze wszystko jest cool! W przeciwnym razie tak jak u nas skaczemy do 004030F2 gdzie wciskane jest do AL 'N' i zawsze jest zle! Dlaczego tak sie dzieje? Bo takie byly intencje autora crackme. Tak wiec trzeba w sumie zpatchowac 2 miejsca aby dowiedziec sie ze wpisalismy ten dobry serial :

	00401948
	004030EC	<- jak tu zpatchujemy to crackme dziala na kazdy serial

Mailowalem w tej dziwnej sprawie do autora crackme : Borna i powiedzial ze dobrze to zlamalem a problem z patching not allowed polegal na tym iz nie wolno bylo niczego na zmiane zmieniac w crackme tylko zmieniac mozna bylo flagi aby sie dowiedziec jaki jest dobry pass bo jak juz powiedzialem crackme jako serial wybiera liczbe losowa i to do tego cholernie dluga!
Nom wiec trza patchowac w pamieci. Nie wiem, moze jakiego loadera zrobic trza? ;)

Dzieki
Creeper^