|
Tutorial Cracking :
Icon Manager v2.0
|
Target : Icon Manager 2.0
Tools : W32DAsm v89
I. Approaching Kayaknya program ini dibuat oleh orang Rusia dech
(EGP). Well, anyway... program ini dibuat make Delphi, jadi lumayan
mudah ngecracknya. Udah dech, sekarang jalanin Icon Manager dan
click Help->Register. Trus masukin password kamu. Asal-asalan aja
dech. Gua make 12345, lalu teken Enter (Jangan click Register Now,
soalnya kamu nanti dibawa oleh browser kamu menuju tempat registrasi
di internet). Boom! Kotak jelek keluar dengan pesan "Invalid
password". Nah, catat pesan ini.
II. Tracing Sekarang, buka
W32DAsm kamu dan disassembly Icon Manager. Setelah selesai, click
pada Refs->String Data References trus cari "Invalid password".
Nah, kalo dah ketemu, click dua kali. Kamu akan dapetin tampilan
seperti ini:
* Referenced by a CALL at Addresses:
|:0045B1A7 , :0045B1BF , :0045B1E7 <-- Wih, 3
nich!
| * Possible StringData Ref from Code
Obj ->"Invalid Password" <-- Kita disini | :0045B128
B850B14500 mov eax, 0045B150 :0045B12D E886DCFEFF call 00448DB8
<-- Tampilin kotak jelek :0045B132 A10C344600 mov eax, dword
ptr [0046340C] :0045B137 8B80D8020000 mov eax, dword ptr
[eax+000002D8] :0045B13D 33D2 xor edx, edx :0045B13F E8D8DEFFFF
call 0045901C :0045B144 C3 ret
Nah, kita tau kalo ada 3 alamat tempat
instruksi ini dipanggil, yaitu alamat 0045B1A7, 0045B1BF, dan
0045B1E7. Karena ada tiga, kita liat aja yang pertama dulu, OK?
Teken Shift+F12 lalu masukkan 0045B1A7, trus click OK.
* Referenced by a (U)nconditional or
(C)onditional Jump at Address: |:0045B117(C) | :0045B17A
668B01 mov ax, word ptr [ecx] :0045B17D 6683F80D cmp ax, 000D
:0045B181 0F8588000000 jne 0045B20F :0045B187 8D55FC lea
edx, dword ptr [ebp-04] :0045B18A A10C344600 mov eax, dword ptr
[0046340C] :0045B18F 8B80D8020000 mov eax, dword ptr
[eax+000002D8] :0045B195 E8F6DDFFFF call 00458F90 :0045B19A
8B45FC mov eax, dword ptr [ebp-04] :0045B19D E8928AFAFF call
00403C34 :0045B1A2 83F80A cmp eax, 0000000A :0045B1A5 7407
je 0045B1AE :0045B1A7 E87CFFFFFF call 0045B128 :0045B1AC
EB61 jmp 0045B20F
Waduh, kok aneh? Hehehe... kayaknya
kita salah nyari, dech. Nggak ngerti yach? Gua juga nich (maklum
juga masih newbie). Eh tapi jangan panik dulu, kita liat aja di
Refs->String Data References dan cari kalimat-kalimat tanda
registrasi sukses (seperti: congratulation, thank you, de el el). Ah
HA! Ketemu! click dua kali ach..
* Referenced by a (U)nconditional or
(C)onditional Jump at Address: |:0045B1BD(C) | :0045B1C6 8D45FC
lea eax, dword ptr [ebp-04] :0045B1C9 B902000000 mov ecx,
00000002 :0045B1CE BA01000000 mov edx, 00000001 :0045B1D3
E8A08CFAFF call 00403E78 :0045B1D8 8B45FC mov eax, dword ptr
[ebp-04]
* Possible StringData Ref from Code Obj
->"107519Ma" <-- Hmm.. mencurigakan | :0045B1DB BA3CB24500
mov edx, 0045B23C <-- Simpan pada edx :0045B1E0 E85F8BFAFF
call 00403D44 <-- Menarik... :0045B1E5 7407 je 0045B1EE <--
kalo = 0 registrasi sukses :0045B1E7 E83CFFFFFF call 0045B128
:0045B1EC EB21 jmp 0045B20F
* Referenced by a (U)nconditional or
(C)onditional Jump at Address: |:0045B1E5(C) <--
jump?
| * Possible StringData Ref from Code
Obj ->"Congratulation!" <-- Ini dia! | :0045B1EE B850B24500
mov eax, 0045B250 :0045B1F3 E8C0DBFEFF call 00448DB8
Kita lihat dulu pada string "107519Ma",
kayaknya menarik banget. Mungkinkah itu passwordnya? Yuk kita coba!
(tanpa tanda petik!) Jalanin Icon Manager lagi, trus register lagi.
Boom! "Invalid password". Lho, kok? Jangan khawatir, kayaknya masih
kurang info nich. Lihat lagi di alamat 0045B1E0 dan 0045B1E5.
Program memanggil call dan diikuti je 0045B1EE. Yup, benar. Call ini
memang menarik. Trace yuk. Letakkan pointer pada 0045B1E0, click dua
kali sampe berubah jadi ijo, trus teken tombol kanan.
* Referenced by a CALL at Addresses:
|:0040F74F , :00414347 , :004152F5 , :0041A49D , :0041B308
|:0042649E , :00426529 , :00427167 , :00427404 , :00431D0F
|:00432315 , :00432485 , :004325F9 , :004354F5 , :004355B9
|:00435994 , :00435A53 , :00435EAE , :004360CE , :00436639
|:004367F7 , :00443FB7 , :0044AEF7 , :0044B8F4 , :00451D40
|:00451D4F , :00451D5E , :00451D6D , :00451D7C , :00458F3C
|:00459321 , :0045B1E0 | :00403D44 53 push ebx :00403D45 56
push esi :00403D46 57 push edi :00403D47 89C6 mov esi, eax
:00403D49 89D7 mov edi, edx <-- edi=edx :00403D4B 39D0 cmp
eax, edx <-- bandingkan edx dengan eax :00403D4D 0F848F000000
je 00403DE2 <-- bila sama, lompat
Wuihh, banyak bener nich yang manggil
fungsi ini. Kayaknya intstruksi ini umum digunakan. Sekarang akan
kita cari edx, kenapa edx? soalnya pada instruksi sebelumnya, pada
alamat 0045B1DB, string "107519Ma" dimasukkan ke EDX. Ini nich
instruksi sebelumnya:
* Possible StringData Ref from Code Obj
->"107519Ma" <-- Hmm.. mencurigakan | :0045B1DB BA3CB24500
mov edx, 0045B23C <-- Simpan pada edx
Nah, pada alamat 00403D49, edx
dimasukkan ke edi dan dibandingkan dengan eax pada alamat 00403D4B.
Jadi, kesimpulannya: call ini cuman membandingkan antara string
"107519Ma" dengan password kita. Kita liat lagi pada alamat
00403D4D, program akan lompat ke alamat 00403DE2 kalo perbandingan
sama. Nah kita liat aja alamat 00403DE2.
* Referenced by a (U)nconditional or
(C)onditional Jump at Addresses: |:00403D4D(C), :00403D9F(C),
:00403DA6(C), :00403DB9(C), :00403DBD(U) |:00403DC4(U),
:00403DCB(U), :00403DD0(C), :00403DD4(C), :00403DDE(C) |
:00403DE2 5F pop edi :00403DE3 5E pop esi :00403DE4 5B pop
ebx :00403DE5 C3 ret <-- balik ach..
Oh, jadi langsung keluar nich. Jadi
instruksi cmp edi, edx masih berlaku. Sekarang letakkan pointer pada
alamat 00403DE5 lalu teken tombol kiri untuk keluar dari
call
* Referenced by a (U)nconditional or
(C)onditional Jump at Address: |:0045B1BD(C) | :0045B1C6 8D45FC
lea eax, dword ptr [ebp-04] :0045B1C9 B902000000 mov ecx,
00000002 :0045B1CE BA01000000 mov edx, 00000001 :0045B1D3
E8A08CFAFF call 00403E78 :0045B1D8 8B45FC mov eax, dword ptr
[ebp-04]
* Possible StringData Ref from Code Obj
->"107519Ma" <-- Hmm.. mencurigakan | :0045B1DB BA3CB24500
mov edx, 0045B23C <-- Simpan pada edx :0045B1E0 E85F8BFAFF
call 00403D44 <-- Bandingkan :0045B1E5 7407 je 0045B1EE <--
kalo perbandingan sama registrasi sukses :0045B1E7 E83CFFFFFF
call 0045B128 :0045B1EC EB21 jmp 0045B20F
Jadi passwordnya adalah "107519Ma", lho
tapi kenapa tadi nggak bisa? Wah, pasti ada yang nggak bener nich.
OK, kita lihat dulu pada alamat 0045B1BD tempat ia
dipanggil.
* Referenced by a (U)nconditional or
(C)onditional Jump at Address: |:0045B1A5(C) | :0045B1AE
8B45FC mov eax, dword ptr [ebp-04] <-- eax=password palsu kita
:0045B1B1 803849 cmp byte ptr [eax], 49 <- Apakah karakter
pertama=41h? :0045B1B4 7509 jne 0045B1BF <-- Kalo nggak sama,
lompat :0045B1B6 8B45FC mov eax, dword ptr [ebp-04] <--
eax=password palsu kita :0045B1B9 80780147 cmp byte ptr
[eax+01], 47 <-- Apakah karakter kedua=47h? :0045B1BD 7407 je
0045B1C6 <-- kalo ya, lompat
Nah, kita tau kalo program melihat
karakter pertama dan kedua password kita, lalu membandingkan
"107519Ma" (tanpa tanda petik" dengan sisa password palsu
kita. 1. 41h = I 2. 47h = G
Kesimpulannya: * Password yang asli
adalah I+G+107519Ma = IG107519Ma
Coba lagi sekarang. Hore! Sekarang
bisa...
|