Ini berawal ketika saya membaca
salah satu majalah komputer yang baru saya beli,
pada majalah ini saya temukan tulisan kurang lebih
seperti berikut : “Bagaimana bisa (mungkin), kode
dan algoritma yang notabene sangat rahasia bagi
sebuah produsen aplikasi mampu dipecahkan oleh
sipembuat keygen (cracker)?” (PCMedia edisi
06/2006) , mungkin sebagian orang akan
kebingungan menemukan jawabannya, disini ada 3 kemungkinan
mengapa kita bingung dalam menjawab pertanyaan
diatas:
1.
Algoritma yang
diciptakan oleh sang produsen software bersifat
rahasia, dan tidak mungkin sang produsen menemui
sang cracker dirumahnya untuk memberitahukan
algoritma yang baru dia ciptakan.
2.
Aplikasi yang
dibuat oleh sang produsen sangatlah berharga,
pastilah sang produsen akan memproteksi
aplikasinya agar tidak mudah dibajak.
3.
Sang penanya
tidak pernah menengok dunia bawah tanah (komunitas
underground) seperti Jasakom ini, :-P
Baiklah pertanyaan tersebut
akan saya jawab lewat artikel ini.
Apa itu Key Generator (keygen)?
Sebenarnya pertanyaan ini nggak
perlu saya jawab, karena saya yakin 98% pengguna
komputer Indonesia yang masuk peringkat 5 besar
pembajakan software terbanyak di Asia atau mungkin
malah di dunia, pasti pernah melihat, memakai atau
merasakan yang namanya keygen!.
Baiklah daripada kebanyakan
ngomong lebih baik kita mulai tutorial cracking
kita.
Cracking Start
Sebelum kita mulai saya harus
minta ma’af dulu pada Khaled Mardam-Bey, karena
saya akan menggunakan aplikasi beliau untuk
eksperimen kita kali ini. Untuk contoh saya hanya
akan menjadikan aplikasi mIRC sebagai korban.
Alat-alat yang perlu kita
gunakan untuk cracking kita adalah :
1.
W32dasm (Wind*ws
32 Disassembly).
2.
Kalkulator
Wind*ws.
3.
Cheat Engine (penulis
pake versi 4.4), aku gak pake softice karena
softice ku gak bisa jalan
di XP. Untuk download Cheat
Engine:
http://www.heijnen1.demon.nl/
4.
Aplikasi
target : mIRC terbaru saat ini yaitu versi 6.16.
<- Khaled I’m sory for this.
5.
UltraEdit (kalo
perlu)
6.
Wafer coklat (aku
suka sekali coklat) :-)
Sebenarnya Cheat Engine itu
aplikasi untuk mencurangi game dibuat oleh
dark_byte, tapi malah saya salah gunakan untuk
cracking.. he.he. karena aplikasi ini sendiri
memiliki bebrapa kelebihan yang tidak dimiliki
oleh program debuger lain, seperti stealth untuk
mengatasi sistem proteksi anti debug. Dan yang
lebih asik lagi tool ini bisa untuk bypass
password pada beberapa aplikasi securtiy (penulis
udah pernah bobol beberapa komputer temen yang di
kunci pake password menggunakan tool ini :-P )
Oke kita mulai aja
Instal dulu mIRC v6.16, W32Dasm
dan Cheat Engine (semua kecuali kalkulator).
Setelah proses instal selesai
jalankan mIRC, kamu bakalan ngeliat jendela nag
(nag screen) yang menandakan bahwa aplikasinya
masih versi trial 30 hari, dan mengharapkan anda
untuk membelinya.
Klik “Continue”,
Pada jendela “mIRC Options”
klik “Cancel”.
Klik menu “Help>Register”.
Nah kamu bisa liat jendela
berisi 2 Textbox, satu untuk username dan yang
satu untuk serial number.
Masukkan nama “4NVIe” pada
“Full Name” dan masukkan “12345” pada
“Registration Code”.
Klik OK atau tekan Enter, apa
yang terjadi ?
“The registration name and
number you have entered are not valid. Please make
sure you are entering…bla..bla..bla..”
Tulisan inilah yang muncul,
didukung oleh lambang X berwarna merah. Hiks,
Tenang jangan kawatir.
Sekarang jalankan Cheat Engine
nya. Maka akan tampak jendela seperti ini :

