Tutorial yang terlupa

Iseng-iseng baca arsip tentang keygenme#1 yang pernah saya buat dan ternyata disana tidak ada tutorial tentang bagaimana cara membuatnya, dan akan saya post ulang tulisan yang ada di CCPB ke sini

——————————————-

Author : orakanggo
Date:191206
Tools: Diablo KeygenMe#1, Olly, hCalc & VB
Tutorial number : 3
Level : Easy

Welcome back, pada kesempatan kali ini akan saya berikan tutorial sedikit mengenai bagaimana cara membuat kigendeng.. eh keygen dink… . KeygenMe yang digunakan adalah keygenme paling mudah tanpa packing dan protection yang dibuat oleh Diablo dan saya ambil dari situsnya MasMetal sorry nyolong hehe…
Kenapa saya bikin untuk bijiner? soalnya saja juga bijiner tulen .

Dalam membuat keygen, yang perlu diperhatikan adalah
Quote from movzx tutz

– tau variabel / parameter yang terlibat
– ngerti bagaimana cara variabel / parameter itu diolah
– tau kalow nanti hasil proses keygen tersebut mo diapain. langsung di-compare atow diproses lagi

Yang pasti, kudu ngerti assembler, gak perlu advanced banget, yg penting ngerti basicnya doank hehe… The Art of Assembler bagus buat baca2.

http://www.planetpdf.com/codecuts/pdfs/aoa.pdf

Let’s doit


1. Download keygenme di

http://rapidshare.com/files/58754252/d2k2_krackme01.exe.html

Mirror :
http://indoupload.net/files/10920/d2k2_krackme01.exe

2. Buka pake Olly dan jalankan, masukkan Nama dan Serial misalnya orakanggo dan 12345

