Anda di halaman 1dari 7

Tutorial Membuat KeyGen dengan Assembly

Mengikuti jejak flag eRRatum dengan tutorial - tutorial KeyGen-nya, di sini aku juga mencoba membuat tutorial pembuatan KeyGen. Sedikit perbedaan yang ada dengan tutorial - tutorial flag lainnya, aku menggunakan Assembly sebagai bahasa pemrograman untuk pembuatan KeyGen ini.

Penjelasan singkat mengenai Waste Whacker : "Waste Whacker automates the process of removing unwanted files from your hard drives. These files can be backup files created by many applications, temp files not removed by Windows or other programs, files with a zero-byte size, old Internet cache files, plus many others. All files types are customizable by the user. Files can be sent to the Recycle Bin, completely removed from the system, or archived for later retrieval. Additionally, Waste Whacker can be run during Windows bootup." Program ini akan menampilkan tulisan "Trial Version...Purcahase it for $19.95" selama kita masih belum memasukan kode registrasi yang benar. Essay : Seperti biasa kita mmemulai dengan mengamati Progrtam Target kita. Waste Whacker menyediakan menu khusus untuk memasukan Nama dan S/N bagi User yang telah membeli s/w tersebut ( Option >> Register ). Jika kita memasukan Nama dan S/N yang salah, akan tampil sebuah MessageBox bertuliskan "Registration Failed" dan tetapi kita masih tetap diperbolehkan menggunakan Waste Whacker ( baik bukan ? ;-) ) Oke sekarang ulangi langkah di atas, masukan kembali Nama dan sembarang s/n, untuk tutorial ini, aku masukin : User Name Registration Number : CHuPaCaBRa : 123454321

Sebelum menekan tombol OK, kita siapkan "Peralatan Perang" kita, masuk ke SoftICE dengan menekan Ctrl-D dan pasang Breakpoint di Hmemcpy ( BPX Hmemcpy ). Kenapa Hmemcpy ??? Aku

pasang Hmemcpy karena Breakpoint ini secara umum diguanakan untuk mengambil inputan kita. Tekan Ctrl-D kembali dan klik tombol OK. Kau akan "terlempar" masuk ke dalam SoftICE pada rutin Hmemcpy. Saat itu kau belum berada di badan program, karena itu tekan F12 beberapa kali sampai kau sudah masuk ke dalam program Waste Whacker.

Break due to BPX KERNEL!HMEMCPY 0177:00475545 MOV EDX,[EBP-0C]

==> Kita di sini

Ketik D EDX untuk melihat apa yang baru saja dibaca oleh Hmemcpy.

:d edx 017F:00C7DF60

31 32 33 34 35 34 33 32-31 00 C7 00 D8 DF C7 00

123454321.......

Ternyata program target kita ini membaca s/n yang kita masukan terlebih dulu. Pasang Breakpoint di memory yang bersangkutan supaya SoftICE akan berhenti jika program mencoba mengakses s/n kita. Ketik BPM 017F:00C7DF60. Sementara ini nama kita belum dibaca, tekan F5 satu kali, SoftICE kembali akan berhenti di dalam fungsi Hmemcpy. Tekan F12 beberapa kali sampai kamu kembali ke dalam badan program. Break due to BPX KERNEL!HMEMCPY 0177:00475561 MOV EDX,[EBP-0C]

==> Kita di sini

Cek lagi apa yang tadi dibaca oleh Hmemcpy. Ketik D EDX kembali

d edx 017F:00C7DF78

43 48 75 50 61 43 61 42-52 61 00 00 00 00 00 00

CHuPaCaBRa......

Pasang Breakpoint di memory tersebut, BPM 017F:00C7DF78 0177:00475564 LEA EAX,[EBX+3C] 0177:00475567 CALL 00403BB0 0177:0047556C LEA ECX,[EBP-04] 0177:0047556F MOV EDX,[EBX+3C] 0177:00475572 MOV EAX,[EBX+24] 0177:00475575 CALL 00474E9C 0177:0047557A CMP DWORD PTR [EBP-04],00 atau belum

==> Cek apa User sudah memasukan nama

Buat menyingkat waktu, tekan F5, SoftICE akan berhenti jika Program mencoba mengakses Nama ataupun S/N yang kita masukan. Kamu bakal menemukan listing seperti ini : 0177:00474EF2 MOVZX ESI,BYTE PTR [EBP-09] 0177:00474EF6 MOV EAX,[EBP-08] 0177:00474EF9 MOV AL,[ESI+EAX-01] ==> AL = Karakter dari nama yang kita masukan

0177:00474EFD CALL 00402980 Besar

==> Rutin Call u/ merubah Huruf Kecil menjadi Huruf

