Tulisan Dasar Cracking
Selamat Datang................. Cracker..........
Tutorial Cracking :

HMonitor v3.0.1.2

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

WebMaster
Terus      Kembali
Komentar dan Mailing List
Crack One Software Every Day Make You The Real Cracker