Klik tombol bergambar komputer
di pojok kiri atas, setelah jendela process list
terlihat cari proses bernama “mirc.exe”

Setelah Cheat Engine meng-attach
proses ‘mirc.exe’ langkah kita selanjutnya adalah
mendebugnya dengan cara mengklik tombol “Memory
view” pada Cheat Engine. tampaklah jendela berikut

Klik menu View>Enumerate Dll’s
and symbol, disitu akan terlihat beberapa symbol
dari “Dynamic Link Library” milik Wind*ws
(DLL). Klik pada “USER32” dan carilah fungsi “GetWindowTextA”,
he..he.. pasti sulit karena gak urut pake abjad (itulah
kekurangan Cheat Engine) setelah ketemu dobel klik
pada fungsi tsb dan klik “Close”.
Memory Viewer akan menunjukan
alamat fungsi tsb. Tekan F5 untuk membuat
breakpoin, klik OK pada jendela registrasi di mIRC,
gagal!. Kita coba lagi dengan fungsi lain “GetDlgItemTextA”,
lepaskan dulu breakpoin pada fungsi pertama dengan
cara menekan tombol F5, ngulang cari lagi deh”,
setelah membuat breakpoin pada fungsi kedua, isi
nama dan nomor serialnya lagi pada mIRC dan tekan
tombol OK. Gagal Lagi!!!, Sial!. Karena berkali-kali
gagal, kita jalankan W32Dasm, Klik menu
Disassembly>Open file to disassembly… cari file
mirc.exe pada direktori anda menginstal mIRC.
Setelah proses loading selesai Klik menu
“Search>Find text” pada jendela Find, isi teks
dengan “Register…” gak pake tanda kutip (string
ini aku temukan pada tubuh exenya yang aku buka
pake ultraedit), Klik “Find Next” 3 kali, tekan
“Page Up” 8 kali, hingga tampak :
:004C764C
8D94240C010000 lea edx, dword ptr [esp+0000010C]
:004C7653
8D4C2408 lea ecx, dword ptr [esp+08]
:004C7657
E8A4FDFFFF call 004C7400
:004C765C
85C0 test eax, eax
:004C765E
740E je 004C766E
lea edx, dword
ptr [esp+0000010C]
kode assembly ini akan memasukkan alamat nomor
serial yang kita masukan tadi ke register EDX.
lea ecx, dword
ptr [esp+08]
kalo yang ini
akan memasukkan alamat nama kita ke
register ECX.
call 004C7400
nah!
pemanggilan inilah yang akan mengkalkulasi nama
dan nomor yang kita masukkan dan akan menghasilkan
nilai pengembalian pada register EAX, jika nama/nomor
serial valid maka register EAX akan bernilai 1,
tapi kalo gak valid maka register EAX akan
bernilai 0 (zero).
test eax, eax
cek
apakah EAX 0/1.
je 004C766E
jika
EAX = 0 maka lompat. Kita bisa saja melewati
lompatan ini dengan cara me-NOP
nya,
tapi dengan cara ini akan merubah CRC dari file
eksekutebelnya (crack kasar), jadi gak bagus,
apalagi jika aplikasi yang akan kita crack
dilengkapi sistem proteksi CRC, yang mana program
gak akan jalan jika terjadi perubahan CRC!, atau
mungkin kita gak bisa update karena gak pake nomor
serial!, jadi kita pake cara kelemubutan aja
dengan buat keygennya.
Lanjut!
Lihat pada alamat 004C7657,
karena kita sudah tahu dimana alamat pengecekan
nama dan serial berada, sekarang kita berpindah ke
Cheat Engine, pada jendela “Memory Viewer” klik
kanan pada kolom pertama,

Pada popup menu klik “Go to
address”, pada jendela “Go to address” masukkan
alamat yang kita dapatkan tadi yaitu “004C7657”
tanpa tanda kutip, klik “OK”, maka akan tampak :

Sekarang buat breakpoin pada
alamat 004C7657 dengan menekan tombol F5, pindah
ke mIRC, masukkan nama dan nomor serial, klik
“OK”, proses berhenti, balik lagi ke Cheat Engine,
trace masuk ke prosedur call 004c7400 dengan cara
menekan tombol F7, setelah masuk coba trace over
dengan menekan tombol F8 sampai terlihat

