Make SearchClown Your Homepage! Home  | Komputer rakitan Komputer Parts  |  Komputer second  |  Cara pembelian! About Us |  Contact                                         

Site features Free Email/Login  Message board  Kirim artikel Anda  |  Iklan baris gratis  |  Surfing internet dibayar  |              Forum Komputer  


 

IVANSTECH.COM..... KOMPUTER,KOMPUTER HARDWARE,KOMPUTER SOFTWARE,KOMPUTER SERVICE & KOMPUTER NETWORKING , KOMPUTER MURAH, KOMPUTER MURAH, KOMPUTER, KOMPUTER,KOMPUTER     address : Mangga 2 mall lantai 5 block c no.5 & 5 a,     Telp./Fax. : 021-62303708

 

 

 

 

 

Rahasia Pembuatan KeyGen(erator)

Date: Wednesday, July 05, 2006      By:  [4NV|e]    
 

Sori judulnya terlalu mengada-ada, karena sebenarnya sudah jadi rahasia umum, bagaimana sang cracker mampu memecahkan untaian kode untuk menembus sistem proteksi/keamanan pada sebuah software, jadi artikel ini hanya ditujukan untuk yang belum pada ngerti aja.
 

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

 

 

 

 

                                          

 

Google
 
Web www.ivanstech.com
                           

 

Home  | Komputer rakitan Komputer Parts  |  Komputer second  |  Cara pembelian! About Us |  Contact    

Site features Free Email/Login  |  Message board |  Kirim artikel Anda  |  Iklan baris gratis  |  Surfing internet dibayar  |              Forum Komputer   

 

Copyright © 2004 - 2005  Ivanstech.com  All Right Reserved