吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 7472|回复: 37

[原创逆向图文] EditPlus - 算法分析 + 注册机

  [复制链接]
LYQingYe 发表于 2015-11-22 10:49 | 显示全部楼层 |阅读模式

[软件名称]  :  EditPlus - 用过的都知道,有点强大的文本编辑器。不多介绍
[编译类型]  :  VC++ 9.0
[是否有壳]  :  无壳
[注册类型]  :  用户输入用户名和注册码,按照计算后的值进行规则匹配,追不出真码.
[作者信息]  :  LYQingYe
[附加信息]  :  这也许是我最后一篇帖子吧,来这论坛也有一段时间了。学到了许多,再次先感谢以前给予我帮助的人。祝吾爱汇编论坛越来越强大。



//算法CALL 可以从按钮事件找到 , 在此不做演示  算法CALL地址 - Algorithm_0x004D6CB0
//本次算法用到的 用户名 "XUEPOJIE"   假码 "0123456789"  到后面会有改变
  1. 004D6CB0      83EC 08             sub esp,0x8
  2. 004D6CB3      56                  push esi
  3. 004D6CB4      8D4424 04           lea eax,dword ptr ss:[esp+0x4]
  4. 004D6CB8      50                  push eax
  5. 004D6CB9      8BF1                mov esi,ecx
  6. 004D6CBB      C74424 08 00000000  mov dword ptr ss:[esp+0x8],0x0
  7. 004D6CC3      E8 58FDFFFF         call editplus.004D6A20                ; 第一层算法
  8. 004D6CC8      85C0                test eax,eax
  9. 004D6CCA      75 3D               jnz short editplus.004D6D09
  10. 004D6CCC      8D4C24 08           lea ecx,dword ptr ss:[esp+0x8]
  11. 004D6CD0      51                  push ecx
  12. 004D6CD1      8BCE                mov ecx,esi
  13. 004D6CD3      894424 0C           mov dword ptr ss:[esp+0xC],eax
  14. 004D6CD7      E8 84FEFFFF         call editplus.004D6B60                ; 第二层算法
  15. 004D6CDC      8B4C24 08           mov ecx,dword ptr ss:[esp+0x8]
  16. 004D6CE0      8B5424 04           mov edx,dword ptr ss:[esp+0x4]
  17. 004D6CE4      85C9                test ecx,ecx
  18. 004D6CE6      76 0A               jbe short editplus.004D6CF2
  19. 004D6CE8      81FA 7F4E0000       cmp edx,0x4E7F
  20. 004D6CEE      74 02               je short editplus.004D6CF2
  21. 004D6CF0      8BD1                mov edx,ecx
  22. 004D6CF2      85C0                test eax,eax
  23. 004D6CF4      75 13               jnz short editplus.004D6D09
  24. 004D6CF6      85D2                test edx,edx
  25. 004D6CF8      74 0A               je short editplus.004D6D04
  26. 004D6CFA      6A FF               push -0x1
  27. 004D6CFC      6A 10               push 0x10
  28. 004D6CFE      52                  push edx
  29. 004D6CFF      E8 B33D0400         call editplus.0051AAB7                ; 错误提示
  30. 004D6D04      5E                  pop esi
  31. 004D6D05      83C4 08             add esp,0x8
  32. 004D6D08      C3                  retn
