Ŀ
 Tutorial by:                     kelog./7team                                                  

Cel              : Crackme 0 by Exe / CHinc                                                    
Poziom trudnosci : Latwy/sredni                                                                
Data             : 18 Lutego 2001                                                              
Kontakt          : kelog@poczta.onet.pl                                                         

 NARZEDZIA                                                                                   
                                                                                               
1. SoftIce 4.xx                                                                                
2. Wdasm 8.93
3. Kompilator Tasm5  [do keygena]                                                              
4. Kanapki [uwazaj zeby okruszki nie sypaly sie na klawiature, bo potem                        
   niektore klawisze moga nie laczyc :) ]                                                      
 
I. Zaczynamy !

Uruchom crackme, jesli bedziesz mial  SI w pamieci to wyskoczy Ci msgbox z jakims info, a po 
kliknieciu OK, zostanie wywolane ExitWindowsEx i system Ci sie zrestartuje :). 
Jak juz zapewne wydedukowales crackme jest zabezpieczone pod katem uruchamiania w obecnosci SI,
wiec trzeba to usunac !

II. ANTY-SI, ANTY-BPX

Zaladuj crackme do Wdasma i ... juz wiesz ze progi zostal spakowany UPXem. Rozpakuj go sobie
(ja rozpakowalem programem UPX 0.92, jest tam opcja "Decompress") i znowu zaladuj do Wdasma.
Na samym poczatku mamy:

:00401000 6A00                    push 00000000
:00401002 6A03                    push 00000003
:00401004 6A00                    push 00000000
:00401006 6A00                    push 00000000
:00401008 6A00                    push 00000000
:0040100A 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"\\.\SICE"  <-- nazwa sterownika SofiIce'a
                                  |
:0040100C 6863334000              push 00403363

* Reference To: KERNEL32.CreateFileA, Ord:0000h <-- funkcja API, ktora otwiera pliki
                                  |
:00401011 E83E060000              Call 00401654
:00401016 83F8FF                  cmp eax, FFFFFFFF
:00401019 90                      nop <-- tutaj byl  JNE  xxxxxxx 
:0040101A 90                      nop
:0040101B C3                      ret

* Referenced by a CALL at Addresses:
|:004011AF   , :00401261   
|
:0040101C B443                    mov ah, 43
:0040101E CD68                    int 68
:00401020 663D86F3                cmp ax, F386
:00401024 90                      nop  <--- tutaj tez byl JNE
:00401025 90                      nop
:00401026 C3                      ret

Zeby usunac anty-si, wystarczy w jakims hex-edytorze zmienic JNE pod adresami: :00401019 i :00401024 
na dwa NOPy.  

To jeszcze nie wszystko. Autor dodal kod wykrywajacy pulapki BPX, ktory tez przydaloby sie usunac.
Przewin troche w dol az zobaczysz:

* Referenced by a CALL at Addresses:
|:00401074   , :004011F1   
|
:0040104B 0F010D70334000          sidt [00403370]
:00401052 A172334000              mov eax, dword ptr [00403372]
:00401057 83C008                  add eax, 00000008
:0040105A 8B18                    mov ebx, dword ptr [eax]
:0040105C 83C010                  add eax, 00000010
:0040105F 8B00                    mov eax, dword ptr [eax]
:00401061 25FFFF0000              and eax, 0000FFFF
:00401066 81E3FFFF0000            and ebx, 0000FFFF
:0040106C 2BC3                    sub eax, ebx
:0040106E 83F81E                  cmp eax, 0000001E
:00401071 90                      nop <-- tutaj tez byl skok JNE :). 
:00401072 90                      nop
:00401073 C3                      ret

Zeby usunac ta niedogodnosc :), zmien JNE pod :00401071 na dwa NOPy.



III. Brute Force [czyli to co tygryski lubia najbardziej :) ]

Kiedy juz uruchomisz poprawione crackme :), wpisz serial, wejdz do SI, i ...
ee tam, wyjdz z SI :). Nie ma sensu zebys wszystko robil(a) tak jak ja. Jesli
chcesz to mozesz sobie potem popatrzec jak to wszystko wyglada w SI, ale
teraz polukaj na dead listnig ponizej :)

