Target : Waste Whacker 3.2
Tool : SoftICE v4.05
Program ini akan menampilkan tulisan "Trial Version...Purcahase it for
$19.95" selama kita masih belum memasukan kode registrasi yang benar.
Seperti biasa kita memulai dengan mengamati Progrtam Target kita. Waste Whacker
menyediakan menu khusus untuk memasukan Nama dan S/N bagi User yang telah membeli s/w
tersebut ( Option >> Register ). Jika kita memasukan Nama dan S/N yang salah, akan
tampil sebuah MessageBox bertuliskan "Registration Failed" dan tetapi kita masih
tetap diperbolehkan menggunakan Waste Whacker ( baik bukan ? ;-) )
Oke sekarang ulangi langkah di atas, masukan kembali Nama dan sembarang s/n, untuk
tutorial ini, aku masukin :
User Name
: CHuPaCaBRa
Registration Number : 123454321
Sebelum menekan tombol OK, kita siapkan "Peralatan Perang" kita, masuk ke
SoftICE dengan menekan Ctrl-D dan pasang Breakpoint di Hmemcpy ( BPX Hmemcpy ). Kenapa
Hmemcpy ??? Aku pasang Hmemcpy karena Breakpoint ini secara umum diguanakan untuk
mengambil inputan kita.
Tekan Ctrl-D kembali dan klik tombol OK. Kau akan "terlempar" masuk ke dalam
SoftICE pada rutin Hmemcpy. Saat itu kau belum berada di badan program, karena itu tekan
F12 beberapa kali sampai kau sudah masuk ke dalam program Waste Whacker.
Break due to BPX KERNEL!HMEMCPY
0177:00475545 MOV EDX,[EBP-0C]
==> Kita di sini
Ketik D EDX untuk melihat apa yang baru saja dibaca oleh Hmemcpy.
:d edx
017F:00C7DF60 31 32 33 34 35 34 33 32-31 00
C7 00 D8 DF C7 00 123454321.......
Hmmm....ternyata program target kita ini membaca s/n yang kita masukan terlebih dulu.
Pasang Breakpoint di memory yang bersangkutan supaya SoftICE akan berhenti jika program
mencoba mengakses s/n kita. Ketik BPM 017F:00C7DF60.
Sementara ini nama kita belum dibaca, tekan F5 satu kali, SoftICE kembali akan berhenti
di dalam fungsi Hmemcpy. Tekan F12 beberapa kali sampai kamu kembali ke dalam badan
program.
Break due to BPX KERNEL!HMEMCPY
0177:00475561 MOV EDX,[EBP-0C]
==> Kita di sini
Cek lagi apa yang tadi dibaca oleh Hmemcpy. Ketik D EDX kembali
:d edx
017F:00C7DF78 43 48 75 50 61 43 61 42-52 61
00 00 00 00 00 00 CHuPaCaBRa......
Pasang Breakpoint di memory tersebut, BPM 017F:00C7DF78
0177:00475564 LEA EAX,[EBX+3C]
0177:00475567 CALL 00403BB0
0177:0047556C LEA ECX,[EBP-04]
0177:0047556F MOV EDX,[EBX+3C]
0177:00475572 MOV EAX,[EBX+24]
0177:00475575 CALL 00474E9C
0177:0047557A CMP DWORD PTR [EBP-04],00 ==>
Cek apa User sudah memasukan nama atau belum
Buat menyingkat waktu, tekan F5, SoftICE akan berhenti jika Program mencoba mengakses
Nama ataupun S/N yang kita masukan. Kamu bakal menemukan listing seperti ini :
0177:00474EF2 MOVZX ESI,BYTE PTR [EBP-09]
0177:00474EF6 MOV EAX,[EBP-08]
0177:00474EF9 MOV AL,[ESI+EAX-01] ; ==>
AL = Karakter dari nama yang kita masukan
0177:00474EFD CALL 00402980 ==> >Rutin Call u/ merubah
Huruf Kecil menjadi
Huruf Besar
0177:00402980 CMP AL,61 ==> >AL < 61h ( = "a" ) ???
0177:00402983 JB 0040298D ==> Lompat, jika YA !
0177:00402985 CMP AL,7A ==>
AL > 7Ah ( = "z" ) ???
0177:00402988 JA 0040298D ==>
Lompat, jika YA !
0177:0040298A SUB AL,20 ==>
AL = AL - 20h
0177:0040298D RET
0177:00474F02 ADD AL,D0
0177:00474F04 SUB AL,0A
0177:00474F06 JB 00474F0E
0177:00474F08 ADD AL,F9
0177:00474F0A SUB AL,1A
0177:00474F0C JAE 00474F2F
0177:00474F0E MOV EAX,[EBP-08]
0177:00474F11 MOV AL,[ESI+EAX-01]
0177:00474F15 CALL 00402980 ==>
Perhatikan Rutin Call di atas
0177:00474F1A MOV EDX,EAX
0177:00474F1C LEA EAX,[EBP-1C]
0177:00474F1F CALL 00403D00
0177:00474F24 MOV EDX,[EBP-1C]
0177:00474F27 LEA EAX,[EBP-10]
0177:00474F2A CALL 00403DE0
0177:00474F2F INC BYTE PTR [EBP-09] ==>
[EBP-09] = [EBP-09] + 1
0177:00474F32 DEC BL
0177:00474F34 JNZ 00474EF2 ==>
Looping sampai semua Karakter dari User Name telah dirubah menjadi Huruf Besar
0177:00474F4B CALL 00403DD8 ==>Rutin Call untuk
meng-hitung Panjang Nama
0177:00474F50 MOV [EBP-15],AL ==>
[EBP-15] = Panjang Nama
0177:00474F53 MOV BYTE PTR [EBP-09],0C ==>
Panjang S/N = 0Ch ( = 12 karakter )
0177:00474F57 XOR EAX,EAX ==>Kosongkan register EAX
0177:00474F59 MOV AL,[EBP-15] ==> AL = Panjang Nama
0177:00474F5C CALL 00402BA4 ==> Rutin Call untuk
memilih Karakter Nama yang akan "diolah".
0177:00402BA4 IMUL EDX,[004BA040],08088405 ==> EDX=2ED03ED0h*08088405h
0177:00402BAE INC EDX ==> EDX = EDX + 1
0177:00402BAF MOV [004BA040],EDX; ==> [004BA040] = EDX
0177:00402BB5 MUL EDX ==> EAX = EAX mul EDX
0177:00402BB7 MOV EAX,EDX ==> EAX = EDX
0177:00402BB9 RET
0177:00474F61 INC EAX ==> EAX = EAX + 01h
0177:00474F62 AND EAX,000000FF ==> EAX = EAX and 000000FFh
0177:00474F67 MOV EDX,[EBP-10] ==> EDX = User Name
0177:00474F6A MOV BL,[EAX+EDX-01] ==>
BL = Karakter Name pada posisi [EAX + EDX + 01]
0177:00474F6E TEST BL,BL
0177:00474F70 JBE 00474F83
0177:00474F72 MOV EAX,0000000A ==> EAX = 0000000Ah
0177:00474F77 CALL 00402BA4 ==> Rutin Call ini sekarang
digunakan untuk menghitung S/N.
0177:00474F7C MOV [EBP-0A],AL ==>
Hasil Rutin Call di atas dimasukan ke [EBP-0A]
0177:00474F7F DEC BL ==> BL = BL - 1
0177:00474F81 JNZ 00474F72 ==>
Looping selama BL <> 0
0177:00474F86 XOR EAX,EAX ==>
Kosongkan Register EAX
0177:00474F88 MOV AL,[EBP-0A] ==> AL = [EBP-0A]
0177:00474F8B CALL 0040875C ==> Merubah nilai AL yang
berbentuk Hexa menjadi angka Decimal
0177:00474F90 MOV EDX,[EBP-1C]
0177:00474F93 LEA EAX,[EBP-14]
0177:00474F96 CALL 00403DE0 ; ==> [EBP-14] = AL
0177:00474F9B DEC BYTE PTR [EBP-09] ==> [EBP-09] = [EBP-09] - 1
0177:00474F9E JNZ 00474F57 ; ==> Looping selama 12 kali.
Langkah di atas ( 00474F57 - 00474F9E ) akan diulang sebanyak 12 kali
hingga mendapatkan sebuah serial number. Setelah keluar dari looping di atas, coba liat
apa isi [EBP-14]. Ketik D *(EBP-14)
:d *(ebp-14)
017F:00C7A3E4 37 37 31 38 31 37 33 32-38 31
32 35 00 A4 4B 00 771817328125..K.
Itu dia serial number-nya :-) Disable semua Breakpoint ( BD * ) dan kembali ke Waste
Whacker, register menurut nama dan serial number yang sudah tampak tadi dan
hasilnya......SUKSES :-)
Kalo kamu pengen nyoba ngeKrak program lain dengan proteksi serupa, kamu bisa mencoba
product DBytes lainnya di http://www.dbytes.com/
|