Kali ini saya akan membahas bagaimana membuat keygen dengan meng-rip code asm dari target KeygenMe By TDC 2005.
- Target: keygenme-tdc.exe
- Protection: Serial
- Compiller: MASM32 / TASM32
- Level: Easy
- Tools: Ollydbg v1.10
- Skills: ASM, Delphi, Reverse, Logic
Key Generator ME by TDC
Ok, sekarang load targetnya ke Ollydbg, lalu jalankan (F9). Isi aja semua, min length name 3 char dan max length name 9 char, lalu klik “Register”. Dan pastinya akan muncul pesan, yg mengatakan bahwa: “Sorry, try again or click hints if you want”
Sekarang breakpoint sebelum pesan “badboyz” tersebut keluar, tepatnya di address “00401179″, sebagaimana terlihat pada gambar di bawah ini (klik untuk memperbesar).
Breakpoint
0040118D . 83F8 00 cmp eax,0
00401190 . 75 14 jnz short keygenme.004011A6
00401192 . 68 83634000 push keygenme.00406383 ; ASCII "Registered"
00401197 . 6A 70 push 70
00401199 . FF75 08 push dword ptr ss:[ebp+8]
0040119C . E8 C5010000 call <jmp.&user32.SetDlgItemTextA>
004011A1 . E9 08010000 jmp keygenme.004012AE
004011A6 > 68 92614000 push keygenme.00406192 ; ASCII "Sorry, try again
or click hints if you want."
004011AB . 6A 6C push 6C
004011AD . FF75 08 push dword ptr ss:[ebp+8]
004011B0 . E8 B1010000 call <jmp.&user32.SetDlgItemTextA>
004011B5 . 68 8E634000 push keygenme.0040638E ; ASCII "Unregistered"
004011BA . 6A 70 push 70
004011BC . FF75 08 push dword ptr ss:[ebp+8]
004011BF . E8 A2010000 call <jmp.&user32.SetDlgItemTextA>
Nah itu dia yg menentukan apakah serial yg kita input sama dengan serial yg sebenarnya. Jika serial yg kita sama maka EAX = 0, tapi jika tidak maka EAX = FFFFFFFF. Sekarang kita lihat algo/loopnya, di dalam call yang tadi diberi breakpoint tersebut, yaitu:
004012B6 |. 68 70644000 push keygenme.00406470
004012BB |. E8 DC000000 call
004012C0 |. 8BD0 mov edx,eax
004012C2 |. 33C9 xor ecx,ecx
004012C4 |. 33DB xor ebx,ebx
004012C6 |> 0FB681 706440 movzx eax,byte ptr ds:[ecx+406470]
004012CD |. 83C0 0A add eax,0A
004012D0 |. 03D8 add ebx,eax
004012D2 |. 41 inc ecx
004012D3 |. 3BCA cmp ecx,edx
004012D5 |.^ 75 EF jnz short keygenme.004012C6
004012D7 |. 33C9 xor ecx,ecx
004012D9 |. 53 push ebx
004012DA |. 33DB xor ebx,ebx
004012DC |. 81C3 596F7500 add ebx,756F59
004012E2 |. 53 push ebx
004012E3 |. 33DB xor ebx,ebx
004012E5 |. 81C3 616C6D00 add ebx,6D6C61
004012EB |. 53 push ebx
004012EC |. 33DB xor ebx,ebx
004012EE |. 81C3 6F737400 add ebx,74736F
004012F4 |. 53 push ebx
004012F5 |. 33DB xor ebx,ebx
004012F7 |. 81C3 64696400 add ebx,646964
004012FD |. 53 push ebx
004012FE |. 33DB xor ebx,ebx
00401300 |. 81C3 69742100 add ebx,217469
00401306 |. 53 push ebx
00401307 |. 33DB xor ebx,ebx
00401309 |. 81C3 21212100 add ebx,212121
0040130F |. 53 push ebx
00401310 |. 33DB xor ebx,ebx
00401312 |. 5B pop ebx
00401313 |. 5B pop ebx
00401314 |. 5B pop ebx
00401315 |. 5B pop ebx
00401316 |. 5B pop ebx
00401317 |. 5B pop ebx
00401318 |. 5B pop ebx
00401319 |. 69DB 697A0000 imul ebx,ebx,7A69
0040131F |. 53 push ebx
00401320 |. 68 DB634000 push keygenme.004063DB ; ASCII "%d"
Setelah di analisa, maka hasilnya:
- name di isi ke 00406470 (push keygenme.00406470)
- length name di isi ke EDX (mov edx,eax)
- ambil setiap byte dari name lalu di isi ke EAX (movzx eax,byte ptr ds:[ecx+406470])
- dijumlahkan dengan $0A (add eax,0A)
- dijumlahkan lagi dengan nilai dari EBX
- lalu dikalikan dengan $7A69
- hasilnya di format %d
- dan hasilnya itu adalah real serial-nya
Dan ini dia source code keygen dengan meng-rip asm / Inline ASM
Posting Komentar