Sabtu, 17 September 2011

0 Keygenning Keygenme by TDC 2005 – RIP ASM

Date: Sabtu, 17 September 2011 04.47
Category:
Author: deny saputra
Share:
Responds: 0 Comment

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
{image: Key Generator ME by TDC}
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).
{image: Breakpoint}
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
?
————- [ With Inline ASM In Delphi ] ————-
01procedure TForm1. Button1Click(Sender: TObject);
02var
03len,serial:integer;
04name:string;
05begin
06name:=edit1.Text;
07len:=length(name);
08if name='' then begin
09edit2.Text:='please insert your name...';
10end else
11if (len<=3or (len>=9then begin
12edit2.Text:='more name 3 char and less name 9 char...';
13end else begin
14asm
15Pushad
16        mov edi,name
17        mov edx,len
18        xor ecx,ecx
19        xor ebx,ebx
20@keygenme_004012C6:
21        movzx eax,byte ptr ds:[ecx+edi]
22        add eax,$0A
23        add ebx,eax
24        inc ecx
25        cmp ecx,edx
26jnz @keygenme_004012C6
27        xor ecx,ecx
28        push ebx
29        xor ebx,ebx
30        add ebx,$0756F59
31        push ebx
32        xor ebx,ebx
33        add ebx,$06D6C61
34        push ebx
35        xor ebx,ebx
36        add ebx,$074736F
37        push ebx
38        xor ebx,ebx
39        add ebx,$0646964
40        push ebx
41        xor ebx,ebx
42        add ebx,$0217469
43        push ebx
44        xor ebx,ebx
45        add ebx,$0212121
46        push ebx
47        xor ebx,ebx
48        pop ebx
49        pop ebx
50        pop ebx
51        pop ebx
52        pop ebx
53        pop ebx
54        pop ebx
55        imul ebx,ebx,$07A69
56        mov serial,ebx
57Popad
58end;
59edit2.Text:=format('%d',[serial]);
60end;
61end;

//E.O.F

Artikel Terkait :



Posting Komentar