2
Menghilangkan Time Trial Protection

.
Program - program Shareware adalah program yang memperbolehkan user untuk menggunakan progarm tersebut dalam jangka waktu tertentu. Setelah jangka waktu yang telah ditentukan tersebut, program tersebut akan menjalankan pesan - pesan tertentu yang mengingatkan agar membeli program tersebut secara legal, hal ini bisa hanya berupa "pesan nista" ( nag screen ) yang muncul setiap kali menjalankan program atau "pelumpuhan program" secara total sehingga user tidak dapat menggunakannya lagi

Dalam tutorial ini, kita akan mempelajari cara menghilangkan batas waktu yang amat mengganggu itu sehingga program tidak akan pernah kadaluarsa ( epxired ).


HMonitor adalah sebuah Utility yang memantau berbagai data - data hardware di dalam komputer kita dan menampilkannya pada sebuah window. Program ini antara lain dapat memonitor tegangan listrik, temperatur CPU & motherboard serta kecepatan kipas pendingin di dalam komputer.

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.

Catatan :

GetLocalTime adalah fungsi yang berguna untuk mengambil data mengenai tanggal komputer pada saat itu. Fungsi ini sering dipakai untuk program - program shareware yang menggunakan Time Trial Protection seperti HMonitor ini.

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 :-)

Source: CHuPaCaBRa

Bookmark and Share




2 komentar :

Anonim mengatakan... [Reply to comment]

GetLocalTime , di folder apa mas. apa itu sebuah sofwer ato di lokal disc C:

hendra mengatakan... [Reply to comment]

terima kasih mas informasinya berguna sekali tapi sayangnya kok susah ya salam www.mikro-software.blogspot.com

Posting Komentar

Silahkan tinggalkan komentar anda disini...

 
Ujie Caprone | © 2011 Blogger Template by Ujiecaprone.com