Jumat, 15 April 2011

DASAR-DASAR KEYGENNING

<< Definisi >>
Keygen (singkatan dari : Key Generator) merupakan software kecil yang dibuat
dengan tujuan meng-generate key atau serial-number yang dapat digunakan untuk
registrasi software lain. Sedangkan Keygenning adalah proses membuat keygen
tersebut.


<< How To >>

1.Analisa target

Info-info yang umumnya perlu kita ketahui tentang target-software sebelum
keygenning adalah :
-Cara target melalukan registrasi, apa yang terjadi jika key/serial yang user
masukkan salah, atau format dari key yang valid.
-Compiler, Packer dan Protector. Tool yang umum dipakai untuk melakukan
tugas ini adalah PEiD, RDG Packer Detector, dll.


2.Bedah target


Bedah target menggunakan Disassembler atau Debugger. Disassembler dan
Debugger membedah target dengan menampilkan listing code menggunakan
bahasa Assembly. Contoh dari Disassembler yang umum digunakan adalah
Win32Dasm, sedangkan contoh Debugger adalah OllyDbg dan IDA (Interactive
Disassembler). Kita bisa melihat bagaimana code-flow berjalan pada saat runtime
bila kita menggunakan Debugger, sedangkan Disassembler hanya
menampilkan listing code dari target, inilah kelebihan Debugger. Tapi, beberapa
software dapat mendeteksi adanya Debugger, lalu mencoba menutup Debugger
atau memberikan false-code (umum disebut anti-Debug technique), sedangkan tak
ada software yang dapat mendeteksi Disassembler, itulah kelebihan Disassembler.


3.Temukan Algoritma dari serial-checking

Banyak metode yang umum digunakan untuk menemukan alogaritma serialchecking,
salah satunya adalah dengan mencari String-Reference. Metode ini
mencari string yang digunakan target saat menampilkan MessageBox yang
muncul saat kita memasukkan serial yang salah. Contoh stringnya antara lain :
“Serial yang anda masukkan salah”, “The Key is invalid”, dan sejenisnya.


4.Analisis Algoritma dari serial-checking

Analisis dan pelajari baik-baik algoritma dari serial-checking ini. Kata kunci dari
kegiatan ini adalah “Think what a programmer think”. Dan jika memungkinkan,
tulis ulang algo tersebut dalam bahasa pemogramman yang kita kuasai, dan test
apakah algo yang kita buat serupa (tidak harus sama persis) dengan algo target.
Jika kita sudah mengerti bagaimana algoritma mengalir, kita dapat menentukan
langkah kita selanjutnya.


5.Solve it

Dari hasil analisis, tentukan langkah selanjutnya :
-Duplikasi algorithma ke dalam keygen kita.
Hal ini dilakukan bila algo bersifat langsung atau straight-forward
menggenerate serial dari nama yang kita masukkan. Contoh simpel (dalam
Delphi):

=====Algorithma Serial-Checking=====


Code:
x1 := Ord(name[1]) + Ord(name[2]) + Ord(name[3]); // name adalah username yang diinput oleh user
s1 := IntToHex(x1,8);
If serial = s1 then ShowMessage(‘Success’) else ShowMessage(‘Failed’) // serial adalah serial
yang diinput oleh user
==============================

Disini kita bisa liat bahwa serial digenerate langsung dari nama, jadi yang
perlu kita lakukan adalah menduplikasikan code ke dalam code keygen kita.

-Reverse algorithma serial-checking
Hal ini dilakukan bila algo mengkalkulasi serial dan lalu membandingkan
hasilnya dengan nama yang diinput. Contoh simpel (dalam Delphi) :

======Algorithma Serial-Checking======
Code:
x1 := StrToInt(serial); // rubah serial ke dalam format Integer
x1 := x1 + 5;
x2 := Ord(name[1]) + Ord(name[2]) + Ord(name[3]); // ambil nilai x2 dari name
if x1 = x2 then ShowMessage(‘Success’) else ShowMessage(‘Failed’) // dibandingkan
================================

Di sini kita lihat bahwa serial yang dikalkulasi bukannya nama, maka kita
harus mereverse fungsi untuk mendapatkan serial. Code keygen-nya seperti
ini :

======Algorithm Keygen=========
Code:
x2 := Ord(name[1]) + Ord(name[2]) + Ord(name[3]);
x1 := x2;
x1 := x1 – 5; // Lawan dari ‘+’ operator adalah ‘-‘
serial := IntToSerial(x1); // rubah serial ke dalam format String
=========================================

-Bruteforcing
Metode ini dilakukan bila algoritma serial-cheking tidak bisa direverse. Hal
ini umumnya terjadi bila terdapat operator yang tidak bisa direverse seperti :
“Or”, “And”, dll. Atau terdapat dua variable atau lebih yang tidak diketahui
dalam satu perhitungan. Ide dari bruteforcing adalah mencoba semua
kemungkinan serial (bisa secara random atau sistematis) ke dalam algorithma
hingga kondisi yang diinginkan terpenuhi. Contoh simple (dalam Delphi) :

======Algorithma Serial-Checking======
Code:
x1 := StrToInt(serial); // rubah serial ke dalam format Integer
x1 := x1 Or 5;
x2 := Ord(name[1]) + Ord(name[2]) + Ord(name[3]); // ambil nilai x2 dari name
if x1 = x2 then ShowMessage(‘Success’) else ShowMessage(‘Failed’) // dibandingkan
================================

Di atas kita lihat bahwa, algorithm tidak dapat di reverse, karena terdapat
operator “Or” yang tidak memiliki operator “lawan”. Jadi, satu-satunya cara
adalah dengan bruteforcing, seperti ini :

======Algorithm Keygen=========
Code:
counter := 0;
x2 := Ord(name[1]) + Ord(name[2]) + Ord(name[3]);
Repeat
x1 := counter;
x1 := x1 Or 5;
While x1 <> x2 // loop terus dilanjutkan selama x1 belom sama dengan x2
serial := StrToInt(x1);
=========================================

Dari code ini kita bisa lihat, bahwa bruteforcing membutuhkan resource
computer yang cukup banyak apabila berhadapan dengan algo yang cukup
panjang, jadi jadikan bruteforcer pilihan terakhir dan bila jalan lain sudah
tertutup.


6.Code It

Langkah terakhir adalah coding dengan bahasa pemograman yang kita kuasai.
Dan bila key yang dihasilkan dari keygen kita belum valid, maka debug keygen
kita perlahan-lahan bersama dengan target sehingga kita dapat melihat kesalahan
keygen kita.

Tidak ada komentar:

Posting Komentar