3. Sebelum klik Try, kita akan intercept menggunakan fungsi API GetDlgItemTextA (kalo gk tau fungsinya, cari di win32hlp. Intinya, fungsi tersebut akan mengambil nilai yang diinputkan dan sebagai Return Value-nya adalah panjang karakter yang diinputkan.

Inget wejangan dari movzx lagi bahwa semua Return Value yang dihasilkan dari fungsi Call akan dimasukkan ke EAX.

Dari Window Olly klik kanan > Search For > All Intermodular calls

Pada window Intermodular calls, klik kanan dan pilih Set Breakpoint to every call to GetDlgItemTextA, kemudian klik Try pada keygenMe

4. Maka akan berhenti di VA 00401254, di bawahnya terdapat code sbb :

00401259 |. 84C0 TEST AL,AL
0040125B |. 0F84 06010000 JE d2k2_cra.00401367 ; AL = null?
00401261 |. 3C 20 CMP AL,20
00401263 |. 0F8F 13010000 JG d2k2_cra.0040137C ; AL > 20h?
00401269 |. 3C 05 CMP AL,5
0040126B |. 0F8C 20010000 JL d2k2_cra.00401391 ; AL < 5h?

What is the maxut?
TEST AL,AL untuk mengetest apakah ada input atau tidak, jika tidak ada input, maka akan lompat ke badboy “Sorry… Enter Name”

CMP AL, 20 bandingkan panjang karakter input dengan 20h, inget… semua angka adalah dalam hexadesimal, untuk melakukan konversi dari hex ke dec bisa pake hCalc atau kalo mo pengen yg online ada di

http://www.prepressure.com/library/binhex.htm

Lanjut, jika AL > 20h (32d), maka tampilkan badboy “Sorry… Name can be max 32 char long”

begitu juga dengan fungsi CMP AL,5 (nama yang dikalkulasi hanya 5 karakter pertama)

Setelah saya pelajari, terdapat 2 macam kalkulasi yaitu Kalkulasi Nama dan Serial, kalkulasi nama akan diloop 2 kali dengan code yang hampir sama untuk tiap2 loop. Gak percaya? Kita buktikan…

5. Next, Tekan F8 sampe ke

00401271 |. 8D1D 8C314000 LEA EBX,DWORD PTR DS:[40318C]
00401277 |. 33C9 XOR ECX,ECX ; CL = 0
00401279 |. B0 05 MOV AL,5 ; AL = 5
0040127B |. 33D2 XOR EDX,EDX ; DL = 0
0040127D |> 8A0C1A MOV CL,BYTE PTR DS:[EDX+EBX]
00401280 |. 80F1 29 XOR CL,29 ; CL = nama[i] XOR 29h
00401283 |. 02C8 ADD CL,AL ; CL = CL + AL
00401285 |. 80F9 41 CMP CL,41
00401288 |. 7C 1C JL SHORT d2k2_cra.004012A6 ; CL 5Ah?
0040128F |> 888A 3C314000 MOV BYTE PTR DS:[EDX+40313C],CL
00401295 |. C682 3D314000>MOV BYTE PTR DS:[EDX+40313D],0
0040129C |. FEC2 INC DL
0040129E |. FEC8 DEC AL
004012A0 |. 3C 00 CMP AL,0
004012A2 |. 74 08 JE SHORT d2k2_cra.004012AC
004012A4 |.^ EB D7 JMP SHORT d2k2_cra.0040127D
004012A6 |> B1 52 MOV CL,52
004012A8 |. 02C8 ADD CL,AL
004012AA |.^ EB E3 JMP SHORT d2k2_cra.0040128F

Kita bahas line by line code di atas.
Code di atas adalah berupa loop, kita namakan loop 1, yang akan mengkalkulasi masing2 karakter pada nama yang dimasukkan ke register CL.

Perhatikan baris per baris code di atas yang udah gw kasi comment pada sebelah kanan untuk memudahkan algoritma. Tekan F8 sambil memperhatikan window Register sebelah kanan untuk ECX, berubah ubah bukan?
perhatikan pada code
CMP CL,41 dan CMP CL,5A tahu artinya?

41h = ‘A’ dan 5Ah = ‘Z’, dalam algoritma di atas berarti jika V1 ‘Z’ maka reset V1 menjadi 52h dan tambahkan V1 dengan AL.

lanjutkan tekan F8 dan berhenti pada code

0040128F |> |888A 3C314000 MOV BYTE PTR DS:[EDX+40313C],CL

6. Karena hasil perhitungan disimpan dalam suatu pointer, maka bisa kita dump, Klik kanan pada code tsb, Follow in dump > Memory Address. Perhatikan bahwa nilai dump pertama kali dalam keadaan 0.

7. Breakpoint (F2) pada baris tsb dan tekan F9 sambil memperhatikan nilai dump dan perhatikan sekali lagi register EAX pada window Register. EAX akan dikurangi 1 sedangkan EDX akan ditambahkan 1 karena ada code

0040129C |. |FEC2 INC DL
0040129E |. |FEC8 DEC AL
004012A0 |. |3C 00 CMP AL,0

DL ditambahkan 1 untuk membaca karakter selanjutnya dari nama yang dimasukkan sedangkan AL yang semula bernilai 5 akan dikurangi 1 sampe nilai AL terakhir adalah 0.

Dari nama yang kita masukkan (‘orakanggo’), akan menghasilkan nilai ‘KVKDI’ dan simpan sebagai V1 yang merupakan kalkulasi dari loop 1.

8. Sekarang kita catat algoritma dari step 4 – 7 kira2 seperti di bawah :

a. Jika nama 32, badboy jugak
c. Set CL=0, AL=5, DL=0
d. Ambil masing2 karakter dari nama dan masukkan ke CL, setelah itu XOR dengan 29h dan tambahkan dengan AL
e. Jika CL5Ah, reset CL=52h dan tambahkan dengan AL
f. Jika tidak, simpan nilai CL pada V1 (V1=V1 & CL), DL=DL+1, AL=AL-1
g. Done!!

9. Ingat, itu baru loop 1, untuk loop kedua code-nya adalah :

004012AC |> \33D2 XOR EDX,EDX ; DL = 0
004012AE |. B8 05000000 MOV EAX,5 ; AL = 5
004012B3 |> 8A0C1A MOV CL,BYTE PTR DS:[EDX+EBX]
004012B6 |. 80F1 27 XOR CL,27 ; V2 = nama[i] XOR 27
004012B9 |. 02C8 ADD CL,AL ; V2 = V2 + AL
004012BB |. 80C1 01 ADD CL,1 ; V2 = V2 + 1
004012BE |. 80F9 41 CMP CL,41
004012C1 |. 7C 1C JL SHORT d2k2_cra.004012DF ; CL 5Ah?
004012C8 |> 888A 41314000 MOV BYTE PTR DS:[EDX+403141],CL
004012CE |. C682 42314000>MOV BYTE PTR DS:[EDX+403142],0
004012D5 |. FEC2 INC DL
004012D7 |. FEC8 DEC AL
004012D9 |. 3C 00 CMP AL,0
004012DB |. 74 08 JE SHORT d2k2_cra.004012E5
004012DD |.^ EB D4 JMP SHORT d2k2_cra.004012B3
004012DF |> B1 4D MOV CL,4D
004012E1 |. 02C8 ADD CL,AL
004012E3 |.^ EB E3 JMP SHORT d2k2_cra.004012C8

Bisa dilihat bahwa code di atas(loop 2) hampir mirip dengan loop 1, bedanya adalah pada

004012B6 |. 80F1 27 XOR CL,27 ; V2 = nama[i] XOR 27

004012BB |. 80C1 01 ADD CL,1 ; V2 = V2 + 1

dan

004012DF |> B1 4D MOV CL,4D

10. Algoritma loop 2 adalah :

a. AL=5, DL=0
b. Ambil masing2 karakter dari nama dan masukkan ke CL, setelah itu XOR dengan 27h dan tambahkan dengan AL, tambahkan lagi CL dengan 1
c. Jika CL5Ah, reset CL=4Dh dan tambahkan dengan AL
d. Jika tidak, simpan nilai CL pada V2 (V2=V2 & CL), DL=DL+1, AL=AL-1
e. Done!!

kalkulasi loop 2 akan menghasilkan nilai ‘NZJ0H’ dan disimpan sebagai V2. Nilai ini akan digabungkan dengan nilai V1 sehingga menghasilkan V3=V1 & V2 => KVKDI + NZJ0H.

Bagaimana bisa tau? Cari tau lewat memory dump.

11. Hah…. banyak jg ya ternyata, tp gak ribet kan? Ato tulisan gw yg bikin ribet?
setelah kalkulasi nama selesai, saatnya kalkulasi serial.

12. Tekan F9 maka akan berenti pada breakpoint kita yang kedua yaitu di

004012F3 |. E8 F0000000 CALL ; \GetDlgItemTextA

13. Tekan F8 3x sampai pada

004012FD |. 66:83F8 0A CMP AX,0A
00401301 |. /7F 4F JG SHORT d2k2_cra.00401352
00401303 |. |7C 4D JL SHORT d2k2_cra.00401352

Code di atas adalah membandingkan panjang serial yang dimasukkan dengan 0Ah = 10d, artinya serial yang dimasukkan lebih besar atau lebih kecil dari 10, lompat ke badboy!!

14. Tekan F9 dan akan muncul error message, Tekan OK dan masukkan serial sepanjang 10 karakter, misalnya 1234567890, Tekan Try

15. Tekan F9 (karena breakpoint pertama blm diilangin ), dan code kalkulasi serial seperti di bawah

0040130D 8D05 B4314000 LEA EAX,DWORD PTR DS:[4031B4]
00401313 |> 8A1C01 MOV BL,BYTE PTR DS:[ECX+EAX]
00401316 |. 8A91 3C314000 MOV DL,BYTE PTR DS:[ECX+40313C]
0040131C |. 80FB 00 CMP BL,0
0040131F |. 0F84 81000000 JE d2k2_cra.004013A6
00401325 |. 80C2 05 ADD DL,5
00401328 |. 80FA 5A CMP DL,5A
0040132B |. 7F 14 JG SHORT d2k2_cra.00401341
0040132D |> 80F2 0C XOR DL,0C
00401330 |. 80FA 41 CMP DL,41
00401333 |. 7C 11 JL SHORT d2k2_cra.00401346
00401335 |. 80FA 5A CMP DL,5A
00401338 |. 7F 12 JG SHORT d2k2_cra.0040134C
0040133A |> 41 INC ECX
0040133B 38DA CMP DL,BL
0040133D ^ 74 D4 JE SHORT d2k2_cra.00401313
0040133F EB 11 JMP SHORT d2k2_cra.00401352
00401341 80EA 0D SUB DL,0D
00401344 |.^ EB E7 JMP SHORT d2k2_cra.0040132D
00401346 |> B2 4B MOV DL,4B
00401348 |. 02D1 ADD DL,CL
0040134A |.^ EB EE JMP SHORT d2k2_cra.0040133A
0040134C |> B2 4B MOV DL,4B
0040134E |. 2AD1 SUB DL,CL
00401350 |.^ EB E8 JMP SHORT d2k2_cra.0040133A

Saya kira gak perlu dijelasi jg udah pada ngerti apa maksud code di atas. Bener gak? Sekarang kita langsung masuk ke code keygen yang saya tulis di pake VB

16. Dari Ketiga algoritma di atas (loop 1, loop 2 dan serial) maka kita buat code seperti di bawah

If Len(txtName.Text) 32 Then MsgBox (“Nama maximal 32 karakter”)
‘Name Calculation Loop 1
V1 = “”
CL = 0
AL = 5
DL = 1
While AL > 0
strName = Mid(txtName.Text, DL, 1)
CL = (Val(Asc(strName)) Xor 41) + AL

If CL 90 Then CL = 82 + AL
AL = AL – 1
DL = DL + 1
V1 = V1 & Chr(CL)
Wend

‘Name Calculation Loop 2
CL = 0
AL = 5
DL = 1
V2 = “”
While AL > 0
strName = Mid(txtName.Text, DL, 1)
CL = (Val(Asc(strName)) Xor 39) + AL + 1
If CL 90 Then CL = 77 + AL
AL = AL – 1
DL = DL + 1
V2 = V2 & Chr(CL)
Wend
V3 = V1 & V2

‘Serial Calculation
BL = 1
DL = 0
ECX = 0
finalSerial = “”
While ECX 90 Then DL = DL – 13
DL = DL Xor 12
If DL 90 Then
DL = 75 – ECX
End If
ECX = ECX + 1
finalSerial = finalSerial & Chr(DL)
Wend
txtSerial.Text = finalSerial

17. Karena loop 1 dan loop 2 mempunyai kemiripan, kita sederhanakan menjadi :

‘Name Calculation Loop 1 & 2
V3 = “”
For i = 1 To 2
V1 = “”
CL = 0
AL = 5
DL = 1
While AL > 0
strName = Mid(txtName.Text, DL, 1)
If i = 1 Then
CL = (Val(Asc(strName)) Xor 41) + AL
Else
CL = (Val(Asc(strName)) Xor 39) + AL + 1
End If

If CL 90 Then
If i = 1 Then
CL = 82 + AL
Else
CL = 77 + AL
End If
End If
AL = AL – 1
DL = DL + 1
V1 = V1 & Chr(CL)
Wend
V3 = V3 & V1
Next

18. Kigen yg udah jadi di :

http://rapidshare.com/files/7413610/keygenme1_orakanggo.exe.html

19. All Done!!!, donlot pdfnya di

http://rapidshare.com/files/9351913/Tutorial_Keygenme_by_orakanggo.pdf.html

Greets: I.R.i.S(nb, sb, anvie, movzx), MasMetal(buat keygenme-nya), CCPB#14

Thanks,
orakanggo

23 thoughts on “Tutorial yang terlupa

  1. Ping balik: Self Keygenning « orakanggo ~ another side of me

  2. Ping balik: STM Telpun : Angkatan 5 » Self Keygenning

  3. Cakka

    Tutorial nya bagus nih .🙂 Thanks untuk share knowledge nya ya🙂
    Tapi aku gak ngerti VB nih :(( Hehehe Tapi akan kupelajari
    Aku cuma otodidak sih🙂
    God Bless You

    Balas
  4. arethoze

    justru yang kaya gini yang kanggo, matur newun buat tut-nya terus berkarya sambil belajar, semakin pinter maka semakin merasa bodoh sebenarnya kita, sekali lagi thanks buat tutnya. Ditunggu tut berikutnya….

    Balas
  5. fairvz

    Orakanggo……..aku ini Beginer paling Beginer…..aku mo tanya….ada nggak cara paling mudah untuk mereset program
    demo/trial 30 hari .gitu…trus buat keygenerator ….yang bisa digunakan di semua program trial…………

    Please……………Banget ………………..

    Balas
  6. orakanggo Penulis Tulisan

    @fairvz
    wah mas, sama donk saya juga beginner… cara paling mudahnya adalah belajar, dan itu harus diasah lewat latihan terus menerus mulai dari yang paling gampang dulu

    trus keygen gak bisa dibikin generic kecuali dari pembuat aplikasi sendiri yang membuat algoritmanya sehingga berlaku generic

    @rudyahkawit
    tut laen bisa dicari di kategori tutorial>reversing ada banyak koq atau cari aja di internet tutorial dari para reverser yang laen, tapi sorry nih gk bisa kirim lewat email ya🙂

    Balas
  7. Ping balik: Ikatan Alumni SMK Telekomunikasi Malang » Blog Archive » Self Keygenning

  8. Ping balik: Self Keygenning « younuzes

  9. Bucex

    Hi, Salam Kenal. Kalau Crackingnya Pakai PE Explore Bisa Gak?Aq Sempat Koleksi Soft Ice, IDA, Inq Soft Tapi Sudah Hilang Dimakan Virus. Kalau Tutorial Meng-Compile Keygennya Pakai C++ Atau Delphi ada gak? Soalnya Aq Cuma Biasa Pakai Delphi. Maklum Pren Aq Cuma Lulusan S1 Sekolah Dasar.He…3x…Jangan Diejek!…

    Balas
  10. Bucex

    Berawal Dari Music Keygen Aq Jatuh Cinta Pada Dunia Cracking Maka Dari itu Bantu Aq Pren! Hi, Salam Kenal. Kalau Crackingnya Pakai PE Explore Bisa Gak?Aq Sempat Koleksi Soft Ice, IDA, Inq Soft Tapi Sudah Hilang Dimakan Virus. Kalau Tutorial Meng-Compile Keygennya Pakai C++ Atau Delphi ada gak? Soalnya Aq Cuma Biasa Pakai Delphi. Maklum Pren Aq Cuma Lulusan S1 Sekolah Dasar.He…3x…Jangan Diejek!…

    Balas
  11. vodkanovic

    ugh…. ampoooo….oooon kk…. poseng aku,terlalu rumit buat real newbie,dah tak nyobi2 lho.. nda bisa2… rzrzrzrzrrz stres,stres,stres……
    ada tut yg lebih awam nda?

    Balas
  12. install whatsapp on pc

    I know this web page provides quality depending articles or reviews and extra information, is there
    any other web page which offers such information in quality?

    Balas

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s