[...]
* Reference To: USER32.GetWindowTextA, Ord:0000h                              
[...]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040124E(C)

:00401261 E8B6FDFFFF              call 0040101C  <-- Anty-SI (meltice)
:00401266 E895FDFFFF              call 00401000  <-- natepne Anty-SI (int 68)
:0040126B 8D8578FFFFFF            lea eax, dword ptr [ebp+FFFFFF78]  <-- do EAX idzie serial, ktory wpisalismy
:00401271 50                      push eax  
:00401272 E801040000              call 00401678  <-- ta procedura zamienia to co wpisales na wartosc HEX (polukaj w SI to zrozumiesz )
                                                                                                          (jesli teraz nie rozumiesz :)
:00401277 33DB                    xor ebx, ebx  
:00401279 8BD8                    mov ebx, eax <-- przerobiony serial do EBX
:0040127B 83E80C                  sub eax, 0000000C <-- odejmowanko :)
:0040127E 03D8                    add ebx, eax  <-- dodawanko (:
:00401280 0FCB                    bswap ebx <-- jesli w EBX bylo np. 12345678 to po tej instrukcji bedzie 87654321
:00401282 33C3                    xor eax, ebx
:00401284 F7E8                    imul eax
:00401286 93                      xchg eax,ebx  <-- wymiana rejsetrow
:00401287 2BC3                    sub eax, ebx
:00401289 C1C005                  rol eax, 05
:0040128C 0FC8                    bswap eax  <-- znowu
:0040128E D1E8                    shr eax, 1
:00401290 3DDAF9B377              cmp eax, 77B3F9DA  <-- ostateczne porownanie
:00401295 751A                    jne 004012B1 <-- jesli sie nie zgadza to papa :,(
:00401297 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Crackmesik moowi:"
                                  |
:00401299 6851334000              push 00403351

* Possible StringData Ref from Data Obj ->"Hieh ... Zlamales ... teraz szybciutko "
                                        ->"mejl do exe_chinc@go2.pl :)"
                                  |
:0040129E 687E304000              push 0040307E
:004012A3 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0000h  
----------------------------------------------------------------------------
Szczerze mowiac nie wiem czy ta procedurke mozna odwrocic (jesli ktos wie jak
to mail me), wiec postanowilem napisac programik sprawdzajacy wszystkie mozliwosci
(czyli metoda "Brute-foce").

PSEDO KOD:

                                        START
                                          |
                                        INT 3
                                          |
                                   serial:= serial+1  <------------------+                   
                                          |                              |
                           konwertuj serial na ciag ASCII                |
                                          |                              |
                  przepusc otrzymany ciag ASCII przez procke z crackme   |
                                          |                              |
                                 porownaj EAX z 77B3F9DAh                |
                                          |                              |
                                 JESLI SIE NIE ZGADZA -------------------+ 
                                          |
                                        INT 3
                                          |
                                        RET :)
                                        
Zawsze mi sie podobaly takie schemaciki :) ....

Zrodlo keygena jest dolaczone do tego tutoriala.

Wyrazy szacunku:

Kali  - jednak brute force nie jest taki zly :)
maxim[] - cigle myslisz ze jestem z policji ? 
coxoc - rozwale ten @#%$%@#% kalkulator chocby nie wiem co :)
Chendler - az sie lezka w oku kreci jak sobie przypomne to Twoje opowiadanie :)
^LuCaS^ - mi by sie nie chcialo pisac kompilatora (bo i po co ?) :)

Wyrazy (NEG szacunku):

 Micro$oft  - za wasze cholerne dziury, spywere, wysoki ceny, mase bledow i durne zabezpieczenia! 
             Wiecie co oni robia ? Kiedy polaczysz sie z serwerem Micro$oftu, ten zasysa
             WSZYSTKO z Twojego rejestru ! Jesli sie kapna ze masz niezarejestrowana wersje
             to sla do Ciebie pisemko czy aby Twoja winda jest legalna. Co za !@!@#@$%
             
XtreMe-43 - :-PPPP

 Poza tym to wszystkich lubie :)


          Ŀ
           Motto: NIE NALEZY PLUC W MIEJSCACH PUBLICZNYCH !           
          

       [strasznie modne sie teraz zrobily te motta, wiec ja tez mam jedno:)] 

