Works best under FAR.


                   ͻ ͻ    ͻ ͻ
                    Ȼ    
                   ͻ͹ Ȼ   ͻ͹
                              ɻȻ       
                              ȻȻ      
                  Total  New   Ȼȼ bie   Tutorial
                                Ȼ      
                                 Ȼ      
                              #11 Ȼ      
                        ͼ      ͼ     ͼ      ͼ



                     
                    ۱۰    \/
                   ۱۱   *
                   ۱۱ۻ  \
                    ۱۲ ͼ
                     




Witam witam,

Mam tylko kilka minut na wstep, bo zaraz zaczyna sie Episode I (gowniany,
bo gowniany), wiec krotko. Dzisiaj bedzie o ConquerMe by MisterE. Zaciekawila
mnie wielostopniowosc, i jak napisal autor "a whole new world of protection
schemes". Jak sie okazalo nie sa one takie znowu trudne (i obecnie nie takie
nowe).


Toolz:

SoftIce		-"strzelanie do wrobla z armaty" tym razem
WinDasm		-nic ciekawego nie da sie napisac
Kawa		-"I love coffee!!"
SOAD		-Toxicity


I. Battle One: Sharpening Swords

Odpalamy WinDasma, lookamy na string refs i oto co ciekawego widac:

"CrackMe1"
"CrackMe2"
"CrackMe3"
"CrackMe4"

Wyglada mi to na nazwy dialogow :) Skaczemy do pierwszego stringa:

:0040118C B8AC1C4000              mov eax, 00401CAC        <--adres dialog proc
:00401191 6A00                    push 00000000
:00401193 50                      push eax
:00401194 FF7508                  push [ebp+08]

* Possible StringData Ref from Data Obj ->"CrackMe1"
                                  |
:00401197 684A314000              push 0040314A
:0040119C FF352C364000            push dword ptr [0040362C]

* Reference To: USER32.DialogBoxParamA, Ord:0092h
                                  |
:004011A2 E8B50C0000              Call 00401E5C

A wiec skaczemy pod 401CACh, tak samo znajduje sie procki kolejnych poziomow.
Poczatek procki jest nudny jak zawsze, olewamy sprawdzenia kilku messagow,
az do:

:00401D1D 3D11010000              cmp eax, 00000111    <--WM_COMMAND
:00401D22 0F8595000000            jne 00401DBD
:00401D28 8B4510                  mov eax, dword ptr [ebp+10]
:00401D2B 663DCE00                cmp ax, 00CE         <--ID guziora "OK"
:00401D2F 7574                    jne 00401DA5

I co tam mamy dalej...  Dwa wywolania SendDlgItemMessageA, pierwszy sprawdza,
czy serial ma 16h znakow, drugi zczytuje text. Nastepnie pokazuje sie wywolanie
lstrcmpA :)) A wiec breakpoint na to i dostajemy: 

Name:   Lilith
Serial: 6595-OEM-0001695-96524



II. Battle Two: The Village

Znajdujemy sprawdzanie guziora jak poprzednio. Szybkie lookniecie na kod od razu
pokazuje, ze guzior "OK" zawsze prowadzi do info "Wrong serial". Caly check
jest podwieszony pod guzior "Cancel".

Na poczatku mamy probe otwarcia pliku 1.123 i wczytania 14h bajtow. Stworzylem
sobie taki plik, z bajtami o kolejnych wartosciach 1, 2, 3, 4, 5 itd. Jedziemy
w kodzie nizej, nizej.... lstrcmpA :))

File:   1, 2, 3, 4, 5...
Serial: 189518220

Name jak sie okazuje nie ma znaczenia.



III. Battle Three: The Magic Door

Tym razem checkboxy. Znalezienie procki jak wczesniej, nie ma sensu jej tu 
wklejac. Wszystko opiera sie na funkcji IsDlgButtonChecked, ktora zwraca 1
jesli checked. Wszystko jest bardzo proste, od razu mozna zobaczyc jak maja
byc ustawione boxy:

V O O V V O V V O V



IV. Battle Four: The Showdown

Troche tu jest syfu, jak widac, trzy editboxy, piec menu, i jeden checkbox.
Check sprawdza prosciutko po kolei stany boxow:

checkbox  -szary
menu1     -4
menu2     -2
menu3     -5
menu4     -nie sprawdzane
menu5     -1

Potem jest prosciutkie sprawdzenie zawartosci pola Your Serial, ma byc "None" :)
I wreszcie Your activation Code:

:0040177B 83F806                  cmp eax, 00000006         <--serial dluzszy 
:0040177E 0F869E000000            jbe 00401822              <--niz  6 znakow
:00401784 58                      pop eax
:00401785 83F803                  cmp eax, 00000003
:00401788 0F8694000000            jbe 00401822
:0040178E 33C0                    xor eax, eax
:00401790 A034364000              mov al, byte ptr [00403634]  <--serial znak 1
:00401795 8A253A3A4000            mov ah, byte ptr [00403A3A]  <--name znak 1
:0040179B C1E010                  shl eax, 10
:0040179E 8A2535364000            mov ah, byte ptr [00403635]  <--serial znak 2
:004017A4 A03B3A4000              mov al, byte ptr [00403A3B]  <--name znak 2
:004017A9 8A1D36364000            mov bl, byte ptr [00403636]  <--serial znak 3
:004017AF 8A3D3C3A4000            mov bh, byte ptr [00403A3C]  <--name znak 3
:004017B5 C1E310                  shl ebx, 10
:004017B8 8A3D37364000            mov bh, byte ptr [00403637]  <--serial znak 4
:004017BE 8A1D3E3A4000            mov bl, byte ptr [00403A3E]  <--name znak 5
:004017C4 33C3                    xor eax, ebx
:004017C6 8BD8                    mov ebx, eax
:004017C8 C1EB08                  shr ebx, 08
:004017CB 80FF7F                  cmp bh, 7F
:004017CE 7603                    jbe 004017D3
:004017D0 80C782                  add bh, 82

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004017CE(C)
|
:004017D3 80FF21                  cmp bh, 21
:004017D6 7303                    jnb 004017DB
:004017D8 80C720                  add bh, 20

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004017D6(C)
|
:004017DB 80FB7F                  cmp bl, 7F
:004017DE 7603                    jbe 004017E3
:004017E0 80C382                  add bl, 82

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004017DE(C)
|
:004017E3 80FB21                  cmp bl, 21
:004017E6 7303                    jnb 004017EB
:004017E8 80C320                  add bl, 20

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004017E6(C)
|
:004017EB C1E308                  shl ebx, 08
:004017EE 02D8                    add bl, al
:004017F0 331D3D3A4000            xor ebx, dword ptr [00403A3D]
:004017F6 321D3B3C4000            xor bl, byte ptr [00403C3B]
:004017FC 0BDB                    or ebx, ebx
:004017FE 7522                    jne 00401822


I tak to wyglada. Chyba nie ma za bardzo czego tlumaczyc, dosc latwo mozna 
wykombinowac odpowiednie wartosci. Zajebiscie chce mi sie spac i nie mam sily
tego opisywac. Tak czy inaczej:

Name:   Lilith
Serial: AA1H @p


Krolestwo zdobyte, wredny wrog zdycha w meczarniach. Prosta jest ta cala 
wojna :)



Done by Lilith from AtomicCrk


special thanx:

AtomicCrk crew
Ula
Petr0v
MisterE


Jesli przebrnales przez ta kupe grafomanskich bredni, to mozesz sie pochwalic:

lilith_atomiccrk@poczta.onet.pl