LYQingYe 发表于 2015-11-22 10:49

EditPlus - 算法分析 + 注册机

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



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

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

//全局计算算法CALL

004D54D0      8B4C24 08         mov ecx,dword ptr ss:
004D54D4      8B4424 0C         mov eax,dword ptr ss:
004D54D8      8D1401            lea edx,dword ptr ds:
004D54DB      3BCA                cmp ecx,edx
004D54DD      73 25               jnb short editplus.004D5504
004D54DF      8B4424 04         mov eax,dword ptr ss:
004D54E3      56                  push esi
004D54E4      57                  push edi
004D54E5      0FB639            movzx edi,byte ptr ds:
004D54E8      0FB6F0            movzx esi,al
004D54EB      66:C1E8 08          shr ax,0x8
004D54EF      33F7                xor esi,edi
<font color="#ff0000">004D54F1      66:330475 28075F00xor ax,word ptr ds:</font>
004D54F9      41                  inc ecx
004D54FA      0FB7C0            movzx eax,ax
004D54FD      3BCA                cmp ecx,edx
004D54FF    ^ 72 E4               jb short editplus.004D54E5
004D5501      5F                  pop edi
004D5502      5E                  pop esi
004D5503      C3                  retn
004D5504      66:8B4424 04      mov ax,word ptr ss:
004D5509      C3                  retn


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


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





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





Zixue 发表于 2015-11-22 10:54

我先拿了沙发再仔细看帖{:5_188:}

LYQingYe 发表于 2015-11-22 10:55

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

巡查辛苦了

【By】岁月无痕 发表于 2015-11-22 10:59

板凳都遭抢了。

Zixue 发表于 2015-11-22 10:59

LYQingYe 发表于 2015-11-22 10:55
巡查辛苦了

{:5_188:} 分内事,这里最后的BUG判断注册码错误其实是因为还有一步,两层算法算出注册码后,会加密注入码,然后会取加密后的一定长度内容,以这个长度的内容来判断是否真码

LYQingYe 发表于 2015-11-22 11:04

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

并没有,以我见解,在V4.0以后的版本就没有注册机这一算法,那个BUG的解决办法就是,分析他的加密过程,然后把我们计算好的注册码 加密,打入注册表。这样才不会错 。

Zixue 发表于 2015-11-22 11:09

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

{:5_184:}我以前搞过这个程序,和你这个过程差不多,区别就是我楼上说的那样,还有就是这个玩意貌似时不时的偶尔又是未注册,不知道是不是电脑问题= =

LYQingYe 发表于 2015-11-22 11:21

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

只要一次正确就不会错了

阿超 发表于 2015-11-22 11:26

其实算法很简单。。。但是为什么看你的帖子突然感觉好复杂{:5_184:}

LYQingYe 发表于 2015-11-22 11:35

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

具体看版本,我这是最新
页: [1] 2 3 4
查看完整版本: EditPlus - 算法分析 + 注册机