0177:00402980 CMP AL,61 ==> AL < 61h ( = "a" ) ??? 0177:00402983 JB 0040298D ==> Lompat, jika YA ! 0177:00402985 CMP AL,7A ==> AL > 7Ah ( = "z" ) ??? 0177:00402988 JA 0040298D ==> Lompat, jika YA ! 0177:0040298A SUB AL,20 ==> AL = AL - 20h 0177:0040298D RET 0177:00474F02 ADD AL,D0 0177:00474F04 SUB AL,0A 0177:00474F06 JB 00474F0E 0177:00474F08 ADD AL,F9 0177:00474F0A SUB AL,1A 0177:00474F0C JAE 00474F2F 0177:00474F0E MOV EAX,[EBP-08] 0177:00474F11 MOV AL,[ESI+EAX-01] 0177:00474F15 CALL 00402980 ==> Perhatikan Rutin Call di atas 0177:00474F1A MOV EDX,EAX 0177:00474F1C LEA EAX,[EBP-1C] 0177:00474F1F CALL 00403D00 0177:00474F24 MOV EDX,[EBP-1C] 0177:00474F27 LEA EAX,[EBP-10] 0177:00474F2A CALL 00403DE0 0177:00474F2F INC BYTE PTR [EBP-09] ==> [EBP-09] = [EBP-09] + 1 0177:00474F32 DEC BL 0177:00474F34 JNZ 00474EF2 ==> Looping sampai semua Karakter dari User Name telah dirubah menjadi Huruf Besar Mungkin kamu rada bingung ngeliat ada baris perintah yang ngak aku beri komentar....ini aku sengaja, karena baris - baris perintah itu tidak terlalu dibutuhkan pada saat pembuatan KeyGen nantinya :-) 0177:00474F4B CALL 00403DD8 ==> Rutin Call untuk menghitung Panjang Nama

0177:00474F50 MOV [EBP-15],AL ==> [EBP-15] = Panjang Nama 0177:00474F53 MOV BYTE PTR [EBP-09],0C ==> Panjang S/N = 0Ch ( = 12 karakter ) 0177:00474F57 XOR EAX,EAX 0177:00474F59 MOV AL,[EBP-15] 0177:00474F5C CALL 00402BA4 akan "diolah". ==> Kosongkan register EAX ==> AL = Panjang Nama ==> Rutin Call untuk memilih Karakter Nama yang

0177:00402BA4 IMUL EDX,[004BA040],08088405 ==> EDX=2ED03ED0h*08088405h 0177:00402BAE INC EDX ==> EDX = EDX + 1 0177:00402BAF MOV [004BA040],EDX ==> [004BA040] = EDX 0177:00402BB5 MUL EDX ==> EAX = EAX mul EDX 0177:00402BB7 MOV EAX,EDX ==> EAX = EDX 0177:00402BB9 RET 0177:00474F61 INC EAX ==> EAX = EAX + 01h

0177:00474F62 AND EAX,000000FF 0177:00474F67 MOV EDX,[EBP-10] 0177:00474F6A MOV BL,[EAX+EDX-01] EDX + 01] 0177:00474F6E TEST BL,BL 0177:00474F70 JBE 00474F83 0177:00474F72 MOV EAX,0000000A 0177:00474F77 CALL 00402BA4 untuk menghitung S/N. 0177:00474F7C MOV [EBP-0A],AL 0177:00474F7F 0177:00474F81 0177:00474F86 0177:00474F88 0177:00474F8B angka Decimal

==> EAX = EAX and 000000FFh ==> EDX = User Name ==> BL = Karakter Name pada posisi [EAX +

==> EAX = 0000000Ah ==> Rutin Call ini sekarang digunakan

==> Hasil Rutin Call di atas dimasukan ke [EBP-0A]

DEC BL ==> BL = BL - 1 JNZ 00474F72 ==> Looping selama BL <> 0 XOR EAX,EAX ==> Kosongkan Register EAX MOV AL,[EBP-0A] ==> AL = [EBP-0A] CALL 0040875C ==> Merubah nilai AL yang berbentuk Hexa menjadi

0177:00474F90 MOV EDX,[EBP-1C] 0177:00474F93 LEA EAX,[EBP-14] 0177:00474F96 CALL 00403DE0 ==> [EBP-14] = AL 0177:00474F9B DEC BYTE PTR [EBP-09] ==> [EBP-09] = [EBP-09] - 1 0177:00474F9E JNZ 00474F57 ==> Looping selama 12 kali. Langkah di atas ( 00474F57 - 00474F9E ) akan diulang sebanyak 12 kali hingga mendapatkan sebuah serial number. Setelah keluar dari looping di atas, coba liat apa isi [EBP-14]. Ketik D *(EBP14) :d *(ebp-14) 017F:00C7A3E4

37 37 31 38 31 37 33 32-38 31 32 35 00 A4 4B 00

771817328125..K.

Itu dia serial number-nya :-) Disable semua Breakpoint ( BD * ) dan kembali ke Waste Whacker, register menurut nama dan serial number yang sudah tampak tadi dan hasilnya......SUKSES :-) KeyGenZ .Ok....now is the hard part :-) Berikut adalah listing Assembly untuk pembuatan KeyGen :. ; Waste Whacker 3.2 Key Generator. ; CHuPaCaBRa - 140299 ; eRRatum Krak House - http://all.at/ekh ;Gunakan Tasm dan Tlink untuk meng-compile file *.asm ini ;======================================================================== .MODEL SMALL .STACK 100h .386P ;Menggunakan register 32-bit .DATA input DB 22h,0 Prompt DB 'User Name : ','$' Err1 DB 'U must enter a name !','$' lf DB 0ah,0dh,'$'

