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

CPUIdle v5.1

Target  : CPUIdle v5.1
Tool     : SoftIce v4.05

Program ini hanya dapat digunakan dalam jangka waktu 30 hari, setelah itu, user harus membeli s/w ini seharga $20. Cukup mahal dalam masa KrisMon :-) Selama masa percobaan 30 hari tersebut, s/w akan menampilkan berapa banyak waktu yang tersedia bgi user untuk dapat tetap menggunakan s/w tersebut.

.Ada 2 hal yang harus kita lakukan pada s/w ini, pertama membuat s/w tersebut tidak pernah kadaluarsa ( Never Expired ) dan kedua menghiilangkan pesan "days left for evaluation" yang muncul.

1. Krak Time Trial Protection

Oke pertama - tama kita harus membuat s/w ini tidak pernah mencapai kadaluarsa. Caranya tentu saja dengan menipu s/w bahwa kita masih ada dalam batas waktu yang diperbolehkan ( masih kurang dari 30 hari ).

Cara kerja Time Trial Protection secara umum adalah :

  • Ambil Tanggal dimana User menjalankan Program tersebut.
  • Ambil Tanggal ketika pertama kali User menginstall program tersebut.
  • Bandingkan kedua tanggal tersebut.
  • Apakah telah melebihi batas waktu penggunaan ?.
  • Jika belum, jalankan program, jika sudah, tampilkan "pesan nista" yang meminta User untuk membeli Program itu.

Untuk itu...mula - mula pasang Breakpoint di GetLocalTime dengan mengetik BPX GetLocalTime di SoftICE. Setelah itu jalankan CPUIdle. Tak berapa lama kemudian kita akan terlempar ke dalam SoftICE, pada saat itu kita berada di dalam fungsi GetLocalTime, tekan F12 untuk keluar dari tempat itu.

:00407B2D 668B4C240E    mov cx, word ptr [esp+0E]  ==> Kita ada di sini
:00407B32 668B54240A    mov dx, word ptr [esp+0A]
:00407B37 668B442408    mov ax, word ptr [esp+08]
:00407B3C E86BFFFFFF    call 00407AAC

Telusuri beris - baris perintah itu dengan menekan F10, dan setelah mencapai offset 00407B3C, ketikan ? CX, ? DX dan        ? AX. Ternyata CX , DX dan AX menyimpan Tanggal, Bulan dan Tahun ketika User mengaktifkan CPUIdle itu. Sebagai newbie, aku merasa yakin bahwa dengan menetapkan tanggal yang pasti ( Fixed Date ), CPUIdle tak akan pernah Kadaluarsa. Oleh karena itu aku mencoba menggunakan teknik itu dengan mengetik A 00407B2D dan mengisi baris - baris kosong yang tersedia :

:00407B2D        MOV CX, 14       ===> CX = Tanggal 20
:00407B31         NOP
:00407B32         MOV DX, 0B      ===> DX = Bulan 11
:00407B36         NOP
:00407B37         MOV AX, 07CE ===> AX = Tahun 1998
:00407B3B         NOP
:00407B3C                                     ===> Tekan Enter untuk Selesai

Cat. : Tanggal 20 - 11 - 1998 adalah tanggal yang sama dengan tanggal ketika aku menginstall CPUIdle untuk pertama kali.

Setelah itu aku bershikan semua breakpoint ( BX * ) dan melihat hasilnya...ternyata sisa hari yang tampak malah berkurang satu hari. Jelas sistem "Fixed Date" ngak bisa dipake buat meng-krak s/w ini. Tapi jangan takut.......masih banyak jalan ke Roma :-) Untuk itu pasang breakpoint di GetLocalTime dan restart CPUIdle. Karena "Fixed Date" tidak berhasil, cara berikutnya yang lewat di pikiranku adalah merubah "sisa hari" yang akan dihasilkan oleh program ( Fixed Counter ). Tapi dimanakah letak Counter tersebut ???

Ketika kembali terjebak di dalam SoftICE akibat Breakpoint di GetLocalTime, kita akan kembali dihadapkan di offset 00407B2D. Kita tahu apa yang akan dimasukan di CX, DX dan AX, tapi bagaimana isi register - register lain yang ada, oleh karena itu gunakan Register Window ( Ketik WR untuk menampilkan / menyembunyikan Register WIndow ini ). Dalam Register Window ini, seluruh register yang ada akan ditampilkan dengan jelas sehingga pada saat bersamaan kita dapat mengawasi perubahan yang terjadi di semua Register.

