CrackMe 8.0 (easy) by Mr. Ketchup - solution by Wily
co bedzie potrzebne:
- SI
- tasm
- kompjutjer:)


Hej!!
Witam was w moim pierwszym tutorialu. Jak znajdziecie jakies bledy, macie jakies sugestie,
pytania to milme : wilypl@go2.pl.
Wiec jak juz pewnie wiecie zajmiemy sie CrackMe by Mr.Ketchup a wiec do dziela !!!

Odpalamy crackme, zastawiamy plapke na GetDlgItemTextA i klikamy check (lub wciskamy [Alt]+[c])
ok SI przeja kontrole. Widzimy cos takiego:

:0040110B E8E6000000              Call GetDlgItemTextA 
:00401110 83F800                  cmp eax, 00000000   ;sprawdza czy cos zostalo wpisane
:00401113 0F8499000000            je 004011B2         ;jesli nic nie zostalo wpisane zly serial
:00401119 83F80C                  cmp eax, 0000000C   ;sprawdza czy wpisalismy odpowiednia liczbe 
                                                      ;znakow (Ch czyli 12d)
:0040111C 0F8590000000            jne 004011B2        ;jesli liczba wpisanych znakow jest rozna 
                                                      ;od 12 to wtedy nastapi skok i 
                                                      ;pokaze sie okienko ze jest to zly seria


A wiec nasz serial powinien miec 12 znakow. Spojzmy dalej:

:00401122 BF9E304000              mov edi, 0040309E          ;do edi offset naszego seriala (ten
                                                             ;co wpisalismy)
:00401127 33C0                    xor eax, eax               
:00401129 8B07                    mov eax, dword ptr [edi]   ;pobiera pierwsze 4 znaki naszego
                                                             ;serial
:0040112B B9BABA0000              mov ecx, 0000BABA          
:00401130 83C015                  add eax, 00000015<---|     
:00401133 35BABAAD0B              xor eax, 0BADBABA    |p     
:00401138 33C1                    xor eax, ecx         |e    
:0040113A 86C4                    xchg ah, al          |t
:0040113C 32E0                    xor ah, al           |l
:0040113E 02C4                    add al, ah           |a 
:00401140 F7D0                    not eax              | 
:00401142 E2EC                    loop 00401130 <-------
:00401144 3DBE2D7D55              cmp eax, 557D2DBE  
:00401149 7567                    jne 004011B2             ;jesli po tym mieleniu w eax jest 
                                                           ;557D2DBE to znczy ze pierwsze 4 
                                                           ;znaki sa dobre
A wiec aby uzyskac pierwsze 4 znaki nalezy odwrucic ta procke. Jezeli ktos lubi liczyc recznie
niema problemu ale ja jednak wole tasm. Odwrucona procka bedzie wygladac nastepujaco:
 

mov     eax,557D2DBEh
mov ecx,0

petla:
         inc ecx
         not eax
         sub al, ah
         xor ah, al
         xchg al, ah
         xor eax, ecx
         xor eax, 0BADBABAh
         sub eax, 15h
         cmp ecx,0babah
         jnz petla

Teraz wezmy sie za nastepne 4 znaki:
tak wyglada orginal:
:0040114B 33C0                    xor eax, eax
:0040114D 8B4704                  mov eax, dword ptr [edi+04]
:00401150 B9ADDE0000              mov ecx, 0000DEAD
:00401155 83C020                  add eax, 00000020
:00401158 35ADDEBABA              xor eax, BABADEAD
:0040115D 33C1                    xor eax, ecx
:0040115F 86E0                    xchg al, ah
:00401161 32C4                    xor al, ah
:00401163 02E0                    add ah, al
:00401165 F6D0                    not al
:00401167 F6D4                    not ah
:00401169 F7D0                    not eax
:0040116B E2E8                    loop 00401155
:0040116D 3D4657E517              cmp eax, 17E55746
:00401172 753E                    jne 004011B2  


I odwracamy:

      mov eax,17e55746h
      mov ecx,0
petla2:
       inc ecx
       not eax
       not ah
       not al
       sub ah,al
       xor al,ah
       xchg ah,al
       xor eax,ecx
       xor eax,0babadeadh
       sub eax,20h
       cmp ecx,0deadh
       jnz petla2



Kolejne 4 znaki:

:00401174 33C0                    xor eax, eax
:00401176 8B4708                  mov eax, dword ptr [edi+08]
:00401179 B955550000              mov ecx, 00005555
:0040117E 0554225121              add eax, 21512254
:00401183 3534373635              xor eax, 35363734
:00401188 33C1                    xor eax, ecx
:0040118A 86C4                    xchg ah, al
:0040118C 32E0                    xor ah, al
:0040118E 2AE0                    sub ah, al
:00401190 D1C0                    rol eax, 1
:00401192 E2EA                    loop 0040117E
:00401194 3D9DAD64D9              cmp eax, D964AD9D
:00401199 7517                    jne 004011B2

po odwruceniu:
       mov eax,0d964ad9dh
       mov ecx,0
petla3:
       ror eax,1
       inc ecx
       add ah,al
       xor ah,al
       xchg al,ah
       xor eax,ecx
       xor eax,35363734h
       sub eax,21512254h 
       cmp ecx,5555h
       jnz petla3

dobra teraz bierzemy to wszystko razem:

assume cs:kod, ds:kod
kod segment
org 100h
.486p
start:
mov     eax,557D2DBEh
mov ecx,0

petla:
      inc ecx
      not eax
      sub al, ah
      xor ah, al
      xchg al, ah
      xor eax, ecx
      xor eax, 0BADBABAh
      sub eax, 15h
      cmp ecx,0babah
      jnz petla
      int 3h


      mov eax,17e55746h
      mov ecx,0
petla2:
       inc ecx
       not eax
       not ah
       not al
       sub ah,al
       xor al,ah
       xchg ah,al
       xor eax,ecx
       xor eax,0babadeadh
       sub eax,20h
       cmp ecx,0deadh
       jnz petla2
       int 3h


       mov eax,0d964ad9dh
       mov ecx,0
petla3:
       ror eax,1
       inc ecx
       add ah,al
       xor ah,al
       xchg al,ah
       xor eax,ecx
       xor eax,35363734h
       sub eax,21512254h 

       cmp ecx,5555h
       jnz petla3
       int 3h

koniec:
      mov ah,4ch
      int 21h

kod ends
end start
_________
tasm nazwa.asm
tlink /t/3 nazwa.obj
_________

Teraz zastawiamy plapke na int 3 (i3here on) i odpalamy proga si przejmuje kontrole wiec patrzymy
co jest pod eax (? eax) i pierwsze 4 znaki sa nasze, "UpeS" tylko ze sa zapisane odwrotnie wiec
co otrzymalismy? oczywiscie ze "SepU". Teraz F5 i znow jestesmy w si, znow patrzymy co sie kryje
pod eax tak samo postepujemy z 4 ostatnimi znakami.
Wiec jak brzmi cale chaslo?, nie ja ci niepowiem (albo juz to zrobilem).
heh wiec jak juz wspomnialem na poczatku jest to moj first tutorial wiec troche namotalem 
jezeli masz jakies watpliwosci to mailme: wilypl@go2.pl 


PODZIEKOWANIA:
Naleza sie wszystkim osoba przebywajacym na kanale #crackpl