Tamp DD 2ED03ED0h Tamp2 DB ? logo DB 0ah,0dh, '>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<',0ah,0dh DB '>> <<',0ah,0dh DB '>> Waste Whacker 3.2 Key Generator <<',0ah,0dh DB '>> Kraked by CHupaCaBRa <<',0ah,0dh DB '>> eRRatum Krak House <<',0ah,0dh DB '>> -= http://all.at/ekh =<<',0ah,0dh DB '>> <<',0ah,0dh DB '>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<',0ah,0dh DB 0ah,0dh,'$' .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX LEA EDX,[logo] MOV AH,09h INT 21h ;Tampilkan Logo LEA EDX,[prompt] MOV AH,09h INT 21h ;Tampilkan Prompt LEA EDX,[input] MOV AH,0Ah INT 21h ;Ambil Nama yang di-input LEA EDX,[lf] MOV AH,09h INT 21h ;Turun Satu Baris CMP BYTE PTR [input+1],00 JE error ;Lompat jika nama koosng LEA EDI, input+1 XOR EAX, EAX MOVZX ECX,BYTE PTR [EDI] ;Ambil panjang Nama. PUSH ECX ;Simpan di dalam Stack Konvert: MOV BL, BYTE PTR [EDI+EAX+01] ;BL = Karakter Nama TEST BL, BL JZ KeyGen CMP BL, 61h ;BL > 61h ( = 'a' ) ??? JB Hrf_Besar CMP BL, 7Ah ;BL < 7Ah ( = 'z' ) ??? JA Hrf_Besar SUB BL, 20h ;BL = BL - 20h MOV BYTE PTR [EDI+EAX+01],BL ;Ganti huruf kecil dengan ;huruf besar Hrf_Besar: INC EAX ;EAX = EAX + 1 LOOP Konvert ;Looping sebanyak Karakter ;Nama MOV ECX, 0Ch ;"KeyGen" diulang 12 kali KeyGen:

XOR EDX, EDX ;Kosongkan register EDX XOR EAX, EAX ;Kosongkan register EAX POP EBX ;Ambil panjang Nama dari ;dalam Stack MOV AL, BL ;AL = BL PUSH EBX ;Simpan Panjang Nama ;ke dalam Stack kembali CALL @Proses ;Jalankan "Proses" INC EAX ;EAX = EAX + 1 AND EAX, 000000FFh ;EAX = EAX and FFh MOV BL, [EAX+EDI] ;BL=Karakter Nama pada ; posisi [EAX + EDX + 01] Loop1: MOV EAX, 0Ah ;EAX = 0Ah CALL @Proses ;Jalankan "Proses" MOV Tamp2, AL ;Tamp2 = AL DEC BL ;BL = BL - 1 JNZ Loop1 ;Looping selama BL <> 0 ADD [Tamp2], 30h ;Rubah Tamp2 yang berbentuk ;Hexa menjadi angka Decimal MOV DL, [Tamp2] MOV AH, 02h INT 21h ;Tampilkan nilai Decimal ;tersebut DEC ECX ;ECX = ECX - 1 JNZ KeyGen JMP Selesai error: LEA EDX,[Err1] MOV AH,09h INT 21h ;Tampilkan Err1 Selesai: MOV AX,4C00h INT 21h ;Exit Program @Proses: ;Procedure "Proses" IMUL EDX, Tamp, 08088405h INC EDX MOV Tamp, EDX MUL EDX MOV EAX, EDX RET END START CATATAN SINGKAT Untuk mendapatkan serial number Waste Whacker relatif mudah tetapi membuat KeyGen-nya ternyata lebih sulit dari yang aku duga :-) Semula aku mencoba membuat KeyGen dengan menggunakan Turbo C / C++, ternyata bahasa pemrograman ini ngak bisa mengatasi besarnya angka yang terlibat di dalam pembuatan s/n tersebut. Oleh karena itu, jalan satu - satunya adalah dengan menggunakan Assembly. Keuntungan dari program KeyGen yang menggunakan Assembly adalah ukuran file-nya yang jauh lebih kecil, tapi di lain pihak, tingkat kesulitannya lebih tinggi daripada membuat KeyGen dengan bahasa pemrograman tingkat tinggi seperti Pascal atau Turbo C / C++. So...choose your language wisely :-)

Setelah mempelajari beberapa tutorial Kraking yang menggunakan Assembly sebagai bahasa pemrograman, aku mencoba membuat KeyGen Waste Whacker dan ternyata sukses....lumayanlah buat newbie kaya' aku ini :-) Selain itu, untuk menyelesaikan KeyGen tersebut, aku juga mendapat bantuan dari SoftICE 2.80 ( DOS Version ),great tools to debug DOS program...... :-) Kalo kamu pengen nyoba ngeKrak program lain dengan proteksi serupa, kamu bisa mencoba product DBytes lainnya di http://www.dbytes.com/

Anda mungkin juga menyukai