Lea esi,
[eax+10]
;masukkan alamat efektif dari nomor serial yang
kita masukkan ke ESI
Mov dl, [eax]
;masukkan 1
karakter dari nomor serial ke dl
Inc eax
;eax =
eax+1
Test dl, dl
;apakah
karakter udah habis?
Jne 004c7518
;kalo belum
lompat ke 004c7518 (looping)
Sub eax, esi
;eax kurangi esi hasilnya eax berisi jumlah
karakter dari serial number yang kita masukkan
atau sama dengan perintah VB len(esi)
Cmp eax, ecx
;apakah jumlah karakter
Jae 004c7532
;lebih dari 4? Jika ya lompat ke 004c7532
Setelah kita trace over sampai
sini masuklah ke alamat 004c7532 dengan menekan
tombol F7, setelah masuk kita akan melihat kode
berikut :

Mov ebx,[esp+10]
;masukkan alamat efektif tempat nomor serial
berada ke EBX, kalo gak percaya coba trace dulu
supaya kode dieksekusi trus klik kanan pada kolom
sebelah bawah dan pada menu popup klik “Goto
address”, ketik “ebx” (gak pake kutip) tekan
enter, maka akan terlihat nomor serial yang kita
masukin tadi.

Push 2d
;masukkan dalam stack nilai 2D (heksadesimal dari
45=karakter “-“)
Push ebx
;masukkan nilai EBX ke stack
Call 00570260
;rutin untuk mengecek apakah terdapat karakter “-“
pada nomor serial kita?
Ups! Ternyata harus ada tanda
“-“ pada nomor serialnya, mungkinkah format
serialnya begini? : “12345-12345”.
Oke karena harus ada tanda “-“
pada nomor serialnya maka kita harus ulangi
memasukan nomor serial dengan format seperti
diatas, buat breakpoin pada alamat 004C7539 biar
gak trace ulang (tekan F5), tekan F9 dua kali
sampai kotak dialog penolakan muncul, isi “Full
Name” dengan “4Nvie” (gak pake kutip) dan
“Registration Code” dengan “12345-12345” (gak pake
kutip), tekan Enter, proses berhenti, kembali ke
Cheat Engine, tekan F9
Mov esi,eax
Add esp, 08
Test esi,esi
Je 004c7525
Setelah kode ini dieksekusi
register ESI akan berisi alamat karakter “-“ pada
nomor serial yang kita masukkan tadi.
Push ebx ;masukkan nilai ebx ke
stack
Mov byte ptr [esi],00
;ganti karakter “-“ dengan null byte
Call 00570543
;rutin ini akan menyimpan serial pertama kita
Add esp,04
Mov byte ptr [esi],2d
;kembalikan karakter “-“
Inc esi ;esi+1
Mov ebp,eax
Cmp byte ptr [esi],00
;apakah ESI sudah menunjuk pada akhir serial?
Je 004c7525
;jika ya lompat ke 004c7525
Psuh esi
;masukkan nilai ESI ke stack
Call 00570543
; gak penting
Mov ecx, edi
;EDI berisi nama kita
Add esp,04
Mov
[esp+10],eax
Lea edx,[ecx+01]
Mov al,[ecx]
;masukkan 1 karakter dari nama kita ke AL
Inc ecx
; ecx=ecx+1
Test al,al
;apakah al = 0
Jne 004c7570
;jika tidak
loop!
Sub ecx, edx
;ECX kurangi
EDX, hasilnya ECX berisi jumlah karakter dari nama
kita
Mov
esi,00000003
;esi=3
Xor edx,edx
;kosongkan EDX
Xor ebx,ebx
;kosongkan EBX
Cmp ecx,esi
;apakah jumlah karakter nama kita -
Jle 004c75a8
;kurang atau
sama dengan 3 ? (len(nama) <= 3) jika ya lompat!
Karena jumlah karakter nama
kita lebih dari 3 maka nggak akan terjadi lompatan
ini.
Trace terus (ingat pake F7
jangan pake F8), pada jmp 004c7590 kita akan
melompat pendek, Setelah lompat kita mendarat pada
kode berikut:
Movzx eax,byte
ptr [esi+edi]
;masukkan 1 karakter pada EAX
Imul eax, [esp+edx*4+14]
;kalikan EAX dengan.... (mungkinkah array?), coba
kita tengok alamat ESP,
apakah ada nilai ajaib disitu?, caranya klik kanan
pada kolom sebelah bawah dan pilih “Goto address”,
ketik “esp+edx*4+14” (gak pake kutip) tekan enter.
JRENG!!!

