飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3502|回复: 4

[原创] 比铰经典查表 CM 算法分析和注册机编写

[复制链接]
  • TA的每日心情

    2016-12-29 21:52
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-6-9 23:13:16 | 显示全部楼层 |阅读模式
    本帖最后由 wangwei1978 于 2015-6-9 23:13 编辑

             如何找关键就不说,汇编太长太乱只是大致了解一下
    1. .text:00401130 ; int __cdecl sub_401130(HWND hDlg)
    2. .text:00401130 sub_401130      proc near               ; CODE XREF: WinMain(x,x,x,x)+81p
    3. .text:00401130
    4. .text:00401130 MainkeyBuffer   = byte ptr -51Ch
    5. .text:00401130 nameBuffer      = byte ptr -4FCh
    6. .text:00401130 var_4FB         = byte ptr -4FBh
    7. .text:00401130 name            = byte ptr -434h
    8. .text:00401130 var_433         = byte ptr -433h
    9. .text:00401130 reg             = byte ptr -36Ch
    10. .text:00401130 var_36B         = byte ptr -36Bh
    11. .text:00401130 Key_288         = byte ptr -2A4h
    12. .text:00401130 var_2A3         = byte ptr -2A3h
    13. .text:00401130 hDlg            = dword ptr  4
    14. .text:00401130
    15. .text:00401130                 sub     esp, 51Ch
    16. .text:00401136                 push    ebx
    17. .text:00401137                 push    ebp
    18. .text:00401138                 push    esi
    19. .text:00401139                 push    edi
    20. .text:0040113A                 mov     ecx, 7
    21. .text:0040113F                 mov     esi, offset Mainkey ; "TRADECANMAKEEVERYONEBETTEROFF"
    22. .text:00401144                 lea     edi, [esp+52Ch+MainkeyBuffer]
    23. .text:00401148                 xor     eax, eax
    24. .text:0040114A                 rep movsd
    25. .text:0040114C                 movsw
    26. .text:0040114E                 mov     ecx, 31h
    27. .text:00401153                 lea     edi, [esp+52Ch+var_433]
    28. .text:0040115A                 mov     [esp+52Ch+name], 0
    29. .text:00401162                 mov     [esp+52Ch+reg], 0
    30. .text:0040116A                 rep stosd
    31. .text:0040116C                 stosw
    32. .text:0040116E                 stosb
    33. .text:0040116F                 mov     ecx, 31h
    34. .text:00401174                 xor     eax, eax
    35. .text:00401176                 lea     edi, [esp+52Ch+var_36B]
    36. .text:0040117D                 mov     [esp+52Ch+Key_288], 0
    37. .text:00401185                 rep stosd
    38. .text:00401187                 stosw
    39. .text:00401189                 stosb
    40. .text:0040118A                 mov     ecx, 0A8h
    41. .text:0040118F                 xor     eax, eax
    42. .text:00401191                 lea     edi, [esp+52Ch+var_2A3]
    43. .text:00401198                 mov     [esp+52Ch+nameBuffer], 0
    44. .text:0040119D                 rep stosd
    45. .text:0040119F                 stosw
    46. .text:004011A1                 stosb
    47. .text:004011A2                 mov     ecx, 31h
    48. .text:004011A7                 xor     eax, eax
    49. .text:004011A9                 lea     edi, [esp+52Ch+var_4FB]
    50. .text:004011AD                 xor     esi, esi
    51. .text:004011AF                 rep stosd
    52. .text:004011B1                 stosw
    53. .text:004011B3                 stosb
    54. .text:004011B4                 lea     edi, [esp+52Ch+Key_288]
    55. .text:004011BB
    56. .text:004011BB loc_4011BB:                             ; CODE XREF: sub_401130+A8j
    57. .text:004011BB                 xor     ecx, ecx
    58. .text:004011BD
    59. .text:004011BD loc_4011BD:                             ; CODE XREF: sub_401130+A1j
    60. .text:004011BD                 lea     eax, [ecx+esi]
    61. .text:004011C0                 mov     ebx, 1Ah
    62. .text:004011C5                 cdq
    63. .text:004011C6                 idiv    ebx
    64. .text:004011C8                 add     dl, 41h
    65. .text:004011CB                 mov     [edi+ecx], dl
    66. .text:004011CE                 inc     ecx
    67. .text:004011CF                 cmp     ecx, ebx
    68. .text:004011D1                 jl      short loc_4011BD
    69. .text:004011D3                 inc     esi
    70. .text:004011D4                 add     edi, ebx
    71. .text:004011D6                 cmp     esi, ebx
    72. .text:004011D8                 jl      short loc_4011BB
    73. .text:004011DA                 mov     ebp, [esp+52Ch+hDlg]
    74. .text:004011E1                 lea     eax, [esp+52Ch+name]
    75. .text:004011E8                 push    0C9h            ; cchMax
    76. .text:004011ED                 push    eax             ; lpString
    77. .text:004011EE                 push    3E8h            ; nIDDlgItem
    78. .text:004011F3                 push    ebp             ; hDlg
    79. .text:004011F4                 call    ds:GetDlgItemTextA
    80. .text:004011FA                 mov     esi, eax
    81. .text:004011FC                 cmp     esi, 4
    82. .text:004011FF                 jl      loc_401305
    83. .text:00401205                 cmp     esi, 0Fh
    84. .text:00401208                 jg      loc_401305
    85. .text:0040120E                 lea     ecx, [esp+52Ch+name]
    86. .text:00401215                 push    esi
    87. .text:00401216                 push    ecx
    88. <font size="4" color="#ff0000">.text:00401217                 call    sub_401320      ; 这个CALL 作用是检测是否有数字或特殊字符,有就返回0,注册失败,另一个功能,是小写转为大写</font>
    89. .text:0040121C                 add     esp, 8
    90. .text:0040121F                 test    eax, eax
    91. .text:00401221                 jz      loc_401305
    92. .text:00401227                 mov     eax, 1Dh
    93. .text:0040122C                 cdq
    94. .text:0040122D                 idiv    esi
    95. .text:0040122F                 test    eax, eax
    96. .text:00401231                 jle     short loc_40124D
    97. .text:00401233                 mov     edi, ds:lstrcatA
    98. .text:00401239                 mov     esi, eax
    99. .text:0040123B
    100. .text:0040123B loc_40123B:                             ; CODE XREF: sub_401130+11Bj
    101. .text:0040123B                 lea     edx, [esp+52Ch+name]
    102. .text:00401242                 lea     eax, [esp+52Ch+nameBuffer]
    103. .text:00401246                 push    edx             ; lpString2
    104. .text:00401247                 push    eax             ; lpString1
    105. .text:00401248                 call    edi ; lstrcatA
    106. .text:0040124A                 dec     esi
    107. .text:0040124B                 jnz     short loc_40123B
    108. .text:0040124D
    109. .text:0040124D loc_40124D:                             ; CODE XREF: sub_401130+101j
    110. .text:0040124D                 mov     ebx, ds:lstrlenA
    111. .text:00401253                 lea     ecx, [esp+52Ch+nameBuffer]
    112. .text:00401257                 push    ecx             ; lpString
    113. .text:00401258                 call    ebx ; lstrlenA
    114. .text:0040125A                 mov     esi, 1Dh
    115. .text:0040125F                 xor     edi, edi
    116. .text:00401261                 sub     esi, eax
    117. .text:00401263                 test    esi, esi
    118. .text:00401265                 jle     short loc_40127E
    119. .text:00401267
    120. .text:00401267 loc_401267:                             ; CODE XREF: sub_401130+14Cj
    121. .text:00401267                 lea     edx, [esp+52Ch+nameBuffer]
    122. .text:0040126B                 push    edx             ; lpString
    123. .text:0040126C                 call    ebx ; lstrlenA
    124. .text:0040126E                 mov     cl, [esp+edi+52Ch+name]
    125. .text:00401275                 inc     edi
    126. .text:00401276                 cmp     edi, esi
    127. .text:00401278                 mov     [esp+eax+52Ch+nameBuffer], cl
    128. .text:0040127C                 jl      short loc_401267
    129. .text:0040127E
    130. .text:0040127E loc_40127E:                             ; CODE XREF: sub_401130+135j
    131. .text:0040127E                 lea     edx, [esp+52Ch+reg]
    132. .text:00401285                 push    0C9h            ; cchMax
    133. .text:0040128A                 push    edx             ; lpString
    134. .text:0040128B                 push    3E9h            ; nIDDlgItem
    135. .text:00401290                 push    ebp             ; hDlg
    136. .text:00401291                 call    ds:GetDlgItemTextA
    137. .text:00401297                 cmp     eax, 1Dh
    138. .text:0040129A                 jnz     short loc_401305
    139. .text:0040129C                 push    eax
    140. .text:0040129D                 lea     eax, [esp+530h+reg]
    141. .text:004012A4                 push    eax
    142. .text:004012A5                 call    sub_401320
    143. .text:004012AA                 add     esp, 8
    144. .text:004012AD                 test    eax, eax
    145. .text:004012AF                 jz      short loc_401305
    146. .text:004012B1                 xor     edx, edx
    147. .text:004012B3
    148. .text:004012B3 loc_4012B3:                             ; CODE XREF: sub_401130+1C3j
    149. .text:004012B3                 mov     al, [esp+edx+52Ch+nameBuffer]
    150. .text:004012B7                 sub     al, 41h
    151. .text:004012B9                 xor     ecx, ecx
    152. .text:004012BB                 movsx   eax, al
    153. .text:004012BE                 lea     esi, [eax+eax*2]
    154. .text:004012C1                 lea     eax, [eax+esi*4]
    155. .text:004012C4                 lea     esi, [esp+eax*2+52Ch+Key_288]
    156. .text:004012CB                 mov     al, [esp+edx+52Ch+reg]
    157. .text:004012D2
    158. .text:004012D2 loc_4012D2:                             ; CODE XREF: sub_401130+1BDj
    159. .text:004012D2                 cmp     al, [esi+ecx]
    160. .text:004012D5                 jnz     short loc_4012E9
    161. .text:004012D7                 mov     bl, [esp+edx+52Ch+MainkeyBuffer]
    162. .text:004012DB                 cmp     bl, [esp+ecx+52Ch+Key_288]
    163. .text:004012E2                 jnz     short loc_401305
    164. .text:004012E4                 mov     ecx, 1Dh
    165. .text:004012E9
    166. .text:004012E9 loc_4012E9:                             ; CODE XREF: sub_401130+1A5j
    167. .text:004012E9                 inc     ecx
    168. .text:004012EA                 cmp     ecx, 1Dh
    169. .text:004012ED                 jl      short loc_4012D2
    170. .text:004012EF                 inc     edx
    171. .text:004012F0                 cmp     edx, 1Dh
    172. .text:004012F3                 jl      short loc_4012B3
    173. .text:004012F5                 pop     edi
    174. .text:004012F6                 pop     esi
    175. .text:004012F7                 pop     ebp
    176. .text:004012F8                 mov     eax, 1
    177. .text:004012FD                 pop     ebx
    178. .text:004012FE                 add     esp, 51Ch
    179. .text:00401304                 retn
    180. .text:00401305 ; ---------------------------------------------------------------------------
    181. .text:00401305
    182. .text:00401305 loc_401305:                             ; CODE XREF: sub_401130+CFj
    183. .text:00401305                                         ; sub_401130+D8j ...
    184. .text:00401305                 pop     edi
    185. .text:00401306                 pop     esi
    186. .text:00401307                 pop     ebp
    187. .text:00401308                 xor     eax, eax
    188. .text:0040130A                 pop     ebx
    189. .text:0040130B                 add     esp, 51Ch
    190. .text:00401311                 retn
    191. .text:00401311 sub_401130      endp
    复制代码
          我用F5看再整理一下看代码
    1. int __cdecl sub_401130(HWND hDlg)
    2. {
    3.   signed int n; // esi@1
    4.   char *Key; // edi@1
    5.   signed int i; // ecx@2
    6.   int namelen; // eax@5
    7.   signed int namelen_1; // esi@5
    8.   int m; // esi@9
    9.   int y; // edi@11
    10.   int k; // esi@11
    11.   int nameBufferlen; // eax@12
    12.   CHAR namebyte; // cl@12
    13.   signed int i_reg; // edx@15
    14.   signed int y_reg; // ecx@16
    15.   int result; // eax@22
    16.   char MainkeyBuffer[32]; // [sp+10h] [bp-51Ch]@1
    17.   CHAR nameBuffer; // [sp+30h] [bp-4FCh]@1
    18.   char v16; // [sp+31h] [bp-4FBh]@1
    19.   __int16 v17; // [sp+F5h] [bp-437h]@1
    20.   char v18; // [sp+F7h] [bp-435h]@1
    21.   CHAR name; // [sp+F8h] [bp-434h]@1
    22.   char v20; // [sp+F9h] [bp-433h]@1
    23.   __int16 v21; // [sp+1BDh] [bp-36Fh]@1
    24.   char v22; // [sp+1BFh] [bp-36Dh]@1
    25.   CHAR reg; // [sp+1C0h] [bp-36Ch]@1
    26.   char v24; // [sp+1C1h] [bp-36Bh]@1
    27.   __int16 v25; // [sp+285h] [bp-2A7h]@1
    28.   char v26; // [sp+287h] [bp-2A5h]@1
    29.   char Key_288; // [sp+288h] [bp-2A4h]@1
    30.   char v28; // [sp+289h] [bp-2A3h]@1
    31.   __int16 v29; // [sp+529h] [bp-3h]@1
    32.   char v30; // [sp+52Bh] [bp-1h]@1
    33.   ;  把一个KEY表COPY (Mainkey db 'TRADECANMAKEEVERYONEBETTEROFF',0)进 MainkeyBuffer中
    34.   ;#####################################################
    35.   qmemcpy(MainkeyBuffer, Mainkey, 0x1Eu);
    36.   name = 0;
    37.   reg = 0;
    38.   memset(&v20, 0, 196u);
    39.   v21 = 0;
    40.   v22 = 0;
    41.   Key_288 = 0;
    42.   memset(&v24, 0, 196u);
    43.   v25 = 0;
    44.   v26 = 0;
    45.   nameBuffer = 0;
    46.   memset(&v28, 0, 672u);
    47.   v29 = 0;
    48.   v30 = 0;
    49.   n = 0;
    50.   memset(&v16, 0, 0xC4u);
    51.   v17 = 0;
    52.   v18 = 0;
    53.   ; 初始化堆栈
    54.   ;####################################################
    55.   Key = &Key_288;
    56.   do
    57.   {
    58.     i = 0;
    59.     do
    60.     {
    61.       Key[i] = (i + n) % 0x1A + 0x41;
    62.       ++i;
    63.     }
    64.     while ( i < 0x1A );
    65.     ++n;
    66.     Key += 0x1A;
    67.   }
    68.   while ( n < 0x1A );
    69.   ;动态初始化另一个KEY表用于查表选岀组成注册码的字符
    70.   ;####################################################
    71.   namelen = GetDlgItemTextA(hDlg, 1000, &name, 201);
    72.   namelen_1 = namelen;
    73.   if ( namelen < 4 || namelen > 0xF || !sub_401320((int)&name, namelen) )
    74.     goto error;
    75.   if ( 0x1D / namelen_1 > 0 )
    76.   {
    77.     m = 0x1D / namelen_1;
    78.     do
    79.     {
    80.       lstrcatA(&nameBuffer, &name);
    81.       --m;
    82.     }
    83.     while ( m );
    84.   }
    85.   y = 0;
    86.   k = 0x1D - lstrlenA(&nameBuffer);
    87.   if ( k > 0 )
    88.   {
    89.     do
    90.     {
    91.       nameBufferlen = lstrlenA(&nameBuffer);
    92.       namebyte = *(&name + y++);
    93.       *(&nameBuffer + nameBufferlen) = namebyte;
    94.     }
    95.     while ( y < k );
    96.   }
    97. ;判断用户名长度是否大于4小于15.在此范围,就开始拼接用户名字串, m 是注册码长度/用户名长度.并把它作

    98. 为拼接用户名的次数.不是0x1D长度的字符用用户名单字循环补足为止
    99. ;################################################################
    100.   if ( GetDlgItemTextA(hDlg, 1001, &#174;, 201) == 0x1D && sub_401320((int)&#174;, 0x1D) )
    101.   {
    102.     i_reg = 0;   外循环为注册码长度
    103.     do
    104.     {
    105.       y_reg = 0;
    106.       do
    107.       {
    108.         ;注册码逐位取出和从第二个KEY表(位置是用户名 - 0x41的26倍的值 )开始比较,找到后.
    109.         if ( *(&#174; + i_reg) == *(&Key_288 + 26 * (char)(*(&nameBuffer + i_reg) - 0x41) + y_reg)

    110. )
    111.         {
    112.           ;找到注册码所在KEy表位置 y_reg ,再逐位取出第一个KEY 与第二KEY[y_reg] 进行匹配
    113.           if ( MainkeyBuffer[i_reg] != *(&Key_288 + y_reg) )
    114.             goto error;
    115.           y_reg = 0x1D;
    116.         }
    117.         ++y_reg;
    118.       }
    119.       while ( y_reg < 0x1D );
    120.       ++i_reg;
    121.     }
    122.     while ( i_reg < 0x1D );
    123.     ;如果所有MainkeyBuffer[i_reg]== 第二KEY表[y_reg]注册成功
    124.     result = 1;
    125.   }
    126.   else
    127.   {
    128. error:
    129.     result = 0;
    130.   }
    131.   return result;
    132. }
    复制代码
          大家应该可以看懂.
    整理一下算法
    1.首先用户名要在4 --->15之间,注册码长度为29
    2.判断用户名和注册码都不能有数字和特殊字符,有直接死了,而且会把小写改成大写
    3.用户名把小写改为大写后,用注册码长度除以用户名长度 得到的值用作循环把用户名字符连接的次数,循环完后不足29位,再用用户名单字符循环补齐
    4.还真不好说看代码
    1.   if ( GetDlgItemTextA(hDlg, 1001, &#174;, 201) == 0x1D && sub_401320((int)&#174;, 0x1D) )
    2.   {
    3.     i_reg = 0;   外循环为注册码长度
    4.     do
    5.     {
    6.       y_reg = 0;
    7.       do
    8.       {
    9.         ;注册码逐位取出和从第二个KEY表(位置是用户名 - 0x41的26倍的值 )开始比较,找到后.
    10.         if ( *(&#174; + i_reg) == *(&Key_288 + 26 * (char)(*(&nameBuffer + i_reg) - 0x41) + y_reg)

    11. )
    12.         {
    13.           ;找到注册码所在KEy表位置 y_reg ,再逐位取出第一个KEY 与第二KEY[y_reg] 进行匹配
    14.           if ( MainkeyBuffer[i_reg] != *(&Key_288 + y_reg) )
    15.             goto error;
    16.           y_reg = 0x1D;
    17.         }
    18.         ++y_reg;
    19.       }
    20.       while ( y_reg < 0x1D );
    21.       ++i_reg;
    22.     }
    23.     while ( i_reg < 0x1D );
    24.     ;如果所有MainkeyBuffer[i_reg]== 第二KEY表[y_reg]注册成功
    25.     result = 1;
    26.   }
    27.   else
    28.   {
    29. error:
    30.     result = 0;
    31.   }
    32.   return result;
    33. }
    复制代码
    5.注册源码从汇编提取出看下
    1. ; =============== S U B        R O U T        I N E =======================================
    2. sub_401320  proc
    3.         pushad
    4.         xor eax,eax
    5.         xor edx,edx
    6. loop1:
    7.         mov dl,byte ptr[ecx+eax]
    8.         cmp dl,0
    9.         je  exit1
    10.         cmp dl,30h
    11.         jna exit
    12.         cmp dl,39h
    13.         jna  exit
    14.         cmp dl,60h
    15.         jna  lea1
    16.         sub dl,20h
    17. lea1:       
    18.         mov byte ptr[ecx+eax],dl
    19.         inc eax
    20.         jmp loop1           
    21. exit:
    22.         popad
    23.         mov eax,0
    24.         ret
    25. exit1:       
    26.         popad
    27.         ret

    28. sub_401320 endp

    29. ; int __cdecl sub_401130(HWND hDlg)
    30. sub_401130        proc near                ; CODE XREF: WinMain(x,x,x,x)+81p

    31. MainkeyBuffer        = byte ptr -51Ch
    32. nameBuffer        = byte ptr -4FCh
    33. var_4FB                = byte ptr -4FBh
    34. szname                = byte ptr -434h
    35. var_433                = byte ptr -433h
    36. reg                = byte ptr -36Ch
    37. var_36B                = byte ptr -36Bh
    38. Key_288                = byte ptr -2A4h
    39. var_2A3                = byte ptr -2A3h
    40. hDlg                = dword        ptr  4

    41.                 sub        esp, 51Ch
    42.                 push        ebx
    43.                 push        ebp
    44.                 push        esi
    45.                 push        edi
    46.                 mov        ecx, 7
    47.                 mov        esi, offset Mainkey ; "TRADECANMAKEEVERYONEBETTEROFF"
    48.                 lea        edi, [esp+52Ch+MainkeyBuffer]
    49.                 xor        eax, eax
    50.                 rep movsd
    51.                 movsw
    52.                 mov        ecx, 31h
    53.                 lea        edi, [esp+52Ch+var_433]
    54.                 mov        [esp+52Ch+szname], 0
    55.                 mov        [esp+52Ch+reg],        0
    56.                 rep stosd
    57.                 stosw
    58.                 stosb
    59.                 mov        ecx, 31h
    60.                 xor        eax, eax
    61.                 lea        edi, [esp+52Ch+var_36B]
    62.                 mov        [esp+52Ch+Key_288], 0
    63.                 rep stosd
    64.                 stosw
    65.                 stosb
    66.                 mov        ecx, 0A8h
    67.                 xor        eax, eax
    68.                 lea        edi, [esp+52Ch+var_2A3]
    69.                 mov        [esp+52Ch+nameBuffer], 0
    70.                 rep stosd
    71.                 stosw
    72.                 stosb
    73.                 mov        ecx, 31h
    74.                 xor        eax, eax
    75.                 lea        edi, [esp+52Ch+var_4FB]
    76.                 xor        esi, esi
    77.                 rep stosd
    78.                 stosw
    79.                 stosb
    80.                 lea        edi, [esp+52Ch+Key_288]

    81. loc_4011BB:                                ; CODE XREF: sub_401130+A8j
    82.                 xor        ecx, ecx

    83. loc_4011BD:                                ; CODE XREF: sub_401130+A1j
    84.                 lea        eax, [ecx+esi]
    85.                 mov        ebx, 1Ah
    86.                 cdq
    87.                 idiv        ebx
    88.                 add        dl, 41h
    89.                 mov        [edi+ecx], dl
    90.                 inc        ecx
    91.                 cmp        ecx, ebx
    92.                 jl        short loc_4011BD
    93.                 inc        esi
    94.                 add        edi, ebx
    95.                 cmp        esi, ebx
    96.                 jl        short loc_4011BB
    97.                 mov        ebp, [esp+52Ch+hDlg]
    98.                 lea        eax, [esp+52Ch+szname]
    99.                 push        0C9h                ; cchMax
    100.                 push        eax                ; lpString
    101.                 push        1003                ; nIDDlgItem
    102.                 push        ebp                ; hDlg
    103.                 call        ds:GetDlgItemTextA
    104.                 mov        esi, eax
    105.                 cmp        esi, 4
    106.                 jl        loc_401305
    107.                 cmp        esi, 0Fh
    108.                 jg        loc_401305
    109.                 lea        ecx, [esp+52Ch+szname]
    110. ;                push        esi
    111. ;                push        ecx
    112.                 call        sub_401320
    113. ;                add        esp, 8
    114.                 test        eax, eax
    115.                 jz        loc_401305
    116.                 mov        eax, 1Dh
    117.                 cdq
    118.                 idiv        esi
    119.                 test        eax, eax
    120.                 jle        short loc_40124D
    121.                 mov        edi, ds:lstrcatA
    122.                 mov        esi, eax

    123. loc_40123B:                                ; CODE XREF: sub_401130+11Bj
    124.                 lea        edx, [esp+52Ch+szname]
    125.                 lea        eax, [esp+52Ch+nameBuffer]
    126.                 push        edx                ; lpString2
    127.                 push        eax                ; lpString1
    128.                 call        edi ; lstrcatA
    129.                 dec        esi
    130.                 jnz        short loc_40123B

    131. loc_40124D:                                ; CODE XREF: sub_401130+101j
    132.                 mov        ebx, ds:lstrlenA
    133.                 lea        ecx, [esp+52Ch+nameBuffer]
    134.                 push        ecx                ; lpString
    135.                 call        ebx ; lstrlenA
    136.                 mov        esi, 1Dh
    137.                 xor        edi, edi
    138.                 sub        esi, eax
    139.                 test        esi, esi
    140.                 jle        short loc_40127E

    141. loc_401267:                                ; CODE XREF: sub_401130+14Cj
    142.                 lea        edx, [esp+52Ch+nameBuffer]
    143.                 push        edx                ; lpString
    144.                 call        ebx ; lstrlenA
    145.                 mov        cl, [esp+edi+52Ch+szname]
    146.                 inc        edi
    147.                 cmp        edi, esi
    148.                 mov        [esp+eax+52Ch+nameBuffer], cl
    149.                 jl        short loc_401267

    150. loc_40127E:                                ; CODE XREF: sub_401130+135j
    151. ;                lea        edx, [esp+52Ch+reg]
    152. ;                push        0C9h                ; cchMax
    153. ;                push        edx                ; lpString
    154. ;                push        3E9h                ; nIDDlgItem
    155. ;                push        ebp                ; hDlg
    156. ;                call        ds:GetDlgItemTextA
    157. ;                cmp        eax, 1Dh
    158. ;                jnz        short loc_401305
    159. ;                push        eax
    160. ;                lea        eax, [esp+530h+reg]
    161. ;                push        eax
    162. ;                ;call        sub_401320
    163. ;                add        esp, 8
    164. ;                test        eax, eax
    165. ;                jz        short loc_401305
    166.                 xor        edx, edx

    167. loc_4012B3:                                ; CODE XREF: sub_401130+1C3j
    168.                 mov        al, [esp+edx+52Ch+nameBuffer]
    169.                 sub        al, 41h
    170.                 xor        ecx, ecx
    171.                 movsx        eax, al
    172.                 lea        esi, [eax+eax*2]
    173.                 lea        eax, [eax+esi*4]
    174.                 lea        esi, [esp+eax*2+52Ch+Key_288]
    175. ;                mov        al, [esp+edx+52Ch+reg]

    176. loc_4012D2:                                ; CODE XREF: sub_401130+1BDj
    177. ;                cmp        al, [esi+ecx]
    178. ;                jnz        short loc_4012E9
    179.                 mov        bl, [esp+edx+52Ch+MainkeyBuffer]
    180.                 cmp        bl, [esp+ecx+52Ch+Key_288]
    181.                 jnz        short loc_4012E9
    182.                 mov     al, [esi+ecx]
    183.                 mov     byte ptr[szreg+edx],al
    184.                 mov        ecx, 1Dh

    185. loc_4012E9:                                ; CODE XREF: sub_401130+1A5j
    186.                 inc        ecx
    187.                 cmp        ecx, 1Dh
    188.                 jl        short loc_4012D2
    189.                 inc        edx
    190.                 cmp        edx, 1Dh
    191.                 jl        short loc_4012B3
    192.                 pop        edi
    193.                 pop        esi
    194.                 pop        ebp
    195.                 mov        eax, 1
    196.                 pop        ebx
    197.                 add        esp, 51Ch
    198.                 retn
    199. ; ---------------------------------------------------------------------------

    200. loc_401305:                                ; CODE XREF: sub_401130+CFj
    201.                                         ; sub_401130+D8j ...
    202.                 pop        edi
    203.                 pop        esi
    204.                 pop        ebp
    205.                 xor        eax, eax
    206.                 pop        ebx
    207.                 add        esp, 51Ch
    208.                 retn
    209. sub_401130        endp
    复制代码
        sub_401320这个是我自已实现,功能在上面说了,为保证汇编原来的样子,无用代码并没有删除只是注释了,方便朋友对照学习。同时CM和注册机源码打包上传。请大家指点
            


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-9-27 19:17
  • 签到天数: 31 天

    [LV.5]常住居民I

    发表于 2015-6-9 23:37:19 | 显示全部楼层
    就是那个挖了许多坑逼你静态分析的cm?{:soso_e179:}

    点评

    坑就一个,也可以动态调试,IDA的F5更直观。只是看到反调试判断,想都没选择了一个算法模块。但忘了一件事,od可以过掉这个反调试。所以我选择分析模块是错的。上面是陷井中的算法注册机了,真的算法没有分析  详情 回复 发表于 2015-6-10 05:56
    PYG19周年生日快乐!
  • TA的每日心情

    3 小时前
  • 签到天数: 2578 天

    [LV.Master]伴坛终老

    发表于 2015-6-9 23:47:14 | 显示全部楼层
    喜欢这样的源码,利于我们初学者学习,赞一个{:soso_e179:}
    PYG19周年生日快乐!
  • TA的每日心情

    2016-12-29 21:52
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2015-6-10 05:40:39 来自手机 | 显示全部楼层
    lucky_789 发表于 2015-6-9 23:37
    就是那个挖了许多坑逼你静态分析的cm?{:soso_e179:}

    不是
    PYG19周年生日快乐!
  • TA的每日心情

    2016-12-29 21:52
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2015-6-10 05:56:10 | 显示全部楼层
    lucky_789 发表于 2015-6-9 23:37
    就是那个挖了许多坑逼你静态分析的cm?
    1. sub_4012C0        proc near                ; CODE XREF: sub_401028j

    2. Buffer                = byte ptr -138h
    3. n                = dword        ptr -0F8h
    4. sum_1                = dword        ptr -0F4h
    5. sum                = dword        ptr -0F0h
    6. var_24                = dword        ptr -24h
    7. szname                = dword        ptr  8

    8.                 push        ebp
    9.                 mov        ebp, esp
    10.                 sub        esp, 138h
    11.                 push        ebx
    12.                 push        esi
    13.                 push        edi
    14.                 lea        edi, [ebp+Buffer]
    15.                 mov        ecx, 4Eh
    16.                 mov        eax, 0CCCCCCCCh
    17.                 rep stosd
    18.                 mov        [ebp+sum], 0FFFFFFF8h
    19.                 mov        [ebp+sum_1], 0
    20.                 mov        [ebp+n], 3C6h
    21.                 mov        [ebp+var_24], 0
    22.                 jmp        short loc_40130E
    23. ; ---------------------------------------------------------------------------

    24. loc_401305:                                ; CODE XREF: sub_4012C0+77j
    25.                 mov        eax, [ebp+var_24]
    26.                 add        eax, 1
    27.                 mov        [ebp+var_24], eax

    28. loc_40130E:                                ; CODE XREF: sub_4012C0+43j
    29.                 mov        ecx, [ebp+szname]
    30.                 push        ecx                ; char *
    31.                 call        _strlen
    32.                 add        esp, 4
    33.                 cmp        [ebp+var_24], eax
    34.                 jnb        short loc_401339
    35.                 mov        edx, [ebp+szname]
    36.                 add        edx, [ebp+var_24]
    37.                 xor        eax, eax
    38.                 mov        al, [edx]
    39.                 mov        ecx, [ebp+sum]
    40.                 add        ecx, eax
    41.                 mov        [ebp+sum], ecx
    42.                 jmp        short loc_401305
    43. ; ---------------------------------------------------------------------------

    44. loc_401339:                                ; CODE XREF: sub_4012C0+5Dj
    45.                 mov        [ebp+var_24], 0
    46.                 jmp        short loc_40134B
    47. ; ---------------------------------------------------------------------------

    48. loc_401342:                                ; CODE XREF: sub_4012C0+F8j
    49.                 mov        edx, [ebp+var_24]
    50.                 add        edx, 1
    51.                 mov        [ebp+var_24], edx

    52. loc_40134B:                                ; CODE XREF: sub_4012C0+80j
    53.                 mov        eax, [ebp+szname]
    54.                 push        eax                ; char *
    55.                 call        _strlen
    56.                 add        esp, 4
    57.                 cmp        [ebp+var_24], eax
    58.                 jnb        short loc_4013BA
    59.                 mov        ecx, [ebp+n]
    60.                 shr        ecx, 8
    61.                 shl        ecx, 18h
    62.                 shr        ecx, 18h
    63.                 mov        edx, [ebp+szname]
    64.                 add        edx, [ebp+var_24]
    65.                 mov        al, [edx]
    66.                 xor        al, cl
    67.                 mov        ecx, [ebp+szname]
    68.                 add        ecx, [ebp+var_24]
    69.                 mov        [ecx], al
    70.                 mov        edx, [ebp+szname]
    71.                 add        edx, [ebp+var_24]
    72.                 xor        eax, eax
    73.                 mov        al, [edx]
    74.                 mov        ecx, [ebp+n]
    75.                 add        ecx, eax
    76.                 mov        [ebp+n], ecx
    77.                 mov        edx, [ebp+n]
    78.                 imul        edx, 6BADh
    79.                 mov        [ebp+n], edx
    80.                 mov        eax, [ebp+n]
    81.                 add        eax, 0C0DEh
    82.                 mov        [ebp+n], eax
    83.                 jmp        short loc_401342
    84. ; ---------------------------------------------------------------------------

    85. loc_4013BA:                                ; CODE XREF: sub_4012C0+9Aj
    86.                 mov        [ebp+var_24], 0
    87.                 jmp        short loc_4013CC
    88. ; ---------------------------------------------------------------------------

    89. loc_4013C3:                                ; CODE XREF: sub_4012C0+135j
    90.                 mov        ecx, [ebp+var_24]
    91.                 add        ecx, 1
    92.                 mov        [ebp+var_24], ecx

    93. loc_4013CC:                                ; CODE XREF: sub_4012C0+101j
    94.                 mov        edx, [ebp+szname]
    95.                 push        edx                ; char *
    96.                 call        _strlen
    97.                 add        esp, 4
    98.                 cmp        [ebp+var_24], eax
    99.                 jnb        short loc_4013F7
    100.                 mov        eax, [ebp+szname]
    101.                 add        eax, [ebp+var_24]
    102.                 xor        ecx, ecx
    103.                 mov        cl, [eax]
    104.                 mov        edx, [ebp+sum_1]
    105.                 add        edx, ecx
    106.                 mov        [ebp+sum_1], edx
    107.                 jmp        short loc_4013C3
    108. ; ---------------------------------------------------------------------------

    109. loc_4013F7:                                ; CODE XREF: sub_4012C0+11Bj
    110.                 mov        eax, [ebp+sum_1]
    111.                 imul        eax, 3E8h
    112.                 add        eax, [ebp+sum]
    113.                 pop        edi
    114.                 pop        esi
    115.                 pop        ebx
    116.                 add        esp, 138h
    117.                 cmp        ebp, esp
    118.                 ;call        __chkesp
    119.                 mov        esp, ebp
    120.                 pop        ebp
    121.                 retn
    122. sub_4012C0        endp
    复制代码
            坑就一个,也可以动态调试,IDA的F5更直观。只是看到反调试判断,想都没选择了一个算法模块。但忘了一件事,od可以过掉这个反调试。所以我选择分析模块是错的。上面是陷井中的算法注册机了,真的算法没有分析到{:soso_e153:}
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表