复制代码
//先进入第一层算法
  1. 004D6A20      81EC 5C040000       sub esp,0x45C
  2. 004D6A26      A1 7C9D5C00         mov eax,dword ptr ds:[0x5C9D7C]
  3. 004D6A2B      33C4                xor eax,esp
  4. 004D6A2D      898424 58040000     mov dword ptr ss:[esp+0x458],eax
  5. 004D6A34      8B8424 60040000     mov eax,dword ptr ss:[esp+0x460]
  6. 004D6A3B      53                  push ebx
  7. 004D6A3C      55                  push ebp
  8. 004D6A3D      8BE9                mov ebp,ecx
  9. 004D6A3F      8D4C24 08           lea ecx,dword ptr ss:[esp+0x8]
  10. 004D6A43      51                  push ecx
  11. 004D6A44      68 F4010000         push 0x1F4
  12. 004D6A49      8D9424 80000000     lea edx,dword ptr ss:[esp+0x80]
  13. 004D6A50      894424 14           mov dword ptr ss:[esp+0x14],eax
  14. 004D6A54      52                  push edx
  15. 004D6A55      8D85 C8000000       lea eax,dword ptr ss:[ebp+0xC8]
  16. 004D6A5B      50                  push eax
  17. 004D6A5C      E8 4FFDFFFF         call editplus.004D67B0                ; GetText 取出用户名
  18. 004D6A61      83C4 10             add esp,0x10                          ; EAX -> 用户名 XUEPOJIE
  19. 004D6A64      837C24 08 00        cmp dword ptr ss:[esp+0x8],0x0        ; 判断用户名长度是否为 0
  20. 004D6A69      8BD8                mov ebx,eax
  21. 004D6A6B      895C24 10           mov dword ptr ss:[esp+0x10],ebx       ; 用户名压栈
  22. 004D6A6F      75 07               jnz short editplus.004D6A78           ; 用户名长度为 0则走向死亡
  23. 004D6A71      33C0                xor eax,eax
  24. 004D6A73      E9 CF000000         jmp editplus.004D6B47
  25. 004D6A78      57                  push edi
  26. 004D6A79      8D4C24 0C           lea ecx,dword ptr ss:[esp+0xC]
  27. 004D6A7D      51                  push ecx
  28. 004D6A7E      6A 32               push 0x32
  29. 004D6A80      8D5424 20           lea edx,dword ptr ss:[esp+0x20]
  30. 004D6A84      52                  push edx
  31. 004D6A85      8D45 74             lea eax,dword ptr ss:[ebp+0x74]
  32. 004D6A88      50                  push eax
  33. 004D6A89      E8 22FDFFFF         call editplus.004D67B0                ; GetText 取出假码
  34. 004D6A8E      8BF8                mov edi,eax                           ; edi -> 假码 0123456789
  35. 004D6A90      8B4424 1C           mov eax,dword ptr ss:[esp+0x1C]       ; eax = 假码长度
  36. 004D6A94      83C4 10             add esp,0x10
  37. 004D6A97      85C0                test eax,eax                          ; 判断假码长度是否为0
  38. 004D6A99      74 7E               je short editplus.004D6B19
  39. 004D6A9B      56                  push esi
  40. 004D6A9C      33F6                xor esi,esi
  41. 004D6A9E      85C0                test eax,eax
  42. 004D6AA0      7E 44               jle short editplus.004D6AE6
  43. 004D6AA2      0FB71C77            movzx ebx,word ptr ds:[edi+esi*2]
  44. 004D6AA6      B9 00010000         mov ecx,0x100
  45. 004D6AAB      66:3BD9             cmp bx,cx
  46. 004D6AAE      73 0D               jnb short editplus.004D6ABD
  47. 004D6AB0      0FB6D3              movzx edx,bl
  48. 004D6AB3      0FB70455 30F75E00   movzx eax,word ptr ds:[edx*2+0x5EF730>
  49. 004D6ABB      EB 1A               jmp short editplus.004D6AD7
  50. 004D6ABD      0FB7C3              movzx eax,bx
  51. 004D6AC0      50                  push eax
  52. 004D6AC1      FF15 5CD75700       call dword ptr ds:[<&USER32.CharUpper>; user32.CharUpperW
  53. 004D6AC7      0FB7C0              movzx eax,ax
  54. 004D6ACA      66:85C0             test ax,ax
  55. 004D6ACD      75 05               jnz short editplus.004D6AD4
  56. 004D6ACF      0FB7C3              movzx eax,bx
  57. 004D6AD2      EB 03               jmp short editplus.004D6AD7
  58. 004D6AD4      0FB7C0              movzx eax,ax
  59. 004D6AD7      66:890477           mov word ptr ds:[edi+esi*2],ax
  60. 004D6ADB      46                  inc esi
  61. 004D6ADC      3B7424 10           cmp esi,dword ptr ss:[esp+0x10]
  62. 004D6AE0    ^ 7C C0               jl short editplus.004D6AA2
  63. 004D6AE2      8B5C24 18           mov ebx,dword ptr ss:[esp+0x18]
  64. 004D6AE6      57                  push edi                              ; edi -> 假码
  65. 004D6AE7      53                  push ebx                              ; ebx ->用户名
  66. 004D6AE8      E8 93F6FFFF         call editplus.004D6180                ; 第一层算法-push 用户名 和 假码
  67. 004D6AED      83C4 08             add esp,0x8
  68. 004D6AF0      5E                  pop esi
  69. 004D6AF1      85C0                test eax,eax                          ; 下面没什么重要的,直接返回
  70. 004D6AF3      75 0C               jnz short editplus.004D6B01
复制代码
//// Sub_004D6180
  1. 004D6180      81EC D00B0000       sub esp,0xBD0
  2. 004D6186      A1 7C9D5C00         mov eax,dword ptr ds:[0x5C9D7C]
  3. 004D618B      33C4                xor eax,esp
  4. 004D618D      898424 CC0B0000     mov dword ptr ss:[esp+0xBCC],eax
  5. 004D6194      53                  push ebx
  6. 004D6195      55                  push ebp
  7. 004D6196      8BAC24 DC0B0000     mov ebp,dword ptr ss:[esp+0xBDC]
  8. 004D619D      56                  push esi
  9. 004D619E      8BB424 E40B0000     mov esi,dword ptr ss:[esp+0xBE4]
  10. 004D61A5      8BC5                mov eax,ebp
  11. 004D61A7      57                  push edi
  12. 004D61A8      8D50 02             lea edx,dword ptr ds:[eax+0x2]
  13. 004D61AB      EB 03               jmp short editplus.004D61B0
  14. 004D61AD      8D49 00             lea ecx,dword ptr ds:[ecx]
  15. 004D61B0      66:8B08             mov cx,word ptr ds:[eax]
  16. 004D61B3      83C0 02             add eax,0x2
  17. 004D61B6      66:85C9             test cx,cx
  18. 004D61B9    ^ 75 F5               jnz short editplus.004D61B0           ; 简单的计算用户名的长度
  19. 004D61BB      2BC2                sub eax,edx
  20. 004D61BD      D1F8                sar eax,1
  21. 004D61BF      8BD8                mov ebx,eax
  22. 004D61C1      8BC6                mov eax,esi
  23. 004D61C3      8D50 02             lea edx,dword ptr ds:[eax+0x2]
  24. 004D61C6      66:8B08             mov cx,word ptr ds:[eax]
  25. 004D61C9      83C0 02             add eax,0x2
  26. 004D61CC      66:85C9             test cx,cx
  27. 004D61CF    ^ 75 F5               jnz short editplus.004D61C6           ; 简单计算假码的长度
  28. 004D61D1      2BC2                sub eax,edx
  29. 004D61D3      D1F8                sar eax,1
  30. 004D61D5      8BF8                mov edi,eax
  31. 004D61D7      E8 94F2FFFF         call editplus.004D5470
  32. 004D61DC      68 B80B0000         push 0xBB8
  33. 004D61E1      8D4424 28           lea eax,dword ptr ss:[esp+0x28]
  34. 004D61E5      50                  push eax
  35. 004D61E6      53                  push ebx
  36. 004D61E7      55                  push ebp                              ; ebp -> 用户名
  37. 004D61E8      E8 23F3FFFF         call editplus.004D5510                ; 将字符串转换为十六进制文本
  38. 004D61ED      50                  push eax
  39. 004D61EE      8D4C24 38           lea ecx,dword ptr ss:[esp+0x38]
  40. 004D61F2      51                  push ecx                              ; ecx ->用户名转化成的十六进制文本
  41. 004D61F3      6A 00               push 0x0
  42. 004D61F5      E8 D6F2FFFF         call editplus.004D54D0                ; 全局通用算法
  43. 004D61FA      0FB7D0              movzx edx,ax                          ; eax = 计算后的值  是一个整数值
  44. 004D61FD      52                  push edx
  45. 004D61FE      8D4424 30           lea eax,dword ptr ss:[esp+0x30]
  46. 004D6202      68 80FC5800         push editplus.0058FC80                ; UNICODE "%04X"
  47. 004D6207      50                  push eax
  48. 004D6208      E8 D33AF3FF         call editplus.00409CE0                ; 将计算后的值 转换为 ASCII 码
  49. 004D620D      66:8B4E 04          mov cx,word ptr ds:[esi+0x4]          ; 假码的第三位 给CX
  50. 004D6211      8D46 04             lea eax,dword ptr ds:[esi+0x4]
  51. 004D6214      83C4 28             add esp,0x28
  52. 004D6217      66:3B4C24 10        cmp cx,word ptr ss:[esp+0x10]         ; 假码的第三位和计算值字符串的第一位比较
  53. 004D621C      74 04               je short editplus.004D6222            ; 一定要相等,否则后面的算法没法研究
  54. 004D621E      33C0                xor eax,eax
  55. 004D6220      EB 5A               jmp short editplus.004D627C
  56. 004D6222      66:8B56 06          mov dx,word ptr ds:[esi+0x6]          ; 假码的第四位给DX
  57. 004D6226      66:3B5424 12        cmp dx,word ptr ss:[esp+0x12]         ; 计算值字符串的第二位 和 假码的第三位比较
  58. 004D622B    ^ 75 F1               jnz short editplus.004D621E           ; 同样的要相等
  59. 004D622D      68 B80B0000         push 0xBB8
  60. 004D6232      8D4C24 28           lea ecx,dword ptr ss:[esp+0x28]
  61. 004D6236      51                  push ecx
  62. 004D6237      83C7 FE             add edi,-0x2
  63. 004D623A      57                  push edi
  64. 004D623B      50                  push eax                              ; 将假码指针移动两位  指向 "23456789"也就是取后几位
  65. 004D623C      E8 CFF2FFFF         call editplus.004D5510                ; 将假码后几位 转换为 十六进制文本
  66. 004D6241      50                  push eax
  67. 004D6242      8D5424 38           lea edx,dword ptr ss:[esp+0x38]
  68. 004D6246      52                  push edx
  69. 004D6247      6A 00               push 0x0
  70. 004D6249      E8 82F2FFFF         call editplus.004D54D0                ; 假码后几位 十六进制文本进行计算 跟上面一样
  71. 004D624E      0FB7C0              movzx eax,ax
  72. 004D6251      50                  push eax
  73. 004D6252      8D4C24 30           lea ecx,dword ptr ss:[esp+0x30]
  74. 004D6256      68 80FC5800         push editplus.0058FC80                ; UNICODE "%04X"
  75. 004D625B      51                  push ecx
  76. 004D625C      E8 7F3AF3FF         call editplus.00409CE0                ; 将计算后的值 转换为字符串
  77. 004D6261      66:8B16             mov dx,word ptr ds:[esi]
  78. 004D6264      83C4 28             add esp,0x28
  79. 004D6267      33C0                xor eax,eax
  80. 004D6269      66:3B5424 10        cmp dx,word ptr ss:[esp+0x10]         ; 假码第一位 和 计算字符第一位比较
  81. 004D626E      75 0C               jnz short editplus.004D627C
  82. 004D6270      66:8B4E 02          mov cx,word ptr ds:[esi+0x2]
  83. 004D6274      66:3B4C24 12        cmp cx,word ptr ss:[esp+0x12]         ; 假码的第二位 和 计算字符第二位比较
  84. 004D6279      0F94C0              sete al
  85. 004D627C      8B8C24 DC0B0000     mov ecx,dword ptr ss:[esp+0xBDC]
  86. 004D6283      5F                  pop edi
  87. 004D6284      5E                  pop esi
  88. 004D6285      5D                  pop ebp
  89. 004D6286      5B                  pop ebx
  90. 004D6287      33CC                xor ecx,esp
  91. 004D6289      E8 487D0700         call editplus.0054DFD6
  92. 004D628E      81C4 D00B0000       add esp,0xBD0
  93. 004D6294      C3                  retn
复制代码
//第一层算法总结
将用户名 "XUEPOJIE" 转换为 十六进制文本字符串   ASCII "0058005500450050004F004A00490045"
然后利用全局的通用算法CALL  进行计算得到一个 整数值,然后将 这个整数值转换为 字符串, 我们将它命名为 str , 随即 我们将 我们输入的假码命名为 key
要求 key 的 第三位要和 str的第一位要相等 , key的 第四位要和 str的第二位要相等.
又将假码 "0123456789" 去除前两位 "123456789" 将这个字符串转换为 十六进制文本字符串  然后利用全局通用算法CALL 计算得一个值 然后将这个值转换为字符串 , 我们将它 str2
要求 key 的 第一位 要和 str2的 第一位相等 , key的 第二位要和 str2 的 第二位相等 否则是看不到往后的算法。我们继续
//进入第二层算法
  1. 004D6B60      81EC 38020000       sub esp,0x238
  2. 004D6B66      A1 7C9D5C00         mov eax,dword ptr ds:[0x5C9D7C]
  3. 004D6B6B      33C4                xor eax,esp
  4. 004D6B6D      898424 34020000     mov dword ptr ss:[esp+0x234],eax
  5. 004D6B74      8B8424 3C020000     mov eax,dword ptr ss:[esp+0x23C]
  6. 004D6B7B      53                  push ebx
  7. 004D6B7C      55                  push ebp
  8. 004D6B7D      8BE9                mov ebp,ecx
  9. 004D6B7F      8D4C24 08           lea ecx,dword ptr ss:[esp+0x8]
  10. 004D6B83      51                  push ecx
  11. 004D6B84      68 F4010000         push 0x1F4
  12. 004D6B89      8D5424 50           lea edx,dword ptr ss:[esp+0x50]
  13. 004D6B8D      894424 14           mov dword ptr ss:[esp+0x14],eax
  14. 004D6B91      52                  push edx
  15. 004D6B92      8D85 C8000000       lea eax,dword ptr ss:[ebp+0xC8]
  16. 004D6B98      50                  push eax
  17. 004D6B99      E8 52FDFFFF         call editplus.004D68F0                ; 同样的取出用户名
  18. 004D6B9E      83C4 10             add esp,0x10
  19. 004D6BA1      837C24 08 00        cmp dword ptr ss:[esp+0x8],0x0        ; 比较用户名长度
  20. 004D6BA6      8BD8                mov ebx,eax
  21. 004D6BA8      895C24 10           mov dword ptr ss:[esp+0x10],ebx       ; 用户名压入栈
  22. 004D6BAC      75 07               jnz short editplus.004D6BB5
  23. 004D6BAE      33C0                xor eax,eax
  24. 004D6BB0      E9 D6000000         jmp editplus.004D6C8B
  25. 004D6BB5      57                  push edi
  26. 004D6BB6      8D4C24 0C           lea ecx,dword ptr ss:[esp+0xC]
  27. 004D6BBA      51                  push ecx
  28. 004D6BBB      6A 32               push 0x32
  29. 004D6BBD      8D5424 20           lea edx,dword ptr ss:[esp+0x20]
  30. 004D6BC1      52                  push edx
  31. 004D6BC2      8D45 74             lea eax,dword ptr ss:[ebp+0x74]
  32. 004D6BC5      50                  push eax
  33. 004D6BC6      E8 25FDFFFF         call editplus.004D68F0                ; 取出假码
  34. 004D6BCB      8BF8                mov edi,eax
  35. 004D6BCD      8B4424 1C           mov eax,dword ptr ss:[esp+0x1C]
  36. 004D6BD1      83C4 10             add esp,0x10
  37. 004D6BD4      85C0                test eax,eax                          ; 比较长度是否为 0
  38. 004D6BD6      0F84 81000000       je editplus.004D6C5D
  39. 004D6BDC      56                  push esi
  40. 004D6BDD      33F6                xor esi,esi
  41. 004D6BDF      85C0                test eax,eax
  42. 004D6BE1      7E 47               jle short editplus.004D6C2A
  43. 004D6BE3      66:0FB60C3E         movzx cx,byte ptr ds:[esi+edi]
  44. 004D6BE8      0FB7D9              movzx ebx,cx
  45. 004D6BEB      BA 00010000         mov edx,0x100
  46. 004D6BF0      66:3BDA             cmp bx,dx
  47. 004D6BF3      73 0D               jnb short editplus.004D6C02
  48. 004D6BF5      0FB6C3              movzx eax,bl
  49. 004D6BF8      0FB70445 30F75E00   movzx eax,word ptr ds:[eax*2+0x5EF730>
  50. 004D6C00      EB 1A               jmp short editplus.004D6C1C
  51. 004D6C02      0FB7CB              movzx ecx,bx
  52. 004D6C05      51                  push ecx
  53. 004D6C06      FF15 5CD75700       call dword ptr ds:[<&USER32.CharUpper>; user32.CharUpperW
  54. 004D6C0C      0FB7C0              movzx eax,ax
  55. 004D6C0F      66:85C0             test ax,ax
  56. 004D6C12      75 05               jnz short editplus.004D6C19
  57. 004D6C14      0FB7C3              movzx eax,bx
  58. 004D6C17      EB 03               jmp short editplus.004D6C1C
  59. 004D6C19      0FB7C0              movzx eax,ax
  60. 004D6C1C      88043E              mov byte ptr ds:[esi+edi],al
  61. 004D6C1F      46                  inc esi
  62. 004D6C20      3B7424 10           cmp esi,dword ptr ss:[esp+0x10]
  63. 004D6C24    ^ 7C BD               jl short editplus.004D6BE3
  64. 004D6C26      8B5C24 18           mov ebx,dword ptr ss:[esp+0x18]
  65. 004D6C2A      57                  push edi                              ; 压入 假码
  66. 004D6C2B      53                  push ebx                              ; 压入用户名
  67. 004D6C2C      E8 6FF6FFFF         call editplus.004D62A0                ; 最后一个算法
  68. 004D6C31      83C4 08             add esp,0x8
  69. 004D6C34      5E                  pop esi
  70. 004D6C35      85C0                test eax,eax
  71. 004D6C37      75 0C               jnz short editplus.004D6C45
复制代码
//Sub_004D62A0
  1. 004D62A0      83EC 10             sub esp,0x10
  2. 004D62A3      A1 7C9D5C00         mov eax,dword ptr ds:[0x5C9D7C]
  3. 004D62A8      33C4                xor eax,esp
  4. 004D62AA      894424 0C           mov dword ptr ss:[esp+0xC],eax
  5. 004D62AE      53                  push ebx
  6. 004D62AF      55                  push ebp
  7. 004D62B0      8B6C24 1C           mov ebp,dword ptr ss:[esp+0x1C]
  8. 004D62B4      56                  push esi
  9. 004D62B5      8B7424 24           mov esi,dword ptr ss:[esp+0x24]
  10. 004D62B9      8BC5                mov eax,ebp
  11. 004D62BB      57                  push edi
  12. 004D62BC      8D50 01             lea edx,dword ptr ds:[eax+0x1]
  13. 004D62BF      90                  nop
  14. 004D62C0      8A08                mov cl,byte ptr ds:[eax]
  15. 004D62C2      40                  inc eax
  16. 004D62C3      84C9                test cl,cl
  17. 004D62C5    ^ 75 F9               jnz short editplus.004D62C0           ; 简单计算用户名长度
  18. 004D62C7      2BC2                sub eax,edx
  19. 004D62C9      8BD8                mov ebx,eax
  20. 004D62CB      8BC6                mov eax,esi
  21. 004D62CD      8D50 01             lea edx,dword ptr ds:[eax+0x1]
  22. 004D62D0      8A08                mov cl,byte ptr ds:[eax]
  23. 004D62D2      40                  inc eax
  24. 004D62D3      84C9                test cl,cl
  25. 004D62D5    ^ 75 F9               jnz short editplus.004D62D0           ; 简单计算假码长度
  26. 004D62D7      2BC2                sub eax,edx
  27. 004D62D9      8BF8                mov edi,eax
  28. 004D62DB      E8 90F1FFFF         call editplus.004D5470
  29. 004D62E0      53                  push ebx
  30. 004D62E1      55                  push ebp                              ; 压入用户名
  31. 004D62E2      6A 00               push 0x0
  32. 004D62E4      E8 E7F1FFFF         call editplus.004D54D0                ; 利用全局通用算法对用户名进行计算
  33. 004D62E9      0FB7C0              movzx eax,ax                          ; 计算值给eax
  34. 004D62EC      50                  push eax
  35. 004D62ED      8D4C24 20           lea ecx,dword ptr ss:[esp+0x20]
  36. 004D62F1      68 D8545900         push editplus.005954D8                ; ASCII "%02X"
  37. 004D62F6      51                  push ecx
  38. 004D62F7      E8 54F4FFFF         call editplus.004D5750                ; 将计算值 转换为字符串
  39. 004D62FC      0FB656 02           movzx edx,byte ptr ds:[esi+0x2]       ; 假码的第三位
  40. 004D6300      0FBE4C24 28         movsx ecx,byte ptr ss:[esp+0x28]      ; 计算值的第一位
  41. 004D6305      8D46 02             lea eax,dword ptr ds:[esi+0x2]
  42. 004D6308      83C4 18             add esp,0x18
  43. 004D630B      3BD1                cmp edx,ecx                           ; 假码的第三位 要和 计算值的第一位 相等 和 刚才第一层算法一样
  44. 004D630D      74 15               je short editplus.004D6324            ;
  45. 004D630F      5F                  pop edi
  46. 004D6310      5E                  pop esi
  47. 004D6311      5D                  pop ebp
  48. 004D6312      33C0                xor eax,eax
  49. 004D6314      5B                  pop ebx
  50. 004D6315      8B4C24 0C           mov ecx,dword ptr ss:[esp+0xC]
  51. 004D6319      33CC                xor ecx,esp
  52. 004D631B      E8 B67C0700         call editplus.0054DFD6
  53. 004D6320      83C4 10             add esp,0x10
  54. 004D6323      C3                  retn
  55. 004D6324      0FB656 03           movzx edx,byte ptr ds:[esi+0x3]       ; 假码第四位
  56. 004D6328      0FBE4C24 11         movsx ecx,byte ptr ss:[esp+0x11]      ; 计算值第二位
  57. 004D632D      3BD1                cmp edx,ecx
  58. 004D632F    ^ 75 DE               jnz short editplus.004D630F
  59. 004D6331      83C7 FE             add edi,-0x2
  60. 004D6334      57                  push edi
  61. 004D6335      50                  push eax                              ; KEYLENG - 2 PUSH
  62. 004D6336      6A 00               push 0x0                              ; 压入的也就是这个字符串"23456789"
  63. 004D6338      E8 93F1FFFF         call editplus.004D54D0                ; 将假码指针 移动0x2 将指向后的字符串计算 上面这个
  64. 004D633D      0FB7D0              movzx edx,ax
  65. 004D6340      52                  push edx
  66. 004D6341      8D4424 20           lea eax,dword ptr ss:[esp+0x20]
  67. 004D6345      68 D8545900         push editplus.005954D8                ; ASCII "%02X"
  68. 004D634A      50                  push eax
  69. 004D634B      E8 00F4FFFF         call editplus.004D5750                ; 计算值转换为字符串
  70. 004D6350      0FB60E              movzx ecx,byte ptr ds:[esi]
  71. 004D6353      0FBE5424 28         movsx edx,byte ptr ss:[esp+0x28]
  72. 004D6358      83C4 18             add esp,0x18
  73. 004D635B      3BCA                cmp ecx,edx                           ; 假码的第一位 和 计算值 第一位 要相等
  74. 004D635D    ^ 75 B0               jnz short editplus.004D630F
  75. 004D635F      0FB646 01           movzx eax,byte ptr ds:[esi+0x1]
  76. 004D6363      0FBE4C24 11         movsx ecx,byte ptr ss:[esp+0x11]
  77. 004D6368      33D2                xor edx,edx
  78. 004D636A      3BC1                cmp eax,ecx                           ; 假码第二位 和 计算值 第二位 要相等
  79. 004D636C      8B4C24 1C           mov ecx,dword ptr ss:[esp+0x1C]
  80. 004D6370      5F                  pop edi
  81. 004D6371      0F94C2              sete dl
  82. 004D6374      5E                  pop esi
  83. 004D6375      5D                  pop ebp
  84. 004D6376      5B                  pop ebx
  85. 004D6377      33CC                xor ecx,esp
  86. 004D6379      8BC2                mov eax,edx
  87. 004D637B      E8 567C0700         call editplus.0054DFD6
  88. 004D6380      83C4 10             add esp,0x10
  89. 004D6383      C3                  retn
复制代码
//细心看,可以看出第二层算法 与 第一层算法相比 有很多类似,思路大多相同,只是数据处理有些不一样.看下面分解
直接将用户名 "XUEPOJIE" 进行计算,然后转换为字符串 我们将它命名为 str3  
要求 key第三位 要和 str3 相等, key第四位要和 str3 第二位相等
然后 去掉假码前两位 "23456789" 直接进行计算 然后转换为 字符串 我们将它命名为 str4
要求 key 第一位要和 str4第一位相等 , key 第二位 要和 str4 第二位相等

//深思
用户名直接影响 key去除前两位 后的字符串 也就是  "23456789" 也就是第三第四位 ,  然而 这个 字符串 "23456789", 又影响着 前两位 .
所以 我们先 计算用户名 然后 更改 key的 第三第四位 然后 在计算 最后更改 第一第二位 得到一个 完整的 key 算法,请见注册机。

//全局计算算法CALL

  1. 004D54D0      8B4C24 08           mov ecx,dword ptr ss:[esp+0x8]
  2. 004D54D4      8B4424 0C           mov eax,dword ptr ss:[esp+0xC]
  3. 004D54D8      8D1401              lea edx,dword ptr ds:[ecx+eax]
  4. 004D54DB      3BCA                cmp ecx,edx
  5. 004D54DD      73 25               jnb short editplus.004D5504
  6. 004D54DF      8B4424 04           mov eax,dword ptr ss:[esp+0x4]
  7. 004D54E3      56                  push esi
  8. 004D54E4      57                  push edi
  9. 004D54E5      0FB639              movzx edi,byte ptr ds:[ecx]
  10. 004D54E8      0FB6F0              movzx esi,al
  11. 004D54EB      66:C1E8 08          shr ax,0x8
  12. 004D54EF      33F7                xor esi,edi
  13. <font color="#ff0000">004D54F1      66:330475 28075F00  xor ax,word ptr ds:[esi*2+0x5F0728]</font>
  14. 004D54F9      41                  inc ecx
  15. 004D54FA      0FB7C0              movzx eax,ax
  16. 004D54FD      3BCA                cmp ecx,edx
  17. 004D54FF    ^ 72 E4               jb short editplus.004D54E5
  18. 004D5501      5F                  pop edi
  19. 004D5502      5E                  pop esi
  20. 004D5503      C3                  retn
  21. 004D5504      66:8B4424 04        mov ax,word ptr ss:[esp+0x4]
  22. 004D5509      C3                  retn
复制代码


//这个算法CALL没有什么实际意义 , 所以再次不做分析,不过有点值得注意,代码标红的 那句 ,里面引用到 一个 静态的 数组  在这个地址 了 0x5F0728  具体内容请看注册机


//最后注明
注册机编译环境 VS2015
//这是效果图


QQ截图20151122104116.png


////这程序有BUG,更可能是暗桩
用户名 XUEPOJIE  注册码 1967456789  这个是注册机算出来的  因为他是重启验证 , 所以 他的注册码 放在文件 和 注册表 是加密后的 ,在启动的时候 发现 他解密后的注册码 和 我们输入的有区别。
导致注册失败,这个BUG 时不时会发生,我怀疑是暗装,再次不做讨论。下面给出注册机下载


Project1.rar (887.48 KB, 下载次数: 24)


评分

参与人数 51威望 +1 HB +105 THX +31 收起 理由
爱编 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
xiaoxixpj + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
longge188 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
终极帅哥 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
sjtkxy + 1 + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
24567 + 2
张三丰吃得香 + 1
一路走来不容易 + 1
消逝的过去 + 2
l278785481 + 1
谷歌 + 1
hnymsh + 1
tko2002 + 1
zwj00544 + 2 + 1
风腾 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
曦照 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
alexxy + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
hotD + 2 + 1
hetao8003200 + 1
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
mengzhisuoliu1 + 1
mengzhisuoliu + 1
zwc123xyz + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
lies + 1
tianpei + 1 [快捷评语] - 分享精神,是最值得尊敬的!
海天一色001 + 1 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
zgd741 + 1 [快捷评语] - 2017,让我们17学破解!
千里冰封 + 1 评分=感恩!简单却充满爱!感谢您的作品!
可水天下 + 1 分享精神,是最值得尊敬的!
wxbwxb + 1 分享精神,是最值得尊敬的!
709432292 + 1 + 1 祝学破解论坛全体成员2016年开心每一天!
龙卷风 + 2 + 1 祝学破解论坛全体成员2016年开心每一天!
水晶 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
小范 + 2 + 1 悬赏杀手主题,额外增加10HB,感谢热心解答!
Shark恒 + 1 + 10 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
虚竹 + 10 + 1 已帮楼主申请精华
我爱王成鑫 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
无情 + 5 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
Aniz + 5 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
逍遥枷锁 + 4 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Mrsin + 10 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
小猴 + 1 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
Heaven丶衫 + 3 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
niutou20 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
有何不可 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Bu弃 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
阿超 + 5 + 1 v.3汉化版+注册机 链接:http://pan.baidu.com/s/1hq
阿弥上帝 + 1 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Zixue 发表于 2015-11-22 10:54 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| LYQingYe 发表于 2015-11-22 10:55 | 显示全部楼层

Zixue 发表于 2015-11-22 10:54
我先拿了沙发再仔细看帖

巡查辛苦了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
【By】岁月无痕 发表于 2015-11-22 10:59 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Zixue 发表于 2015-11-22 10:59 | 显示全部楼层


分内事,这里最后的BUG判断注册码错误其实是因为还有一步,两层算法算出注册码后,会加密注入码,然后会取加密后的一定长度内容,以这个长度的内容来判断是否真码
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| LYQingYe 发表于 2015-11-22 11:04 | 显示全部楼层

Zixue 发表于 2015-11-22 10:59
分内事,这里最后的BUG判断注册码错误其实是因为还有一步,两层算法算出注册码后,会加密注入 ...

并没有,以我见解,在V4.0以后的版本就没有注册机这一算法,那个BUG的解决办法就是,分析他的加密过程,然后把我们计算好的注册码 加密,打入注册表。这样才不会错 。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Zixue 发表于 2015-11-22 11:09 | 显示全部楼层

LYQingYe 发表于 2015-11-22 11:04
并没有,以我见解,在V4.0以后的版本就没有注册机这一算法,那个BUG的解决办法就是,分析他的加密过程, ...

  我以前搞过这个程序,和你这个过程差不多,区别就是我楼上说的那样,还有就是这个玩意貌似时不时的偶尔又是未注册,不知道是不是电脑问题= =
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| LYQingYe 发表于 2015-11-22 11:21 | 显示全部楼层

Zixue 发表于 2015-11-22 11:09
我以前搞过这个程序,和你这个过程差不多,区别就是我楼上说的那样,还有就是这个玩意貌似时 ...

只要一次正确就不会错了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
阿超 发表于 2015-11-22 11:26 | 显示全部楼层

其实算法很简单。。。但是为什么看你的帖子突然感觉好复杂
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| LYQingYe 发表于 2015-11-22 11:35 | 显示全部楼层

阿超 发表于 2015-11-22 11:26
其实算法很简单。。。但是为什么看你的帖子突然感觉好复杂

具体看版本,我这是最新
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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