He..he..he..., ternyata
dugaanku benar lihat pada gambar diatas, itu
adalah array! Yang berisi nomor ajaib, nah!,
sekarang kita butuh kalkulatornya Bill untuk meng-convert
nilai heksadesimal ke nilai desimal, (Bill pinjem
kalulatornya dong!), pada kalkulator klik Menu
“View>Scientific”, pilih radio button “Hex”,
masukkan nilai ajaib dan pindah radio button-nya
ke “Dec” maka kita dapat mengetahui nilai
desimalnya:
Konvertasi nilai hex ke dec
pada array diatas adalah:
1 2 3 4
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
HEXADECIMAL :
0B 06 11 0C 0C 0E 05 0C 10 0A 0B 06 0E 0E 04 0B 06
0E 0E 04
DECIMAL :
11 6 17 12 12 14 5 12 16 10 11 6 14 14 4 11 6
14 14 4
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
38 39
HEXADECIMAL :
0B 09 0C 0B 0A 08 0A 0A 10 08 04 06 0A 0C 10 08 0A
04 10
DECIMAL :
11 9 12 11 10 8 10 10 16 8 4 6 10 12 16 08
10 4 16
Ternyata nomor ajaib itu ada 39
buah terangkum dalam tabel array.
Jadi perintah Imul eax, [esp+edx*4+14]
sama dengan perintah pada VB :
Asc(Mid$(ESI,X,1))
* NomorAjaib(EDX)
He..he..he.. Algoritma yang
sederhana bukan?, oke, makan dulu coklatnya ah...
Sampai sini saya sudah melihat
titik terang. Lanjut!
Add ebx,eax
;tambah EBX dengan nilai hasil pengalian pada EAX
Inc edx
;EDX ini
adalah counter
cmp edx,26
;apakah sudah berputar sebanyak 38 kali? (kok 38
bukan 39?, ya karena array pertama dibaca mulai
dari 0)
jle 004c75a3
;jika kurang atau sama dengan 38 lompat!
Xor edx,edx
;tapi jika udah lebih dari 38 set EDX jadi 0 (balik
ke nomor ajaib pertama)
Inc esi
;tambah
esi dengan 1 (karakter selanjutnya)
Cmp esi,ecx
;apakah karakter udah habis?
Jnge 004c7590
;jika belum balik lagi (loop! Sampe karakter habis)
Nah sampe sini pasti kita sudah
paham maksud kode diatas, jadi ilustrasinya
kira-kira begini:
Nama -> pisahkan serial jadi
dua bagian dengan format 00000-00000 ->
kalkulasikan bagian pertama -> kalkulasikan bagian
kedua-> samakan nomor serial yang kita masukkan
dengan hasil kalkulasi pada EBX -> kesimpulan
(valid/invalid code).
nah sekarang kita buat key
generatornya, mau dibuat pake apa? Tenang jangan
panik dulu aku gak akan buat pake Assembly kok,
kita buat pake VB aja yang mudah. Yup!, kita mulai
aja.
Siapkan satu buah TextBox dan
satu CommandButton lalu ketikan source code
berikut :
-------------------[CUT
HERE]-------------------------------------------------
Option
Explicit
Private Sub
Command1_Click()
Dim
NomorAjaib(38)
As Long
Dim
EDX, EAX
As Long
Dim
Bagian1, Bagian2
As Long
Dim
X
As Long
‘nomor-nomor
ajaib kita isikan kedalam array
NomorAjaib(0)
= 11: NomorAjaib(1) = 6:
NomorAjaib(2)
= 17: NomorAjaib(3) = 12
NomorAjaib(4)
= 12: NomorAjaib(5) = 14:
NomorAjaib(6)
= 5: NomorAjaib(7) = 12
NomorAjaib(8)
= 16: NomorAjaib(9) = 10:
NomorAjaib(10)
= 11: NomorAjaib(11) = 6
NomorAjaib(12)
= 14: NomorAjaib(13) = 14:
NomorAjaib(14)
= 4: NomorAjaib(15) = 11
NomorAjaib(16)
= 6: NomorAjaib(17) = 14:
NomorAjaib(18)
= 14: NomorAjaib(19) = 4
NomorAjaib(20)
= 11: NomorAjaib(21) = 9:
NomorAjaib(22)
= 12: NomorAjaib(23) = 11
NomorAjaib(24)
= 10: NomorAjaib(25) = 8:
NomorAjaib(26)
= 10: NomorAjaib(27) = 10
NomorAjaib(28)
= 16: NomorAjaib(29) = 8:
NomorAjaib(30)
= 4: NomorAjaib(31) = 6
NomorAjaib(32)
= 10: NomorAjaib(33) = 12:
NomorAjaib(34)
= 16: NomorAjaib(35) = 8
NomorAjaib(36)
= 10: NomorAjaib(37) = 4:
NomorAjaib(38)
= 16
'jumlah
karakter nama minimal 4 karakter
If Len(Text1.Text)
< 4
Then
MsgBox "Nama
minimal 4 karakter!"
Text1.SetFocus
Exit Sub
End If
EDX = 0
'xor edx,edx
'buat nomor
serial untuk bagian pertama dulu
For
X = 4 To Len(Text1.Text)
EAX =
Asc(Mid$(Text1.Text,
X, 1)) * NomorAjaib(EDX)
Bagian1 =
Bagian1 + EAX
EDX = EDX
+ 1
If EDX > 38
Then EDX = 0
Next
X
EDX = 0
EAX = 0
'buat nomor
serial bagian kedua
For
X = 4 To Len(Text1.Text)
EAX =
Asc(Mid$(Text1.Text,
X - 1, 1)) * Asc(Mid$(Text1.Text,
X, 1))
Bagian2 =
Bagian2 + EAX * NomorAjaib(EDX)
EDX = EDX
+ 1
If EDX > 38
Then EDX = 0
Next
X
'hasil
kalkulasi tampilkan pada msgbox
MsgBox "Nomor
serial loe : " & Trim$(Str$(Bagian1))
& "-" & Trim$(Str$(Bagian2)),
, "mIRC 6.16 KEYGEN"
End Sub
-------------------[EOF]-------------------------------------------------
Setelah dikompil coba jalankan
dan masukkan nama, setelah itu masukkan nama dan
nomor serial pada jendela “Registration” mIRC,
Klik “OK” dan...