Pada saat tracing dengan F10, register yang mengalami perubahan atau sedang diakses oleh perintah yang ada di baris tersebut akan "menyala", perhatikan register ECX, EDX dan EAX.

ECX = xxxx0014      EDX = xxxx000B    EAX = xxxx07CE

Catatan :

Penjelasan register, contohnya EAX :

  • EAX = 12 34 56 78
  • AX   =           56 78
  • AH   =          56
  • AL   =                78

Isi dari Register - register itu sudah kita ketahui sebelumnya tapi coba perhatikan register - register yang ada, ada salah satu register yang menarik yaitu register EBX.

EBX = xxxx001D

Kenapa menarik ??? Begini, tadi setelah kita mencoba memakai "Fixed Date", Counter hari yang ada telah berkurang satu, dari 30 hari menjadi 29 hari ( 29 = 1D dalam Hexa ). Terlihat bahwa Counter yang kita cari berada di register EBX, lebih tepatnya BL karena hanya menempati byte yang paling belakang. Langkah berikutnya adalah mencari dimana Counter ini diproses. Sebagai seorang newbie, aku langsung mencurigai rutin Call yang berada di offset 00407B3C, untuk itu aku masuk ke dalamnya dengan menekan F8. Rutin Call ini cukup panjang kalo mo dii-trace satu persatu dan ternyata itu adalah langkah yang percuma :-(.

Karena itu sebaiknya kamu lewati saja Call itu dengan menekan F10, akan terlihat bahwa isi EBX tidak berubah, jadi pemroesesan Counter tentunya bukan di dalam Call tersebut. Lanjutkan dengan menekan F10, lakukan perlahan - lahan dengan memperhatikan perubahan yang mungkin terjadi pada register EBX.

:00407B32 668B54240A         mov dx, word ptr [esp+0A]
:00407B37 668B442408          mov ax, word ptr [esp+08]
:00407B3C E86BFFFFFF       call 00407AAC
:00407B41 DD1C24                fstp qword ptr [esp]
:00407B44 9B                         wait
:00407B45 DD0424                fld qword ptr [esp]
:00407B48 83C418                 add esp, 00000018
:00407B4B C3                         ret

:0043A731 DC5DD8                fcomp qword ptr [ebp-28]         
:0043A734 DFE0                      fstsw ax
:0043A736 9E                           sahf
:0043A737 7515                       jne 0043A74E                             ==> Conditional Jump yang menarik
:0043A739 BA48A94300         mov edx, 0043A948
:0043A73E 8B45F4                  mov eax, dword ptr [ebp-0C]
:0043A741 E85AC3FFFF        call 00436AA0
:0043A746 DC5DEC                fcomp qword ptr [ebp-14]
:0043A749 DFE0                      fstsw ax
:0043A74B 9E                          sahf
:0043A74C 7434                      je 0043A782                              ==> Conditional Jump yang menarik
:0043A74E 4B                          dec ebx                                      ==>  Proses EBX ???
:0043A74F 895DE0                  mov dword ptr [ebp-20], ebx
:0043A752 DB45E0                  fild dword ptr [ebp-20]

Perhatikan listing di atas dengan baik, ada 2 Conditional jump yang menarik, pada offset 0043A737 ada Conditional Jump yang menuju ke offset 0043A74E dimana di situ, isi EBX akan dikurangi dengan 1. Ini berarti Conditional Jump tersebut bertanggung jawab untuk mengarahkan jalannya program ke Offset 0043A74E untuk kemudian mengurangi nilai EBX sebanyak 1 ( mengurangi "sisa hari" yang tersedia ).Tetapi ketika program tidak mendeteksi adanya perubahan hari, maka perintah JNE 0043A74E tidak dijalankan dan program akan terus mengerjakan perintah di bawahnya. Ketika mencapai 0043A74C, kita akan melompat ke 0043A782, tanpa melewati perintah pengurangan EBX ( "sisa hari" yang tersedia tetap )

Agar supaya tidak pernah mencapai keadaaan dimana s/w tersebut sudah Expired maka kita harus merubah Counter yang ada di dalam EBX itu sehingga menjadi sebuah nilai yang tetap. Dimanakah kita harus merubah nilai EBX itu ???

Mula - mula kita harus membuat sebuah jalur yang pasti akan dilewati, karena dengan adanya 2 Conditional Jump, akan ada 2 kemungkinan jalur yang akan dilewati. Agar supaya jalur tersebut hanya ada satu, jalur yang sesuai dengan yang kita kehendaki, kita harus menghapus Conditional Jump pertama dengan menggantinya dengan perintah NOP.

Ketik A 0043A737

0043A737     NOP
0043A738     NOP
0043A739                  ==> Tekan Enter untuk Selesai

Dengan demikian, program akan berjalan menuju perintah - perintah yang ada di bawahnya Ketika mencapai 0043A74C, kita bisa merubah Conditional Jump itu dengan perintah tertentu yang akan merubah nilai EBX dengan suatu nilai yang pasti, dalam hal ini adalah 30, agar supaya CPUIdle menganggap kita masih mempunyai kesempatan 30 hari ( = IE dalam Hexa ) untuk menggunakannya.

Untuk itu kita bisa merubahnya dengan perintah MOV BL, 1E. Kenapa hanya merubah isi BL ??? Ini karena seperti yang telah kita ketahui sebelumnya, dalam register EBX, tempat menyimpan sisa hari tersebut adalah di BL, dan untuk perintah DEC EBX, bisa diganti dengan NOP.

Ketik A :0043A74C

:0043A74C     MOV BL, 1E
:0043A74E      NOP
:0043A74F                             ==> Tekan Enter untuk Selesai

Sekarang bersihkan semua Breakpoint lalu liat hasilnya. Di bagian Option kita bisa liat bahwa tertulis "30 days left for evaluation". Berhasil....untuk seterusnya CPUIdle dapat dipergunakan tanpa khawatir akan expired. :-)

