|
Tutorial Cracking : DLL Demon v1.0
|
Target : DLL Demon v1.0
Tool : SoftIce v4.05, W32Dasm v8.93, Hex Workshop v4.10
Pertama, jalankan DLL Demon dalam keadaan normal dan catat hal-hal yang dianggap penting.
Maka DLL Demon akan menampilkan sebuah Message Box bertuliskan "Invalid" setiap S/N yang
dimasukan tidak tepat, pesan inilah yang dirubah.
Kemudian langkah berikutnya adalah men-disassembly DLL Demon. Gunakan W32Dasm 8.93
untuk mengkonveersikan file DLLDemon.exe menjadi listing assembly. Kemudian carilah
string "Invalid" dalam listing itu dengan menggunakan fasilitas String Data References
yang tersedia di WDasm. Klik dua kali pada tulisan "String" di dalam kotak String Data
References, maka Anda akan dibawa menuju perintah - perintah yang berhubungan dengan
string tersebut :
:00461AF6 E839EBFBFF call 00420634
:00461AFB 8B45F4 mov eax, dword ptr [ebp-0C]
:00461AFE 8D4DF8 lea ecx, dword ptr [ebp-08]
:00461B01 33D2 xor edx, edx
:00461B03 E8C45B0000 call 004676CC
:00461B08 8B55F8 mov edx, dword ptr [ebp-08]
:00461B0B 58 pop eax
:00461B0C E87F21FAFF call 00403C90 ;Pengecekan S/N
:00461B11 7424 je 00461B37 ;Lompat jika S/N cocok
:00461B13 6A10 push 00000010
* Possible StringData Ref from Code Obj ->"Error"
:00461B15 B9A41B4600 mov ecx, 00461BA4
* Possible StringData Ref from Code Obj ->"Invalid"
:00461B1A BAAC1B4600 mov edx, 00461BAC ;Anda ada di sini
:00461B1F A100B04600 mov eax, dword ptr [0046B000]
:00461B24 8B00 mov eax, dword ptr [eax]
:00461B26 E821E8FCFF call 0043034C
:00461B2B C7835001000002000000 mov dword ptr [ebx+00000150], 00000002
:00461B35 EB0F jmp 00461B46
Perhatikan listing assembly di atas, pada Offset 00461B1A - 00461B35 adalah perintah -
perintah yang akan menghasilkan Message box bertulisakn "Invalid". Telusuri perintah -
perintah di atasnya, seharusnya rutin pengecekan serial numbernya tidak terlalu jauh
dari Offset tersebut.
Pada Offset :00461B11 ada sebuah Conditional Jump yang mencurugakan. Kenapa mencurigakan ?
Karena perintah tersebut akan merubah alur program tersebut sehingga apa yang akan
ditampilkan ke layar monitor bisa berbeda, MessageBox bertuliskan Invalid ataukah
sebuah MessageBox yang berisi pesan - pesan "Thank you........". Tapi mucul pertanyaan
lain, bagaimana proteksi ini bisa menentukan MessageBox mana yang akan ditampilkan ?
Perintah JE ( Jump If Equal ) ini akan dijalankan apabila Call di atasnya memberi
isyarat bahwa S/N yang dimasukan adalah S/N yang tepat. Terlihat jelas apa yang harus
dilakukan, dengan mengganti JE menjadi JNE, mungkin masalah tersebut akan selesai.
Ada beberapa cara untuk merubah JE menjadi JNE, untuk cara nomor dua dan tiga, Anda
harus terlebih dulu berada di dalam lingkungan SoftICE. Sebelum menekan tombol "Register Me",
tekan CTRL-D dan pasang Breakpoint pada Hmemcpy ( BPX Hmemcpy ), lalu CTRL-D lagi untuk
kembali ke Windows. Setelah menekan tombol "Register Me", Anda akan masuk ke dalam SoftICE,
tekan F12 sebanyak 7 kali setelah itu bersihkan Breakpoint dengan perintah BC *. Kemudian
ketik G 0461B11 untuk langsung menuju lokasi yang dimaksud, setelah itu jalankan cara
nomor dua atau tiga.
Cara untuk merubah JE menjadi JNE ( pilih salah satu ) :
Dengan Hex Editor :
Rubahlah dari 7424 menjadi 7524.
Catatan :
74xx = JE ( Jump If Equal )
75xx = JNE ( Jump If Not Equal )
Dengan SoftICE, ada 2 cara :
1. Gunakan perintah A 0461B11.
:0461B11 JNZ 00461B37
:0461B13 ;Tekan enter
2. Gunakan perintah R EIP=00461B37
Catatan : Perintah R adalah perintah untuk merubah nilai register, sementara perintah R
EIP=00461B37 dimaksudkan untuk memaksa Instruction Pointer mengarah ke 00461B37, sehingga
perintah yang akan dikerjakan selanjutnya adalah perintah yang berada di lokasi 00461B37.
Tapi ternyata tidak semudah itu, pesan "Invalid" memang tidak tampak lagi, akan tetapi
masih saja belum teregister. Ini disebabkan karena nama dan S/N palsu tadi tidak dimasukan
ke dalam System Registry, sehingga pada saat DLL Demon mengecek System Registry, tidak
menemukannya, dan akan tetap dianggap sebagai Unregistered User.
Sebaiknya gunakan pendekatan lain, untuk itu kembali ke WDasm. Coba telusuri perintah-perintah
sebelum Call 00403C90 dipanggil, perhatikan Offset :00461B08. Berapa nilai yang dimasukan
ke dalam EDX ? Untuk mengetahui jawabannya gunakan SoftICE.
Gunakan cara seperti diatas untuk masuk ke dalam SoftICE dan memasang BPX Hmemcpy. Setelah
terperangkap kembali di dalam SoftICE dan menekan F12 sebanyak 7 kali, lompat ke Offset
00461B08 dengan perintah G 00461B08. Setelah berhenti tepat pada posisi 00461B08, tekan
F10 satu kali, setelah melewati baris perintah tersebut, periksa nilai EDX sekarang
dengan perintah D EDX. Ternyata EDX berisi S/N yang sesungguhnya, mudah sekali mendapatkan
S/N aslinya.
Bila Anda mau, Anda bisa langsung menggunakan S/N tersebut, tapi itu bukan tujuannya, tapi
meminta DLL Demon untuk menampilkan S/N asli tersebut sebagai pengganti pesan "Invalid"
yang muncul apabila memasukan S/N yang salah.
Sekarang Anda tahu dimana S/N asli di simpan di dalam memory, DLL Demon menyimpan S/N
tersebut pada alamat memori yang ditunjuk oleh [EBP-08], sementara itu pada perintah
di bawahnya POP EAX, program akan mengambil S/N palsu yang dimasukan tadi dari dalam
stack. Lanjutkan kembali, tekan F10 sampai mencapai lokasi :00461B11, tempat penentuan
pilihan antara Registered atau Unregistered User.
Karena S/N yang dimasukan tadi salah, tentunya tidak akan melompat ke 00461B37, tapi
terus ke baris berikutnya. Dalam WDasm, lokasi :00461B15 adalah tempat untuk memasukan
string "Error". Bila ingin tahu apa yang terjadi dalam SoftICE, ketik D ECX, dan ternyata
ECX berisi string "Error". Pada baris berikutnya, dengan cara yang sama, kita bisa
melihat bahwa EDX berisi string "Invalid" .
Sampai di sini sebaiknya Anda berhenti sebentar , dan perhatikan apa yang telah
diketahui sebelumnya, lalu coba susun langkah selanjutnya :
:00461B08 mov edx, dword ptr [ebp-08] ;S/N asli
:00461B0B pop eax ;S/N palsu yang dimasukan
:00461B0C call 00403C90 ;Rutin pembandingan S/N
:00461B11 je 00461B37 ;Lompat jika S/N cocok
:00461B13 push 00000010
:00461B15 mov ecx, 00461BA4 ;menyimpan string "Error"
:00461B1A mov edx, 00461BAC ;menyimpan string "Invalid"
Perintah - perintah selanjutnya akan menampilkan MessageBox dengan string yang ada
di dalam EDX atau ECX, sementara Anda tidak ingin "Invalid" atau "Error" yang muncul,
tapi ingin melihat S/N asli tadi sebagai gantinya. Untuk itu perlu mengganti pesan
"Invalid" yang diisikan ke dalam EDX dengan alamat memori tempat S/N asli berada.
SoftICE memberikan fasilitas untuk merubah perintah assembly yang sedang ditelusuri,
yaitu dengan perintah A :
Ketik A 00461B1A, lalu masukan perintah- erintah baru seperti di bawah ini :
:00461B1A MOV EDX,[EBP-08]
:00461B1D NOP
:00461B1E NOP
:00461B1F tekan Enter untuk menghentikan perintah A
Catatan : Perintah A ini tidak merubah file secara permanen, karena itu, apabila terjadi
kesalahan, Anda hanya perlu me-restart program tersebut dan semuanya kembali ke keadaan
semula.
Seperti yang terlihat, setelah memasukan S/N asli ke dalam EDX agar ditampilkan di
dalam Messagebox yang akan keluar. Dua perintah NOP berikutnya adalah perintah tambahan
agar tidak terjadi kesalahan. Ini perlu dilakukan karena adanya perbedaan ukuran antara
perintah sebelumnya dengan perintah yang baru saja dimasukan. Perhatikan perbedaan kedua
perintah tersebut :
:00461B1A BAAC1B4600 mov edx, 00461BAC
dengan
:00461B1A 8B55F8 mov EDX,[EBP-08]
Perhatikan bahasa mesin di atas ( kode hexa ), perintah pertama membutuhkan 5 byte
(BAAC1B4600) sedangkan perintah baru yang diisikan hanya sebesar 3 byte (8B55F8). Dalam
merubah (patching) suatu program, perintah asli dan perintah baru harus memiliki ukuran
yang sama, hal ini untuk menghindari error pada saat menjalankan program tersebut . Oleh
karena itu kita harus menambah 2 byte tambahan yaitu NOP (90) sebanyak 2 kali sehingga
sekarang perintah baru tersebut juga berukuran 5 byte (8B55F89090).
Catatan : NOP ( No Operation ) adalah perintah Assembler dengan kode hexa 90h. Besarnya
perintah ini adalah 1 byte dan tidak melakukan operasi apa - apa. Ini sangat tepat untuk
ditambahkan ke dalam perintah baru yang tidak sesuai ukurannya.
Tekan Ctrl-D kembali dan lihat hasilnya. Pada MessageBox yang keluar, pesan "Invalid"
sudah tidak terlihat lagi, sebagai gantinya, S/N asli ditampilkan. Gunakan nama dan S/N
yang muncul tersebut dan kita akan dianggap sebagai Registered User
Untuk mem-patch program tersebut, edit DLLDemon.EXE dengan Hex Editor yang Anda punya
dan cari :
BAAC1B4600.
00060F1A BA AC 1B 46 00 A1 00 B0 46 00 8B 00 E8 21
Rubah dengan :
00060F1A 8B 55 F8 90 90 A1 00 B0 46 00 8B 00 E8 21
Inilah Cara Melacak Serial Number
Metode ini cukup mudah untuk dilaksanakan tetapi sayangnya tidak semua sistem proteksi
sejenis, dapat crack dengan cara ini. Sebelum Anda merubah perintah dalam program target,
Anda harus terlebih dulu yakin kalau S/N asli tadi masih ada pada lokasi memori yang sama.
Karena jika serial number tersebut telah hilang dari memory, Anda tidak akan bisa
menampilkan-nya.
Ikuti langkah di bawah ini, tapi ingat setiap komputer mungkin akan mempunyai nilai
yang berbeda.
:00461B08 mov edx, dword ptr [ebp-08]
Setelah mencapai lokasi di atas, ketik D [EBP-08], dan inilah hasilnya :
0030:006EF994 A4 B6 83 00 E4 BB 83 00 - 9C 67 83 00 67 10 42 00 .........g..g.B.
Maksud dari [EBP-08] adalah untuk mengarahkan pointer pada alamat yang ditunjuk oleh
EBP-08, karena itu Anda harus menuju ke alamat yang ada di dalam EBP-08, dalam contoh
ini adalah 0083B6A4 ( posisinya harus dibalik ).
Ketik D 0083B6A4, dan hasilnya adalah :
0030:0083B6A4 44 53 37 31 2D 31 33 39 - 34 2D 33 34 00 00 00 00 DS72-8422-210....
Yang berada di kolom paling kanan adalah S/N asli. Setelah sampai pada lokasi 00461B1F,
cek kembali isi dari [EBP-08] dengan cara yang sama. Apabila S/N tersebut masih ada
berarti Anda bisa menggunakan metode ini, tapi jika S/N tersebut sudah tidak ada lagi
atau sudah berubah maka metode ini tidak dapat dilaksanakan.
|