Huaaahm…. Jam sudah menunjukkan
pukul 3.30, akhirnya selesai juga nih artikel.
Dengan cara beginilah saya bisa
mengetahui algoritma sistem proteksi pada suatu
aplikasi/software tanpa perlu mengintip/meminta
source code pada sang developer!.
Last words
Tulisan ini hanya untuk tujuan
pendidikan saja, oleh karena itu penulis tidak
bertanggung jawab apabila ilmu ini disalahgunakan
untuk hal-hal yang merugikan.
Semoga dengan adanya tulisan
ini para developer software lebih berhati-hati dan
lebih memperhatikan sisi keamanan pada aplikasinya.
Jika ada pertanyaan atau
cercaan kirim ke:
anvie_2194@yahoo.com
Terimakasih kepada:
Allah SWT, Rosulullah SAW, Ibu
Bapakku tercinta, saudara-saudaraku,
Nafid,Sulton,Imam.
MyAngel:Anis. Teman-temanku :
Najib, zCoy, zUlfa, 4rp@t, M15bah, ngi2uDdin,
tomero, B45tyah, 3ni, Sibed, Munip, pak Dian, Amin,
pak Sur, pak Tono, F4tm4, Puji, Nody, Pak Basir,
Dawir, Sani & cah2 semut merah ,Chlorosoft.
teman-temanku yang gak mungkin aku sebutin satu
persatu.
Dan semua anggota komunitas
JASAKOM. VIVA INDONESIA!
By:[4NV|e]
anvie_2194@yahoo.com