CPUIdle 5.5 |
SoftICE
3.24 |
oleh
CHuPaCaBRa
Pengenalan Program |
Tutorial mengenai CPUIdle ini sebenarnya sudah pernah aku tulis dan di-"pajang" di site eKH, tapi tutorial ini aku tulis ulang karena adanya beberapa perubahan pada penanganan Sistem Proteksi yang digunakan.
CPUIdle sendiri adalah sebuah program yang berfungsi untuk menurunkan temperatur CPU jika CPU sedang dalam keadaan idle dengan demikian dapat memperpanjang umur CPU dan menghemat penggunaan listrik. Program ini berfungsi penuh tetapi hanya dalam jangka waktu 30 hari, lebih dari jangka waktu yang ditentukan tersebut, CPUIdle tak dapat digunakan :-(
Essay |
CPUIdle tidak menyediakan tempat bagi User untuk memasukan Nama atau S/N sebagai tanda registrasi oleh karena itu untuk dapat menggunakan program ini tanpa memperdulikan batasan waktu yang ada maka satu-satunya jalan adalah dengan menghilangkan "Time Trial Protection" yang digunakannya. Selain itu, dalam tutorial ini, aku juga akan menunjukan cara untuk mengganti pesan 'shareware' yang sangat mengganggu.
Langkah Pertama - Menghilangkan "Time Trial Protection"
Karean program ini menggunakan sistem proteksi yang berhubungan dengan waktu maka sebelum mulai menjalankan program tersebut, kamu harus terlebih dulu masuk ke dalam SoftICE dan memasang BreakPoint pada GetLocalTime ( Ketik BPX GetLocalTime ). Fungsi API ini sangat umum digunakan dalam "Time Trial Protection". Setelah itu barulah kembali ke Windows dan jalankan CPUIdle dengan normal.
Tapi apa yang terjadi ??? Kamu bakal langsung terlempar ke dalam SoftICE, dimana fungsi GetLocalTime berada. Tekan F12 untuk keluar dari fungsi tersebut.
0177:00409084 CALL KERNEL32!GetLocalTime 0177:00409089 MOV CX,[ESP+0E] 0177:0040908E MOV DX,[ESP+0A] 0177:00409093 MOV AX,[ESP+08] 0177:00409098 CALL 00408EBC
Sebelum melangkah lebih jauh, periksa apa isi CX, DX dan AX dengan mengetikan perintah seperti di bawah ini :
:? cx 00000014 0000000020 "" :? dx 00000005 0000000005 "" :? ax 000007CF 0000001999 "Ï"
Ternyata, CX, DX dan AX menyimpan Tanggal, Bulan dan Tahun, kapan program tersebut dijalankan. Ini sangat menarik. Tanggal, Bulan dan Tahun tersebut tampaknya sangat mudah diganti dengan Tanggal yang pasti, tapi ternyata cara itu tidak akan berhasil. CPUIdle tidak akan tertipu jika kita mencoba menetapkan fixed date untuk tanggal tersebut, program tersebut akan tetap menghitung mundur sisa hari yang tersisa untuk menggunakan CPUIdle. Berarti kkta harus mencari jalan lain......
Oke kita teruskan dengan tidak mengganti isi CX, DX maupun AX dan ini adalah baris - baris perintah yang aku temui :
0177:0040909D FSTP REAL8 PTR [ESP] 0177:004090A0 WAIT 0177:004090A1 FLD REAL8 PTR [ESP] 0177:004090A4 ADD ESP,18 0177:004090A7 RET 0177:004550F2 FCOMP REAL8 PTR [EBP-34] 0177:004550F5 FSTSW AX 0177:004550F7 SAHF 0177:004550F8 JNZ 0045510F ;NO JUMP 0177:004550FA MOV EDX,004552C4 0177:004550FF MOV EAX,[EBP-28] 0177:00455102 CALL 0044F934 0177:00455107 FCOMP REAL8 PTR [EBP-14] 0177:0045510A FSTSW AX 0177:0045510C SAHF 0177:0045510D JZ 00455142 ;JUMP
0177:00455142 XOR EAX,EAX 0177:00455144 POP EDX 0177:00455145 POP ECX 0177:00455146 POP ECX 0177:00455147 MOV FS:[EAX],EDX 0177:0045514A JMP 0045518A ;JUMP
0177:00409084 CALL KERNEL32!GetLocalTime 0177:00409089 MOV CX,[ESP+0E] 0177:0040908E MOV DX,[ESP+0A] 0177:00409093 MOV AX,[ESP+08] 0177:00409098 CALL 00408EBC 0177:0040909D FSTP REAL8 PTR [ESP] 0177:004090A0 WAIT 0177:004090A1 FLD REAL8 PTR [ESP] 0177:004090A4 ADD ESP,18 0177:004090A7 RET 0177:0045518F FCOMP REAL4 PTR [004552C8] 0177:00455195 FSTSW AX 0177:00455197 SAHF 0177:00455198 JAE 004551A0 ;NO JUMP 0177:0045519A CMP DWORD PTR [EBP-0C],00 ;Compare yang menarik
Kenapa aku perintah Compare di atas aku anggap menarik ??? Karena biasanya, 'Time Trial Protection' akan mengurangi atau menambah ( tergantung Sistem Proteksinya ) suatu angka tertentu hingga mencapai batas yang sudah ditentukan. Dalam contoh program ini, CPUIdle memberikan jangka waktu 30 hari untuk menggunakan program tersebut, dan setiap hari, jangka waktu itu akan dikurangi hingga pada akhirnya mencapai 0, yang berarti waktu yang diberikan sudah mencapai batasannya.
Karena itulah aku langsung meliat apa isi [EBP-0C] dengan perintah :
:d EBP-0C 017F:006CFC50 1E 00 00 00 00 00 00 01-5C 25 BF 00 84 FC 6C 00 ........\%....l.
Waktu pertama kali meliat isi [EBP-0C] mungkin tampaknya tidak ada yang istimewa...tapi perhatikan 1E hexa yang ada di dalam [EBP-0C] itu, apa maksudnya ??? Ingat, angka 30 dalam decimal sama dengan 1E dalam hexa. Ini berarti [EBP-0C] adalah tempat meletakan Counter hari yang tersisa. Lalu apa yang harus dilakukan selanjutnya ???
Sebelum melakukan apa - apa, ada baiknya kalo kamu mengecek apa yang akan terjadi jika CPUIdle dijalankan beberapa hari sesudah tanggal penginstallan. Untuk itu, keluar dari SoftICE dan rubah tanggal di Windows, satu hari ke depan.
Berikut adalah hasil tracing yang aku lakukan, perhatikan perubahan - perubahan yang terjadi :
0177:00409084 CALL KERNEL32!GetLocalTime 0177:00409089 MOV CX,[ESP+0E] 0177:0040908E MOV DX,[ESP+0A] 0177:00409093 MOV AX,[ESP+08] 0177:00409098 CALL 00408EBC
:? cx 00000015 0000000021 "" :? dx 00000005 0000000005 "" :? ax 000007CF 0000001999 "Ï"
0177:0040909D FSTP REAL8 PTR [ESP] 0177:004090A0 WAIT 0177:004090A1 FLD REAL8 PTR [ESP] 0177:004090A4 ADD ESP,18 0177:004090A7 RET 0177:004550F2 FCOMP REAL8 PTR [EBP-34] 0177:004550F5 FSTSW AX 0177:004550F7 SAHF 0177:004550F8 JNZ 0045510F ;JUMP 0177:0045510F DEC DWORD PTR [EBP-0C] ;Pengurangan Counter 0177:00455112 FILD DWORD PTR [EBP-0C] 0177:00455115 ADD ESP,-08 0177:00455118 FSTP REAL8 PTR [ESP] 0177:0045511B WAIT
Perhatikan perubahan yang ada pada langkah - langkah di atas. Sebelumnya, program tidak
melompat dari Offset 004550F8 ke 0045510F tetapi setelah tanggal dimajukan satu hari,
CPUIdle mendeteksi adanya penambahan hari sehingga Counter yang terletak pada [EBP-0C]
harus dikurangi, untuk itu pada Offset 004550F8, program akan melompat ke 0045510F dan
mengurangi Counter.
Agar dapat menghilangkan 'Time Trial Protection', kita harus merubah beberapa
perintah agar pengurangan Counter tidak akan pernah dijalankan. Untuk itu, harus
diperhatikan baris - baris perintah mana yang mempuinyai kemungkinan untuk mengakses
perintah di Offset 0045510F. Tentu saja baris perintah tersebut adalah baris perintah yang
terletak di Offset 004550F8, karena itu rubah perintah 'Conditional Jump' tersebut dengan
'No Operation' sehingga program tidak akan pernah melompat ke Offset 0045510F.
Pada SoftICE, perubahan tersebut dilakukan dengan menggunakan perintah :
:A 0177:004550F80177:004550F8 NOP
0177:004550F9 NOP
0177:004550FA <== Tekan Enter
Tapi bukan itu saja perintah yang harus dirubah....pada Offset 0045510D terdapat sebuah Conditional Jump yang juga bisa memberikan akses pada pengurangan Counter di bawahnya, oleh karena itu perintah tersebut harus diganti dengan perintah Unconditional Jump seperti di bawah ini :
:A 0177:0045510D0177:0045510D JMP 00455142
0177:0045510F <== Tekan Enter
Dengan kedua perubahan di atas, Counter yang menandakan berakhirnya masa "uji coba" tersebut tidak akan pernah berkurang. Tapi apabila ternyata pada saat kamu hendak meng-Krak program tersebut, waktu berlakunya sudah melewati batas, kamu bisa merubah perintah pada Offset berikut :
0177:0045519A CMP DWORD PTR [EBP-0C],00 0177:0045519E JGE 004551E3 ;Ganti dengan JMP 004551E3
Dengan demikian, walaupun telah melewati batas waktu, CPUIdle tetap dapat dijalankan :-)
Langkah Kedua - Menghilangkan "Nag Message"
Walaupun CPUIdle sekarang dapat digunakan terus menerus, tapi 'pesan nista' yang menunjukkan sisa hari penggunaan program itu, masih tampak :-(
Okeh....kita kembali ke SoftICE, setelah pengecekan hari pada Offset 0045519A, telusuri terus program tersebut, perhatikan perubahan isi register - register yang ada.
0177:004551E6 CALL 0044F5C4 0177:004551EB LEA EDX,[EBP-38] 0177:004551EE MOV EAX,[EBP-0C] ;Perhatikan isi EAX 0177:004551F1 CALL 00407F28
:? eax 0000001E 0000000030 "" ;EAX = 30 decimal
0177:004551F6 LEA EAX,[EBP-38] 0177:004551F9 PUSH EAX :d *eax 017F:00BF8EE8 33 30 00 00 1E 00 00 00-01 00 00 00 0C 00 00 00 30..............
Ternyata Rutin Call pada Offset 004551F1 bertugas untuk merubah Counter yang masih merupakan bilangan desimal menjadi Karakter ASCII yang akan ditampilkan nantinya.
0177:004551FA LEA EDX,[EBP-2C] 0177:004551FD MOV EAX,[EBP-04] 0177:00455200 MOV EAX,[EAX+00000338] 0177:00455206 CALL 0042A5D4 0177:0045520B MOV EDX,[EBP-2C] ;Perhatikan isi EDX :d edx 017F:00BFC71C 20 64 61 79 73 20 6C 65-66 74 20 66 6F 72 20 65 days left for e 017F:00BFC72C 76 61 6C 75 61 74 69 6F-6E 2E 00 00 26 00 00 00 valuation...&...
Oke sekarang tulisan 'days left for evaluation' telah disiapkan, seharusnya pada perintah - perintah berikutnya, kedua kalimat yang telah kita lihat sebelumnya ( '30' dan 'days left for evaluation' ) akan digabungkan menjadi satu kalimat.
0177:0045520F CALL 00403D48 0177:00455214 MOV EDX,[EBP-38] ;Perhatikan isi EDX :d edx 017F:00C011EC 32 31 20 64 61 79 73 20-6C 65 66 74 20 66 6F 72 30 days left for 017F:00C011FC 20 65 76 61 6C 75 61 74-69 6F 6E 2E 00 72 72 65 evaluation..rre
Tepat seperti dugaanku, Rutin Call di Offset 00403D48 itu menggabungkan kedua kalimat tersebut :-) Agar supaya tulisan tersebut hilang atau berganti, kita harus merubahnya dengan tulisan lain. Untuk itu kita butuh Hex Editor, dengan Hex Editor yang kamu punya, cari kalimat 'days left for evaluation' pada file CPUIdle.EXE lalu ganti dengan kalimat yang kamu suka. Aku sendiri menggantinya dengan kalimat : 'Kraked by CHuPaCaBRa'
Secara logika, kamu pasti sudah menduga bahwa nantinya tulisan yang akan tampil adalah '30 Kraked by CHuPaCaBRa'. Ini karena rutin Call yang bertugas untuk menggabungkan kedua kalimat masih bekerja, karena itu kita butuh sedikit perubahan :
:A 0177:00455214 0177:00455214 MOV EDX,[EBP-2C] 0177:00455217 <== Tekan Enter
Dengan demikian, apa yang ditampilkan nantinya bukan hasil penggabungan antara 2 kalimat seperti di atas, tapi hanya satu kalimat saja yaitu 'Kraked by CHuPaCaBRa'
K R A K |
Ada 4 buah tempat yang harus kita Patch :
1. Patch untuk Offset 004550F8
75 15 BA C4 52 45 00 8B-45 D8 E8 2D A8 FF FF DC 90 90 BA C4 52 45 00 8B-45 D8 E8 2D A8 FF FF DC
2. Patch untuk Offset 0045510D
74 33 FF 4D F4 DB 45 F4-83 C4 F8 DD 1C 24 9B BA EB 33 FF 4D F4 DB 45 F4-83 C4 F8 DD 1C 24 9B BA
3. Patch untuk Offset 0045519E
7D 43 6A 10 B9 CC 52 45-00 BA D4 52 45 00 A1 BC EB 43 6A 10 B9 CC 52 45-00 BA D4 52 45 00 A1 BC
4. Patch untuk Offset 00455214
8B 55 C8 8B 45 FC 8B 80-38 03 00 00 E8 DF 53 FD 8B 55 D4 8B 45 FC 8B 80-38 03 00 00 E8 DF 53 FD
Keterangan :
Gunakan Hex Editor pada CPUIdle.EXE untuk melakukan Patch - patch di atas, ganti
kode hexa yang aku beri warna merah dengan kode Hexa yang berwarna Hijau.
Catatan |
Langkah - langkah di atas, walaupun tidak dapat dilakukan secara serupa pada software lain dengan Sistem Proteksi serupa, tapi secara umum langkah - langkah tersebut masih dapat digunakan :-)
© Mei1999