home *** CD-ROM | disk | FTP | other *** search
/ KeyGen Studio 2002 / KeyGen_Studio_2002.iso / Tutorials / CrackMesCbjNet / nh-cm5kg.ZIP / nh-cm5kg.txt < prev   
Encoding:
Text File  |  2001-03-03  |  4.5 KB  |  226 lines

  1. CoDe_InSiDe's 5th crackme keygenning tutorial by nh
  2.  
  3. My e-mail: nh666@mail.ru
  4. Used tools: SoftIce v4.01, Tasm v5.00
  5.  
  6. So, let's begin. Run crackme, fill editboxes & set breakpoint in
  7. softice to GetDlgItemTextA by 'bpx GetDlgItemTextA' command
  8. After that press F12, while we don't see this piece of code:
  9.  
  10.   mov eax,dword ptr [esp+0C]         ; clicking buttons handler
  11.   cmp eax,00001111         
  12.   jz 00000048 
  13.   cmp eax,00002222 
  14.   jz 000000A9 
  15.    xor eax,eax 
  16.   ret 
  17. ; for "About" button click
  18.   push 00000000 
  19.   push 00401F00                ; "About" messages
  20.   push 00401F09 
  21.   push 00000000 
  22.   call dword ptr [00401D7C]         ; call MessageBoxA ("About" box)
  23.   ret 
  24. ; for "Check" button click
  25.   push ebp 
  26.   mov ebp,esp 
  27.  
  28. ; we get all editboxes text.
  29.   push 00000015 
  30.   push 00401E30 
  31.   push 0000AAAA 
  32.   push dword ptr [ebp+0C] 
  33.   call dword ptr [00401D70] ; call GetDlgItemTextA
  34.  
  35.   pop ebp 
  36.   push ebp 
  37.   mov ebp,esp 
  38.   push 00000015 
  39.   push 00401E50 
  40.   push 0000BBBB 
  41.   push dword ptr [ebp+0C] 
  42.   call dword ptr [00401D70] 
  43.   pop ebp 
  44.   push ebp 
  45.   mov ebp,esp 
  46.   push 00000015 
  47.   push 00401E70 
  48.   push 0000CCCC 
  49.   push dword ptr [ebp+0C] 
  50.   call dword ptr [00401D70] 
  51.   pop ebp 
  52.   ret 
  53.  
  54. ; delete all breakpoint, set breakpoint to 'push ebp' and then press "Check"
  55.  
  56.   xor eax,eax 
  57.   mov edi,00401E30    ; offset of name
  58.   xor ecx,ecx 
  59.   mov cl,31 
  60.   mov esi,00402300    ; 256 '0' chars
  61.   mov al,byte ptr [edi] 
  62.   cmp al,00 
  63.   jz 000000C5 
  64.   mov byte ptr [eax+esi],cl     ; change to '1'
  65.   inc edi 
  66.   jmp 000000B9 
  67.   mov edi,00401E50     ; offset of organisation
  68.   mov esi,004023FF 
  69.   xor eax,eax 
  70.   xor ecx,ecx 
  71.   mov cl,31 
  72.   mov al,byte ptr [edi] 
  73.   cmp al,00 
  74.   jz 000000E5 
  75.   not eax 
  76.   mov byte ptr [eax+esi],cl    ; change to '1'
  77.   inc edi 
  78.   xor eax,eax 
  79.   jmp 000000D5 
  80.   xor eax,eax 
  81.   mov cl,00 
  82.   mov edi,00402300 
  83.   mov esi,00401E90         ; offset of generated key
  84.   push esi 
  85.   mov al,byte ptr [edi] 
  86.   cmp al,00 
  87.   jz 00000111 
  88.   cmp al,30 
  89.   jnz 00000102 
  90.   inc ecx 
  91.   inc edi 
  92.   jmp 000000F4 
  93.   cmp al,31 
  94.   jz 0000010A 
  95.   inc ecx 
  96.   inc edi 
  97.   jmp 000000F4 
  98.   inc ecx 
  99.   mov byte ptr [esi],cl 
  100.   inc esi 
  101.   inc edi 
  102.   jmp 000000F4 
  103.   pop edi 
  104.   call 0000011E     ; check key for bad chars (less then ' ', etc)
  105.   call 0000011E     ;
  106.   jmp 00000144 
  107. ; checking procedure
  108.   push edi 
  109.   xor eax,eax 
  110.   mov al,byte ptr [edi] 
  111.   cmp al,00 
  112.   jz 00000142 
  113.   cmp al,20 
  114.   jb 00000132 
  115.   cmp al,7E 
  116.   jnbe 0000013A 
  117.   inc edi 
  118.   jmp 00000121 
  119.   add eax,00000045 
  120.   mov byte ptr [edi],al 
  121.   inc edi 
  122.   jmp 00000121 
  123.   add eax,FFFFFFBA 
  124.   mov byte ptr [edi],al 
  125.   inc edi 
  126.   jmp 00000121 
  127.   pop edi 
  128.   ret 
  129.  
  130.   xor ecx,ecx 
  131.   mov edx,00401E70 
  132.   mov al,byte ptr [edx] 
  133.   cmp al,00 
  134.   jz 00000155 
  135.   inc ecx 
  136.   inc edx 
  137.   jmp 0000014B 
  138.   sub esi,edi 
  139.   cmp esi,ecx 
  140.   jnb 0000015D 
  141.   jmp 0000018A 
  142.   mov edi,00401E30 
  143.   xor eax,eax 
  144.   call 00000178 
  145.   mov edi,00401E50 
  146.   call 00000178 
  147.   mov edi,00401E70 
  148.   mov dword ptr [edi],eax 
  149.   add edi,00000004 
  150.   mov dword ptr [edi],eax 
  151.   add edi,00000004 
  152.   mov dword ptr [edi],eax 
  153.   add edi,00000004 
  154.   mov dword ptr [edi],eax 
  155.   ret 
  156. ;
  157.   mov edi,00401E70 
  158.   mov al,byte ptr [edi] ; check for empty name
  159.   cmp al,00 
  160.   jnz 00000196 
  161.   ret 
  162. ;
  163.   xor eax,eax 
  164.   xor ecx,ecx 
  165.   xor edx,edx 
  166.   xor esi,esi 
  167.   xor edi,edi 
  168.   mov edi,00401E50 
  169.   mov al,byte ptr [edi] ; check for empty organisation
  170.   cmp al,00 
  171.   jnz 000001AC 
  172.   ret 
  173. ;
  174.   mov al,00 
  175.   add edi,FFFFFFE0 
  176.   mov al,byte ptr [edi] ; check for empty key
  177.   cmp al,00 
  178.   jnz 000001B8 
  179.   ret 
  180.   mov al,00 
  181.   xor edi,edi 
  182.   mov esi,00401FA9 ; 0a0b0c0d
  183.   mov edi,00401E90 
  184.   mov esi,dword ptr [esi] 
  185.   mov eax,dword ptr [edi] 
  186.   test eax,eax 
  187.   jz 000001D8 
  188.   xor eax,esi         ; xor every dword in gen.key with 0a0b0c0dh
  189.   mov dword ptr [edi+20],eax 
  190.   add edi,00000004 
  191.   jmp 000001C8 
  192.   mov edi,00401EB0 
  193. ; check for bad chars
  194.   mov al,byte ptr [edi] 
  195.   cmp al,00 
  196.   jz 000001FE 
  197.   cmp al,20 
  198.   jb 000001EE 
  199.   cmp al,7E 
  200.   jnbe 000001F6 
  201.   inc edi 
  202.   jmp 000001DD 
  203.   add al,30 
  204.   mov byte ptr [edi],al 
  205.   inc edi 
  206.   jmp 000001DD 
  207.   add al,D0 
  208.   mov byte ptr [edi],al 
  209.   inc edi 
  210.   jmp 000001DD 
  211. ; compare two keys: generated & our.
  212.   mov edi,00401E70 
  213.   mov esi,00401EB0 
  214.   mov eax,dword ptr [edi] 
  215.   mov ecx,dword ptr [esi] 
  216.   test eax,eax 
  217.   jz 0000024E 
  218.   cmp eax,ecx 
  219.   jz 00000216 
  220. [...skip...]
  221.  
  222. so, it's very simple algo...
  223. the source of keygen in nh-cm50kg.asm
  224.  
  225. pS: oh, don't enter long name&organisation, because length of key is limited.=)
  226.