Target : HMonitor v3.0.1.2
Tool : SoftIce v4.05, W32dasm v8.93, Hex Workshop v4.10
Program ini memberikan batas waktu bagi 30 hari bagi user untuk menggunakannya, jika
telah melewati batas waktu, sebuah "pesan nista" akan muncul setiap kali kita
akan menjalankannya, tetapi program masih tetap dapat digunakan sepenuhnya.
Setelah program dijalankan akan keluar sebuah window yang menampilkan data-data h/w di
dalam komputer kita sementara icon HMonitor diletakan di taskbar Win95/98. Window yang
muncul tidak menyediakan menu apapun, kalo begitu coba cek icon di taskbar....klik kanan
di icon tersebut dan akan muncul menu singkat. Kalo kamu sudah mencoba semua menu yang
ada, kamu akan menyadari bahwa tidak ada tempat untuk mengisi nama ato s/n kita ke dalam
program, yang ada hanya pesan untuk membeli program tersebut pada menu About. kalo tidak
ada tempat untuk mengisi nama ato s/n, bagaimana cara program itu mengetahui bahwa user
telah membeli ato masih hanya mencobanya saja selama 30 hari ???
Setelah membaca file Register.txt yang ada di foldernya, ternyata kita harus mendaftar
via Internet dan pembuat program tersebut nantinya akan mengirim informasi mengenai
registrasi melalui e-mail. Informasi yang bagaimana ??? Karena aku ngak pernah membayar
program ini jadi aku ngak bisa menjawab pertanyaan itu.......but it doesn't matter :-)
Menurut apa yang ada di License.txt, program hanya boleh dijalankan dalam jangka waktu
30 hari, apa yang akan terjadi kalo kita menggunakannya lebih dari itu ??? Untuk
mencobanya, majukan tanggal komputer kamu satu bulan ke depan dan coba jalnakan kembali
HMonitor.....ternyata setelah melewati 30 hari, HMonitor akan menampilkan "pesan
nista" yang isinya sama dengan apa yang kita liat di menu About tadi. Tetapi kita
dapat melewati "pesan nista" tersebut hanya dengan menekan tombol Esc dan
menjalankan program seperti biasa. Kalo kamu tidak keberatan melihat pesan tersebut setiap
kali menjalankan HMonitor, kamu ngak perlu membaca tutorial ini, tapi kalo kamu membenci
pesan tersebut sama seperti aku, baca tutorial ini baik - baik dan pesan nista tersebut
akan lenyap selama-lamanya :-)
Sebelum mulai, kamu harus menghentikan HMonitor terlebih dahulu lalu dengan tanggalan
yang masih maju satu bulan ke depan, masuk ke SoftICe dengan menekan Ctrl-D dan pasang
breakpoint di GetLocalTime dengan mengetikan perintah BPX GetLocalTime.
Setelah menyiapkan breakpoint, keluar dari SoftICE dengan menekan Ctrl-D dan jalankan
program HMonitor.
Beberapa detik kemudian, kita akan terlempar ke dalam SoftICE, ini karena fungsi
GetLocalTime sedang dipanggil. Pada saat ini, kita masih berada di dalam fungsi
GetLocalTime, kita tidak perlu menghabiskan waktu di sini, untuk itu tekan F12 satu kali
dan kita akan melompat ke baris perintah setelah GetLocalTime tadi selesai dijalankan.
:00408344 E8DFD6FFFF
Call 00405A28
<== GetLocalTime
:00408349 668B4C240E
mov cx, word ptr [esp+0E]
<== CX = Tanggal Hari ini
:0040834E 668B54240A
mov dx, word ptr [esp+0A]
<== DX = Bulan
:00408353 668B442408
mov ax, word ptr
[esp+08] <== AX = Tahun
Untuk mengetahui isi CX, DX dan AX, gunakan perintah D ( D CX, D DX dan D AX ) setelah
melewati baris perintah yang bersangkutan dengan menekan F10.
Ternyata di sini, program mengambil informasi waktu pada saat itu. Kalo kamu ngak
begitu suka berlama - lama dalam mengkrak program dan hanya ingin menghilangkan
"pesan nista" yang muncul tadi, kamu bisa merubah perintah di atas sehingga
informasi waktu yang akan diterima HMonitor kapanpun ia mengecek waktu, adalah sama.
Dengan menggunakan fixed date ( bukan fixed rate :-) ), HMonitor tidak akan menyadari
bahwa telah melewati waktu yang diperbolehkan.( programnya stupid yach :-D )
Begini caranya :
Gunakan perintah A ( Assemble Code ) pada SoftICE ketika sedang berada di baris
perintah 00408349, dengan mengetik A dan menekan tombol Enter. Kemudian isi baris - baris
tersebut dengan perintah di bawah ini :
:00408349 MOV CX, 01
<== Tanggal 01 dalam Hexa
:0040834D NOP
:0040834E MOV DX, 0B
<== Bulan 11 dalam Hexa ( 0B )
:00408352 NOP
:00408353 MOV AX, 07CE <== Tahun 1998
dalam Hexa ( 07CE )
:00408357 NOP
:00408358
<== Tekan Enter untuk menghentikan perintah A
Perintah di atas memasukan tanggal, bulan dan tahun yang telah kamu tentukan, jangan
lupa informasi yang kamu masukan itu harus sama dengan tanggal, bulan dan tahun ketika
kamu menginstall HMonitor. Kenapa demikian ??? Karena tanggal penginstallan digunakan oleh
HMonitor sebagai patokan untuk menghitung jangka waktu penggunaan program dengan
membandingkannya dengan tanggal, bulan dan tahun pada saat program dipanggil. Kalo kamu
memasukan tanggal satu bulan ke depan dari saat penginstallan maka perintah di atas
percuma saja, HMonitor akan tetap mengeluarkan "pesan nista"-nya
Setelah menulis perintah di atas, ketikan BC * untuk membersihkan jebakan ( breakpoint
) yang ada di dalam SoftICE dan liat hasilnya. Pesan nista tersebut tidak muncul lagi,
karena penggunaannya masih dianggap dalam jangka waktu yang diperbolehkan tetapi kalo kamu
meliat bagian About, pesan bahwa program tersebut masih Unregistered tetap muncul. Kalo
kamu ingin mengubahnya, maka kita harus menggunakan cara yang berbeda.
Oke sekali lagi matikan HMonitor dan masuk ke dalam SoftICE, pasang kembali breakpoint
di GetLocalTime lalu jalankan HMonitor. Seperti tadi kita akan terlempar ke dalam SoftICE,
di bagian GetLocalTime. Tekan F12 satu kali dan kita kembali ke bagian program yang tadi
telah kita rubah....tapi tunggu dulu, perhatikan perintah tersebut. Kenapa perintah -
perintah tadi masih tetap sama dengan semula walaupun kamu telah merubahnya tadi,
bagaimana dengan perintah yang tadi kita masukan ??? Dengan menggunakan fungsi A, perintah
- perintah yang tadi kita masukan tidak akan disimpan, apabila kita me-restart program
yang bersangkutan, maka semua perintah - perintah awal akan kembali normal. Karena itu aku
sangat menganjurkan untuk menggunakan fungsi A ini kalo kamu masih belum yakin dengan
hasil krakmu.
Sebelum kita melangkah lebih jauh, kita perlu sedikit memahami sistem proteksi ini.
Pada saat kita menjalankan HMonitor, ia akan memeriksa apakah kita adalah Registered User,
jika tidak maka HMonitor akan menjalankan prosedur pengecekan waktu dengan memanggil
fungsi GetLoclaTime. Dengan demikian kita perlu mencari di mana proses pengecekan user (
registered or not ) itu berada, proses pengecekan itu tentunya berada sebelum fungsi
GetLocalTime dijalankan, oleh karena itu tekan F12 untuk keluar dari proses penghitungan
waktu.
:0045CAC7 E83813FEFF
call 0043DE04
:0045CACC 898379030000 mov dword ptr
[ebx+00000379], eax
:0045CAD2 E865B8FAFF
call 0040833C
:0045CAD7 E8F05DFAFF
call 004028CC
<== Kita ada di sini
Hmmm......kalo kamu menelusuri ke atas perintah - perintah tersebut, kamu ngak
menemukan Conditional Jump yang merupakan saat penentuan apakah harus dijalankan
pengecekan waktu ato tidak. Jangan putus asa dulu, coba tekan F5 satu kali, agar program
kembali dijalankan dengan normal. Ternyata kita berhenti di dalam GetLocalTime kembali,
tekan F12 satu kali, masih inget tempat ini ? :-). Kita sudah pernah ada di sini, jadi
tekan F12 sekali lagi, dan kamu akan terlempar ke sini :
:0045C3CE E88578FAFF
call 00403C58
<== Proses pengecekan
:0045C3D3 0F849C000000 je 0045C475
<== Conditional Jump
:0045C3D9 E85EBFFAFF
call 0040833C
:0045C3DE E8E964FAFF
call 004028CC
<== Kita ada di sini
Catatan :
Dead Lsiting dalam tutorial ini aku ambil dari WDasm, oleh karena itu ada sedikit
perbedaan pada Conditional Jumpnya. Pada SoftICE kau akan melihat JZ ( Jump If Zero )
sementara pada WDasm akan terlihat JE ( Jump If Equal ). Perbedaan ini tidak merubah hasil
eksekusinya.
Ahaa.......kita menemukan Conditional Jumpnya, pada lokasi 0045C3D3 ada sebuah JZ (
Jump If Zero ). Apa maksudnya ??? Perintah JZ ini akan dijalankan ( melompat ke 0045C475 )
dan tidak akan memanggil fungsi GetLocalTime jika ada sebuah nilai yang dikembalikan
bernilai 0. Nilai apa yang dimaksud ??? Untuk menjawab itu, kita harus masuk ke dalam
rutin Call yang ada di atasnya. Bersihkan breakpoint yang ada ( BC * ) dan pasang BPX di
0045C3CE dengan perintah BPX 0045C3CE. Tekan Ctrl-D dan restart HMonitor. Ketika mencapai
lokasi tersebut, kita akan terlempar ke dalam SoftICE, gunakan F8 untuk memasuki rutin
Call tersebut dan ini yang akan kamu temui.( telusuri dengan menekan F10 )
:00403C58 53
push ebx
:00403C59 56
push esi
:00403C5A 57
push edi
:00403C5B 89C6
mov esi, eax
:00403C5D 89D7
mov edi, edx
:00403C5F 39D0
cmp eax, edx
:00403C61 0F848F000000 je
00403CF6
<== No Jump
:00403C67 85F6
test esi, esi
:00403C69 7468
je 00403CD3
<== No Jump
:00403C6B 85FF
test edi, edi
:00403C6D 746B
je 00403CDA
<== Jump
:00403C6F 8B46FC
mov eax, dword ptr [esi-04]
:00403C72 8B57FC
mov edx, dword ptr [edi-04]
:00403C75 29D0
sub eax, edx
:00403C77 7702
ja 00403C7B
:00403C79 01C2
add edx, eax.
:00403CDA 8B46FC
mov eax, dword ptr [esi-04]
:00403CDD 29D0
sub eax, edx
<== Perhatikan nilai EAX
:00403CDF EB15
jmp 00403CF6
:00403CF6 5F
pop edi
:00403CF7 5E
pop esi
:00403CF8 5B
pop ebx
:00403CF9 C3
ret
<== Kembali ke 0045C3D3
Perhatikan baik - baik langkah yang tadi kamu telusuri. Seperti yang telah aku
kemukakan di atas, Conditional Jump akan memeriksa apakah nilai sebuah register 0 ato
tidak ( 0 berarti registered user ). dari langkah - langkah yang tadi kita telusuri,
satu-satunya nilai yang dirubah adalah nilai register EAX ( liat lokasi 00403CDD ) Kalo
kamu memperhatikan nilai EAX, nilai itu tidak 0 ketika kembali ke Conditional Jump ( pada
lokasi 0045C3D3 ) sehingga perintah Jump tidak dijalankan melainkan fungsi GetLocalTime
yang akan dijalankan.
Sekarang kita memiliki 2 cara pilihan untuk mengkrak program ini, yaitu :
1. Rubah Conditional Jump menjadi Jump murni dengan menggunakan perintah A ketika
berada di lokasi :0045C3D3
:0045C3D3 JMP 0045C475
:0045C3D8 NOP
:0045C3D9
<== Tekan Enter
Dengan demikian, registered or not, HMonitor tidak
akan menjalankan GetLocalTime..
2. Merubah nilai EAX agar menghasilkan nilai 0 :
Pada saat mencapai lokasi 00403CDD, ketik A
:00403CDD SUB EAX,EAX
:00403CDF
<== Tekan Enter
Dengan cara kedua ini, EAX akan dikurangkan dengan EAX sendiri
sehingga menghasilkan nilai 0.
Aku lebih menganjurkan untuk memilih cara kedua karena dengan me-nol-kan EAX, kita akan
dianggap sebagai Registered User sehingga pada menu About tidak akan muncul lagi pesan
yang meminta untuk membeli program ini, tulisan itu digantikan oleh tulisan This Program
Registered to :
Untuk mempatch program tersebut, edit HMonitor.EXE dengan Hex Editor yang kamu punya
dan cari :
29 D0 EB 15 5A 38
000030D6 29 D0 EB 15 5A 38
Rubah dengan :
000030D6 33 C0 EB 15 5A 38
Walaupun kita sudah dianggap sebagai Registered User, masih ada satu kekurangan.....
nama kita tidak muncul di window About. Tapi jangan khawatir, bukankah yang
penting program sudah teregister, jadi kamu bisa pake tanpa takut akan time trial
protection yang ada :-D
HMonitor cukup cepat mengeluarkan versi - versi terbaru mereka, pada saat kamu baca
tutorial ini, kemungkinan besar HMonitor telah mencapai versi yang berbeda, jika masih
menggunakan sistem proteksi yang sama, kamu bisa menggunakan tutorial ini sebagai acuan.
Langkah - langkah yang perlu diperhatikan :
- Pasang breakpoint di GetLocalTime
- Tekan F12 dua kali untuk mencari Conditional Jump
- Kalo belum ketemu, tekan F5 untuk menjalankan program secara
normal
- Pada saat break, ulangi langkah diatas sampai mendapatkan
Conditional Jump
- Apabila ada perintah CMP di atasnya, perhatikan register yang
terlibat di dalamnya, lalu rubah register yang mencurigakan
dengan 0.
- Kalo hanya ada rutin Call di atasnya, masuk ke dalamnya dan
telusuri dengan cermat. Curigai register yang berubah :-)
|