2. Menghilangkan Nag Message

Walaupun CPUIdle tidak akan pernah expired tetapi masih ada satu hal yang menggangu, yaitu tulisan "30 days left for evaluation". Kalo kamu cek CPUIdle.EXE dengan Hex Editor, kamu akan menemukan tulisan "days left for evaluation" yang telah disiapkan. Rubah tulisan itu dengan tulisan lain yang kamu inginkan. Dalam tutorial ini aku mengganti tulisan itu dengan "Kraked Version by [eKH]"

Setelah kamu menjalankan kembali CPUIdle, akan terlihat tulisan "30 Kraked Version by [eKH]". Hehehe....pesan yang aneh. Dari sini bisa kita tarik kesimpulan bahwa "sisa hari" yang ada di EBX akan dirubah menjadi Desimal dan kemudian digabungkan dengan tulisan yang telah tersedia, "Kraked Version by [eKH]" ( sebelumnya "days left for evaluation" ). Kalo begitu kita harus mencegah penggabungan kalimat itu untuk muncul, dan menggantinya hanya dengan tulisan "Kraked Version by [eKH]"..

Kembali ke SoftICE, pasang Breakpoint lagi di GetLocalTime dan restart CPUIdle. Kita akan kembali dihadapkan ke baris - baris perintah yang sudah kita liat tadi. Tekan F5 satu kali, kita akan terjebak lagi di GetLocalTime. Tekan F12 dan kemudian telusuri perlahan - lahan sambil mengamati nilai register yang berubah. Setelah beberapa saat menekan F10 ( kalo masuk ke dalam fungsi GetLocalTime, tekan F12 untuk keluar ), kita akan melihat baris - baris perintah seperti ini :

:0043A80E 8B45F4                 mov eax, dword ptr [ebp-0C]
:0043A811 E832BFFFFF        call 00436748
:0043A816 8D55E8                 lea edx, dword ptr [ebp-18]
:0043A819 8BC3                    mov eax, ebx                              ==> Ketik ? EAX.                                                                                                              EAX   = 1E ( "sisa hari" dalam Hexa )
:0043A81B E8C4C5FCFF      call 00406DE4                             ==> Merubah Hexa menjadi Desimal
:0043A820 8D45E8                lea eax, dword ptr [ebp-18]      ==> EAX = Alamat Memory yang diberikan [EBP-18]
                                                                                                            Cek isi yang ditunjuk oleh Alamat itu.
                                                                                                            Contohnya : Ketik D EAX.                                                                                                                                 EAX = 123456                                                                                                                                 Ketik D 563412            
                                                                                                                               EAX = 30 ( "sisa hari" dalam Desimal )
:0043A823 50                          push eax
:0043A824 8D55D4                lea edx, dword ptr [ebp-2C]
:0043A827 8B45FC                mov eax, dword ptr [ebp-04]
:0043A82A 8B8070020000    mov eax, dword ptr [eax+00000270]
:0043A830 E80715FEFF        call 0041BD3C
:0043A835 8B55D4                mov edx, dword ptr [ebp-2C]    ==> Ketik D EDX.                                                                                                               EDX   = "Kraked Version by [eKH]"                                                                                                               [EBP-2C] menunjuk pada tulisan tersebut..
:0043A838 58                          pop eax
:0043A839 E85A93FCFF       call 00403B98                             ==> Menggabungkan antara "30" dengan Message
:0043A83E 8B55E8                mov edx, dword ptr [ebp-18]   ==> Ketik D EDX                                                                                                             EDX = "30 Kraked Version by [eKH]"
:0043A841 8B45FC                 mov eax, dword ptr [ebp-04]
:0043A844 8B8070020000      mov eax, dword ptr [eax+00000270]
:0043A84A E81D15FEFF       call 0041BD6C
:0043A84F 33C0                     xor eax, eax

Catatan : Instruksi yang berada di sebelah kanan anak panah, dilakukan setelah melewati baris perintah yang bersangkutan.

Terlihat bahwa Call yang bertanggung jawab pada penggabungan antara "sisa hari" dengan pesan yang sudah ada, terletak pada offset 0043A839. Berikutnya CPUIdle akan menampilkan pesan yang ada di dalam EDX. Agar apa yang akan ditampilkan nanti hanyalah pesan "Kraked by [eKH]" maka kita harus merubah perintah pada offset 0043A83E agar apa yang dimasukan ke dalam EDX bukan hasil penggabungan tersebut melainkan pesan yang kita inginkan itu. Perhatikan offset 0043A835, tulisan "Kraked Version by [eKH]" ditunjuk oleh [EBP - 2C].

Karena itu langkah selanjutnya adalah merubah perintah di Offset 0043A83E menjadi MOV EDX, [EBP-2C] yang berarti mengcopy pesan "Kraked by [eKH]" ke dalam EDX.

Untuk merubahnya di dalam SoftICE, ketik A 0043A83E

:0043A83E     MOV EDX, [EBP-2C]
:0043A841                                              ==> Tekan Enter untuk Selesai

Perhatikan hasilnya, sekarang bukan saja s/w ini tidak akan pernah Kadaluarsa, pesan yang mengingatkan bahwa s/w tersebut adalah Shareware juga telah lenyap digantikan oleh tulisan yang kita kehendaki :-)

Cari pake Hex-Editor :     75 15   BA 48 A9 43 00
Ganti dengan               :    90  90  BA 48 A9 43 00

Cari pake Hex-Editor :     74   34  4B   89  5D  E0
Ganti dengan               :    B3  1E  90    89  5D  E0

Rubah tulisan "days left for evaluation" dengan tulisan lain, dengan menggunakan Hex Editor.

Cari pake Hex-Editor :    8B  55  E8 8B   45  FC               
Ganti dengan               :   8B  55  D4  8B  45  FC

Rangkuman singkat dari langkah - langkah di atas :

  • Cari Register yang berisi "sisa hari" sebelum Kadaluarsa
  • Temukan lokasi pemrosesan "sisa hari" tersebut.
  • Karena ada 2 jalur pemrosesan Counter, buat sedemikian hingga jalur pemrosesan tersebut hanya 1 dan sesuai dengan kehendak kita.
  • Rubah "sisa hari" di dalam Register tadi sehingga jumlahnya tidak pernah berubah.
  • Cari lokasi dimana akan menampilkan "Nag Message"
  • Rubah "Nag Message" menjadi "Kraked Message"
  • Tampilkan "Kraked Message"
  • Job Done :-)
WebMaster
Terus      Kembali
Komentar dan Mailing List
Crack One Software Every Day Make You The Real Cracker