飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3774|回复: 7

[原创] PowerCmd V2.2 算法分析

[复制链接]
  • TA的每日心情
    开心
    2019-3-25 14:18
  • 签到天数: 881 天

    [LV.10]以坛为家III

    发表于 2015-5-7 00:26:38 | 显示全部楼层 |阅读模式
    【文章标题】:  PowerCmd V2.2 算法分析
    【文章作者】: geekcat
    【作者邮箱】: geek_huang@163.com
    【作者主页】:
    【软件名称】:  PowerCmd V2.2   
    【软件大小】:2.22 MB (2,335,791 字节)
    【加壳方式】: 无
    【保护方式】: 注册码
    【编写语言】: Microsoft Visual C++ v.10 - 2010 ( E8 )
    【使用工具】: OD、ExeinfoPE
    【操作平台】: XP SP3
    【下载地址】:http://www.powercmd.com/
    破解声明】:破解在于交流思路和过程,结果并不重要,请不要用于非法用途;
    【软件介绍】:PowerCmd是一款增强版本的CMD工具,具有Windows操作风格,能帮您快速组织命令提示行窗口。CMD是Windows平台下的DOS命令行环境,这个程序为CMD提供了图形化的工作界面。可以比普通CMD工具提供更多选项。
    --------------------------------------------------------------------------------------------------------------------------------
    软件算法没什么难度,就是罗嗦代码有点长;
    找算法CALL很简单用F12暂停法返回就可以找到,不是本文的重点直接给算法CALL地址:00428E41  |.  E8 0AFFFDFF   call PowerCmd.00408D50

    分析时所用假码:12345-7890a-dfghj-lqwer

    算法代码:
    00408D50  /push ebp
    00408D51  |.  8BEC          mov ebp,esp
    00408D53  |.  6A FF         push -0x1
    00408D55  |.  68 3BBE5E00   push PowerCmd.005EBE3B
    00408D5A  |.  64:A1 0000000>mov eax,dword ptr fs:[0]
    00408D60  |.  50            push eax
    00408D61  |.  81EC A0000000 sub esp,0xA0
    00408D67  |.  A1 E4906900   mov eax,dword ptr ds:[0x6990E4]
    00408D6C  |.  33C5          xor eax,ebp
    00408D6E  |.  8945 F0       mov dword ptr ss:[ebp-0x10],eax
    00408D71  |.  53            push ebx
    00408D72  |.  56            push esi
    00408D73  |.  57            push edi
    00408D74  |.  50            push eax
    00408D75  |.  8D45 F4       lea eax,dword ptr ss:[ebp-0xC]
    00408D78  |.  64:A3 0000000>mov dword ptr fs:[0],eax
    00408D7E  |.  8BF1          mov esi,ecx
    00408D80  |.  837E 10 17    cmp dword ptr ds:[esi+0x10],0x17         ;  注册码的长度要求0x17=23位
    00408D84  |.  C685 63FFFFFF>mov byte ptr ss:[ebp-0x9D],0x0
    00408D8B  |.  0F85 20050000 jnz PowerCmd.004092B1
    00408D91  |.  6A 00         push 0x0
    00408D93  |.  6A 2D         push 0x2D                          
    00408D95  |.  E8 863E0400   call PowerCmd.0044CC20                   ;  注册码以“-”来分段,并计算注册码第一段的长度
    00408D9A  |.  6A 01         push 0x1
    00408D9C  |.  6A 2D         push 0x2D                                               ;  0x2D就是“-”符
    00408D9E  |.  8BCE          mov ecx,esi                                              ;  "12345-7890a-dfghj-lqwer"
    00408DA0  |.  8BF8          mov edi,eax                                              ;  EDI为注册码第一段长度
    00408DA2  |.  E8 793E0400   call PowerCmd.0044CC20                   ;  注册码后三段及“-”字符总长度
    00408DA7  |.  8BD8          mov ebx,eax
    00408DA9  |.  8D47 01       lea eax,dword ptr ds:[edi+0x1]
    00408DAC  |.  3BD8          cmp ebx,eax                                            ;  注册码的第一段位数最长要小于注册码总位数一半,即不能超过10位
    00408DAE  |.  0F8E FD040000 jle PowerCmd.004092B1
    00408DB4  |.  85FF          test edi,edi                                                ;  注册码第一段长度不能为零,即注册码不能以“-”开头
    00408DB6  |.  0F8E F5040000 jle PowerCmd.004092B1
    00408DBC  |.  8BCB          mov ecx,ebx                                           ;  "12345-7890a-dfghj-lqwer"
    00408DBE  |.  2BCF          sub ecx,edi
    00408DC0  |.  49            dec ecx
    00408DC1  |.  51            push ecx
    00408DC2  |.  50            push eax
    00408DC3  |.  8D95 64FFFFFF lea edx,dword ptr ss:[ebp-0x9C]
    00408DC9  |.  52            push edx
    00408DCA  |.  8BCE          mov ecx,esi
    00408DCC  |.  E8 0F4C0400   call PowerCmd.0044D9E0
    00408DD1  |.  6A 00         push 0x0
    00408DD3  |.  6A 2D         push 0x2D                                
    00408DD5  |.  8D8D 64FFFFFF lea ecx,dword ptr ss:[ebp-0x9C]          ;  从以下分析注册码每一段为5位共4段,各段间以“-”链接
    00408DDB  |.  C745 FC 00000>mov dword ptr ss:[ebp-0x4],0x0
    00408DE2  |.  E8 393E0400   call PowerCmd.0044CC20                       ;  计算注册码第二段的长度
    00408DE7  |.  8D4438 01     lea eax,dword ptr ds:[eax+edi+0x1]        ;  注册码前两段加1即上中间“-”字符入EAX
    00408DEB  |.  83FF 05       cmp edi,0x5                                                 ;  第一段注册码的长度等于5
    00408DEE  |.  0F85 A5040000 jnz PowerCmd.00409299
    00408DF4  |.  83F8 0B       cmp eax,0xB                                               ;  注册码前两段加1即上中间“-”字符等于0xB即11位,得第2段注册码为5位
    00408DF7  |.  0F85 9C040000 jnz PowerCmd.00409299
    00408DFD  |.  83FB 11       cmp ebx,0x11                                           ;  注册码除最后一段外的总长度要等于0x11即17位,最后一段为5位
    00408E00  |.  0F85 93040000 jnz PowerCmd.00409299
    00408E06  |.  57            push edi
    00408E07  |.  6A 00         push 0x0
    00408E09  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00408E0C  |.  50            push eax
    00408E0D  |.  8BCE          mov ecx,esi                                               ;  "7890a-dfghj"
    00408E0F  |.  E8 CC4B0400   call PowerCmd.0044D9E0                   ;  EAX中出现注册码的第一段“12345”
    00408E14  |.  57            push edi
    00408E15  |.  6A 06         push 0x6
    00408E17  |.  8D4D 80       lea ecx,dword ptr ss:[ebp-0x80]
    00408E1A  |.  51            push ecx
    00408E1B  |.  8BCE          mov ecx,esi
    00408E1D  |.  C645 FC 01    mov byte ptr ss:[ebp-0x4],0x1
    00408E21  |.  E8 BA4B0400   call PowerCmd.0044D9E0
    00408E26  |.  8D53 F4       lea edx,dword ptr ds:[ebx-0xC]           ;  EAX中出现"7890a"
    00408E29  |.  52            push edx
    00408E2A  |.  6A 0C         push 0xC
    00408E2C  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]          ;  (UNICODE "ekCat") 注册名的后5位
    00408E2F  |.  50            push eax
    00408E30  |.  8BCE          mov ecx,esi
    00408E32  |.  C645 FC 02    mov byte ptr ss:[ebp-0x4],0x2
    00408E36  |.  E8 A54B0400   call PowerCmd.0044D9E0
    00408E3B  |.  C645 FC 03    mov byte ptr ss:[ebp-0x4],0x3            ;  "dfghj"
    00408E3F  |.  8B46 10       mov eax,dword ptr ds:[esi+0x10]
    00408E42  |.  2BC3          sub eax,ebx
    00408E44  |.  48            dec eax
    00408E45  |.  50            push eax
    00408E46  |.  8D4D B8       lea ecx,dword ptr ss:[ebp-0x48]          ;  (UNICODE "ekCat")
    00408E49  |.  51            push ecx
    00408E4A  |.  8BCE          mov ecx,esi
    00408E4C  |.  E8 9F4C0400   call PowerCmd.0044DAF0
    00408E51  |.  C645 FC 04    mov byte ptr ss:[ebp-0x4],0x4            ;  EAX中出现注册最一段"lqwer"
    00408E55  |.  397D E4       cmp dword ptr ss:[ebp-0x1C],edi
    00408E58  |.  0F85 1B040000 jnz PowerCmd.00409279
    00408E5E  |.  397D 90       cmp dword ptr ss:[ebp-0x70],edi
    00408E61  |.  0F85 12040000 jnz PowerCmd.00409279
    00408E67  |.  397D AC       cmp dword ptr ss:[ebp-0x54],edi
    00408E6A  |.  0F85 09040000 jnz PowerCmd.00409279
    00408E70  |.  397D C8       cmp dword ptr ss:[ebp-0x38],edi
    00408E73  |.  0F85 00040000 jnz PowerCmd.00409279
    00408E79  |.  8D4D D4       lea ecx,dword ptr ss:[ebp-0x2C]          ;  (UNICODE "12345")
    00408E7C  |.  E8 FF3C0400   call PowerCmd.0044CB80                   ;  小写转大写
    00408E81  |.  8D4D 80       lea ecx,dword ptr ss:[ebp-0x80]          ;  (UNICODE "7890a")
    00408E84  |.  E8 F73C0400   call PowerCmd.0044CB80
    00408E89  |.  8D4D 9C       lea ecx,dword ptr ss:[ebp-0x64]          ;  (UNICODE "dfghj")
    00408E8C  |.  E8 EF3C0400   call PowerCmd.0044CB80
    00408E91  |.  8D4D B8       lea ecx,dword ptr ss:[ebp-0x48]          ;  (UNICODE "lqwer")
    00408E94  |.  E8 E73C0400   call PowerCmd.0044CB80
    00408E99  |.  33C9          xor ecx,ecx
    00408E9B  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]          ;  (UNICODE "7890A")
    00408E9E  |.  E8 8D410000   call PowerCmd.0040D030
    00408EA3  |.  0FB730        movzx esi,word ptr ds:[eax]
    00408EA6  |.  33C9          xor ecx,ecx
    00408EA8  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]          ;  (UNICODE "12345")
    00408EAB  |.  E8 80410000   call PowerCmd.0040D030
    00408EB0  |.  0FB738        movzx edi,word ptr ds:[eax]
    00408EB3  |.  8D4B F0       lea ecx,dword ptr ds:[ebx-0x10]
    00408EB6  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    00408EB9  |.  03FE          add edi,esi                                                   ;  第一、二段的第1个字符AS值相加入EDI
    00408EBB  |.  E8 70410000   call PowerCmd.0040D030
    00408EC0  |.  0FB730        movzx esi,word ptr ds:[eax]
    00408EC3  |.  8D4B F0       lea ecx,dword ptr ds:[ebx-0x10]
    00408EC6  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00408EC9  |.  E8 62410000   call PowerCmd.0040D030
    00408ECE  |.  0FB718        movzx ebx,word ptr ds:[eax]
    00408ED1  |.  B9 02000000   mov ecx,0x2
    00408ED6  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    00408ED9  |.  03DE          add ebx,esi                                                    ;  第一、二段的第2个字符AS值相加入EBX
    00408EDB  |.  E8 50410000   call PowerCmd.0040D030
    00408EE0  |.  0FB730        movzx esi,word ptr ds:[eax]
    00408EE3  |.  B9 02000000   mov ecx,0x2
    00408EE8  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00408EEB  |.  E8 40410000   call PowerCmd.0040D030
    00408EF0  |.  0FB700        movzx eax,word ptr ds:[eax]
    00408EF3  |.  03C6          add eax,esi                                                    ;  第一、二段的第3个字符AS值相加入EAX
    00408EF5  |.  8985 54FFFFFF mov dword ptr ss:[ebp-0xAC],eax          ;  第一、二段的第3个字符AS值相保存在到EBP-AC中
    00408EFB  |.  B9 03000000   mov ecx,0x3
    00408F00  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    00408F03  |.  E8 28410000   call PowerCmd.0040D030
    00408F08  |.  0FB730        movzx esi,word ptr ds:[eax]
    00408F0B  |.  B9 03000000   mov ecx,0x3
    00408F10  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00408F13  |.  E8 18410000   call PowerCmd.0040D030
    00408F18  |.  0FB700        movzx eax,word ptr ds:[eax]
    00408F1B  |.  03C6          add eax,esi                                                      ;  第一、二段的第4个字符AS值相加入EAX
    00408F1D  |.  8985 58FFFFFF mov dword ptr ss:[ebp-0xA8],eax          ;  第一、二段的第4个字符AS值相加保存在到EBP-A8中
    00408F23  |.  B9 04000000   mov ecx,0x4
    00408F28  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    00408F2B  |.  E8 00410000   call PowerCmd.0040D030
    00408F30  |.  0FB710        movzx edx,word ptr ds:[eax]                     ;  第一段的第5位保存到EDX中
    00408F33  |.  B9 04000000   mov ecx,0x4
    00408F38  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00408F3B  |.  8995 5CFFFFFF mov dword ptr ss:[ebp-0xA4],edx          ;  第一段的第5位保存到EBP-A4中
    00408F41  |.  E8 EA400000   call PowerCmd.0040D030
    00408F46  |.  0FB730        movzx esi,word ptr ds:[eax]                          ;  第二段的第5位保存到ESI中
    00408F49  |.  03B5 5CFFFFFF add esi,dword ptr ss:[ebp-0xA4]          ;  第一、二段的第5个字符AS值相加入ESI中
    00408F4F  |.  33C9          xor ecx,ecx
    00408F51  |.  03B5 58FFFFFF add esi,dword ptr ss:[ebp-0xA8]          ;  第一、二段的第4、5位4个字符AS值相加入ESI中
    00408F57  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]               ;  第四段注册转换成大写后入EAX
    00408F5A  |.  03B5 54FFFFFF add esi,dword ptr ss:[ebp-0xAC]          ;  第一、二段的第3、4、5位6个字符AS值相加入ESI中
    00408F60  |.  03F3          add esi,ebx                                                ;  第一、二段的第2、3、4、5位8个字符AS值相加入ESI中
    00408F62  |.  03F7          add esi,edi                                                   ;  第一、二段的第1、2、3、4、5位10个字符AS值相加入ESI中
    00408F64  |.  E8 C7400000   call PowerCmd.0040D030
    00408F69  |.  0FB718        movzx ebx,word ptr ds:[eax]                 ;  第四段的第1位字符AS值入EBX
    00408F6C  |.  33C9          xor ecx,ecx                                            ;  计数器
    00408F6E  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]          ;  (UNICODE "DFGHJ")
    00408F71  |.  E8 BA400000   call PowerCmd.0040D030
    00408F76  |.  0FB738        movzx edi,word ptr ds:[eax]                  ;  第三段的第1位字符AS值
    00408F79  |.  B9 01000000   mov ecx,0x1
    00408F7E  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    00408F81  |.  03FB          add edi,ebx                                             ;  第四、三段的第1个字符AS值相加入EDI
    00408F83  |.  E8 A8400000   call PowerCmd.0040D030
    00408F88  |.  0FB700        movzx eax,word ptr ds:[eax]                  ;  第四段的第2位字符AS值入EAX
    00408F8B  |.  8985 5CFFFFFF mov dword ptr ss:[ebp-0xA4],eax          ;  第四段的第2位字符AS值入ebp-0xA4
    00408F91  |.  B9 01000000   mov ecx,0x1
    00408F96  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    00408F99  |.  E8 92400000   call PowerCmd.0040D030
    00408F9E  |.  0FB718        movzx ebx,word ptr ds:[eax]                      ;  第三段的第2位字符AS值入EBX
    00408FA1  |.  039D 5CFFFFFF add ebx,dword ptr ss:[ebp-0xA4]          ;  第四、三段的第2个字符AS值相加入EBX
    00408FA7  |.  B9 02000000   mov ecx,0x2
    00408FAC  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    00408FAF  |.  E8 7C400000   call PowerCmd.0040D030
    00408FB4  |.  0FB708        movzx ecx,word ptr ds:[eax]
    00408FB7  |.  898D 5CFFFFFF mov dword ptr ss:[ebp-0xA4],ecx
    00408FBD  |.  B9 02000000   mov ecx,0x2
    00408FC2  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    00408FC5  |.  E8 66400000   call PowerCmd.0040D030
    00408FCA  |.  0FB700        movzx eax,word ptr ds:[eax]
    00408FCD  |.  0385 5CFFFFFF add eax,dword ptr ss:[ebp-0xA4]          ;  第四、三段的第3个字符AS值相加入EAX
    00408FD3  |.  B9 03000000   mov ecx,0x3
    00408FD8  |.  8985 54FFFFFF mov dword ptr ss:[ebp-0xAC],eax          ;  第四、三段的第3个字符AS值相加入ebp-0xAC
    00408FDE  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    00408FE1  |.  E8 4A400000   call PowerCmd.0040D030
    00408FE6  |.  0FB710        movzx edx,word ptr ds:[eax]
    00408FE9  |.  B9 03000000   mov ecx,0x3
    00408FEE  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    00408FF1  |.  8995 5CFFFFFF mov dword ptr ss:[ebp-0xA4],edx
    00408FF7  |.  E8 34400000   call PowerCmd.0040D030
    00408FFC  |.  0FB700        movzx eax,word ptr ds:[eax]
    00408FFF  |.  0385 5CFFFFFF add eax,dword ptr ss:[ebp-0xA4]          ;  第四、三段的第4个字符AS值相加入EAX
    00409005  |.  B9 04000000   mov ecx,0x4
    0040900A  |.  8985 58FFFFFF mov dword ptr ss:[ebp-0xA8],eax          ;  第四、三段的第4个字符AS值相加入ebp-0xA8
    00409010  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    00409013  |.  E8 18400000   call PowerCmd.0040D030
    00409018  |.  0FB700        movzx eax,word ptr ds:[eax]
    0040901B  |.  8985 5CFFFFFF mov dword ptr ss:[ebp-0xA4],eax
    00409021  |.  B9 04000000   mov ecx,0x4
    00409026  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    00409029  |.  E8 02400000   call PowerCmd.0040D030
    0040902E  |.  0FB708        movzx ecx,word ptr ds:[eax]
    00409031  |.  038D 5CFFFFFF add ecx,dword ptr ss:[ebp-0xA4]          ;  第四、三段的第5个字符AS值相加入ECX
    00409037  |.  038D 58FFFFFF add ecx,dword ptr ss:[ebp-0xA8]          ;  第四、三段的第4、5位4字符AS值相加入ECX
    0040903D  |.  038D 54FFFFFF add ecx,dword ptr ss:[ebp-0xAC]          ;  第四、三段的第3、4、5位6字符AS值相加入ECX
    00409043  |.  03CB          add ecx,ebx                                                  ;  第四、三段的第2、3、4、5位8字符AS值相加入ECX
    00409045  |.  03CF          add ecx,edi                                                    ;  第四、三段的第1、2、3、4、5位10字符AS值相加入ECX
    00409047  |.  3BF1          cmp esi,ecx                                                     ;  关键比较 第一、二段注册码各字符AS相加和要等于第三、四段注册码各字符AS相加和
    00409049  |.  75 07         jnz short PowerCmd.00409052                       ;  不能跳
    0040904B  |.  C685 63FFFFFF>mov byte ptr ss:[ebp-0x9D],0x1           ;  标志位
    00409052  |>  33C9          xor ecx,ecx
    00409054  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]                  ;  第一段注册码入EAX=“12345”
    00409057  |.  E8 D43F0000   call PowerCmd.0040D030
    0040905C  |.  66:8338 50    cmp word ptr ds:[eax],0x50                        ;  第一段注册码的第1位AS值跟50比较“P”
    00409060  |.  75 13         jnz short PowerCmd.00409075
    00409062  |.  B9 01000000   mov ecx,0x1
    00409067  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    0040906A  |.  E8 C13F0000   call PowerCmd.0040D030
    0040906F  |.  66:8338 43    cmp word ptr ds:[eax],0x43                        ;  第一段注册码的第2位AS值跟43比较“C”
    00409073  |.  74 07         je short PowerCmd.0040907C
    00409075  |>  C685 63FFFFFF>mov byte ptr ss:[ebp-0x9D],0x0
    0040907C  |>  33C9          xor ecx,ecx
    0040907E  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]                  ;  第三段注册码入EAX=“DFGHJ”
    00409081  |.  E8 AA3F0000   call PowerCmd.0040D030
    00409086  |.  0FB730        movzx esi,word ptr ds:[eax]                        ;  第三段注册的第1位AS值入ESI
    00409089  |.  33C9          xor ecx,ecx
    0040908B  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]                ;  第一段注册码入EAX=“12345”
    0040908E  |.  E8 9D3F0000   call PowerCmd.0040D030
    00409093  |.  0FB738        movzx edi,word ptr ds:[eax]                           ;  第一段注册码的第1位AS值入EDI
    00409096  |.  B9 01000000   mov ecx,0x1
    0040909B  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    0040909E  |.  03FE          add edi,esi                                                        ;  第一、三段注册码的第1位AS值相加入EDI
    004090A0  |.  E8 8B3F0000   call PowerCmd.0040D030
    004090A5  |.  0FB730        movzx esi,word ptr ds:[eax]                         ;  第三段注册的第2位AS值入EDI
    004090A8  |.  B9 01000000   mov ecx,0x1
    004090AD  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    004090B0  |.  E8 7B3F0000   call PowerCmd.0040D030
    004090B5  |.  0FB718        movzx ebx,word ptr ds:[eax]                     ;  第一段注册码的第2位AS值入EBX
    004090B8  |.  B9 02000000   mov ecx,0x2
    004090BD  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    004090C0  |.  03DE          add ebx,esi                                                   ;  第一、三段注册码的第2位AS值相加入EBX
    004090C2  |.  E8 693F0000   call PowerCmd.0040D030
    004090C7  |.  0FB730        movzx esi,word ptr ds:[eax]                       ;  第三段注册的第3位AS值入ESI
    004090CA  |.  B9 02000000   mov ecx,0x2
    004090CF  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    004090D2  |.  E8 593F0000   call PowerCmd.0040D030
    004090D7  |.  0FB700        movzx eax,word ptr ds:[eax]                      ;  第一段注册码的第3位AS值入EAX
    004090DA  |.  03C6          add eax,esi                                                       ;  第一、三段注册码的第3位AS值相加入EAX
    004090DC  |.  8985 54FFFFFF mov dword ptr ss:[ebp-0xAC],eax          ;  第一、三段注册码的第3位AS值相加和入ebp-0xAC
    004090E2  |.  B9 03000000   mov ecx,0x3
    004090E7  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    004090EA  |.  E8 413F0000   call PowerCmd.0040D030
    004090EF  |.  0FB730        movzx esi,word ptr ds:[eax]                         ;  第三段注册的第4位AS值入ESI
    004090F2  |.  B9 03000000   mov ecx,0x3
    004090F7  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    004090FA  |.  E8 313F0000   call PowerCmd.0040D030
    004090FF  |.  0FB700        movzx eax,word ptr ds:[eax]                        ;  第一段注册码的第4位AS值入EAX
    00409102  |.  03C6          add eax,esi                                                       ;  第一、三段注册码的第4位AS值相加入EAX
    00409104  |.  8985 58FFFFFF mov dword ptr ss:[ebp-0xA8],eax             ;  第一、三段注册码的第4位AS值相加和入ebp-0xA8
    0040910A  |.  B9 04000000   mov ecx,0x4
    0040910F  |.  8D45 9C       lea eax,dword ptr ss:[ebp-0x64]
    00409112  |.  E8 193F0000   call PowerCmd.0040D030
    00409117  |.  0FB710        movzx edx,word ptr ds:[eax]                         ;  第三段注册的第5位AS值入EDX
    0040911A  |.  B9 04000000   mov ecx,0x4
    0040911F  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00409122  |.  8995 5CFFFFFF mov dword ptr ss:[ebp-0xA4],edx           ;  第三段注册的第5位AS值入ebp-0xA4
    00409128  |.  E8 033F0000   call PowerCmd.0040D030
    0040912D  |.  0FB730        movzx esi,word ptr ds:[eax]                          ;  第一段注册码的第5位AS值入ESI
    00409130  |.  03B5 5CFFFFFF add esi,dword ptr ss:[ebp-0xA4]              ;  第一、三段注册码的第5位AS值相加和入ESI
    00409136  |.  33C9          xor ecx,ecx
    00409138  |.  03B5 58FFFFFF add esi,dword ptr ss:[ebp-0xA8]                 ;  第一、三段注册码的第4、5位的4个字符AS值相加和入ESI
    0040913E  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    00409141  |.  03B5 54FFFFFF add esi,dword ptr ss:[ebp-0xAC]             ;  第一、三段注册码的第3、4、5位的6个字符AS值相加和入ESI
    00409147  |.  03F3          add esi,ebx                                                     ;  第一、三段注册码的第2、3、4、5位的8个字符AS值相加和入ESI
    00409149  |.  03F7          add esi,edi                                                       ;  第一、三段注册码的第1、2、3、4、5位的10个字符AS值相加和入ESI
    0040914B  |.  E8 E03E0000   call PowerCmd.0040D030
    00409150  |.  0FB718        movzx ebx,word ptr ds:[eax]                          ;  第四段注册码的第1位AS值入EBX
    00409153  |.  33C9          xor ecx,ecx
    00409155  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    00409158  |.  E8 D33E0000   call PowerCmd.0040D030
    0040915D  |.  0FB738        movzx edi,word ptr ds:[eax]                        ;  第二段注册码的第1位AS值入EDI
    00409160  |.  B9 01000000   mov ecx,0x1
    00409165  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    00409168  |.  03FB          add edi,ebx                                                    ;  第二、四段注册码的第1位的2个字符AS值相加和入EDI
    0040916A  |.  E8 C13E0000   call PowerCmd.0040D030
    0040916F  |.  0FB700        movzx eax,word ptr ds:[eax]                          ;  第四段注册码的第2位AS值入EAX
    00409172  |.  8985 5CFFFFFF mov dword ptr ss:[ebp-0xA4],eax            ;  第四段注册码的第2位AS值入ebp-0xA4
    00409178  |.  B9 01000000   mov ecx,0x1
    0040917D  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    00409180  |.  E8 AB3E0000   call PowerCmd.0040D030
    00409185  |.  0FB718        movzx ebx,word ptr ds:[eax]                            ;  第二段注册码的第2位AS值入EBX
    00409188  |.  039D 5CFFFFFF add ebx,dword ptr ss:[ebp-0xA4]              ;  第二、四段注册码的第2位的2个字符AS值相加和入EBX
    0040918E  |.  B9 02000000   mov ecx,0x2
    00409193  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    00409196  |.  E8 953E0000   call PowerCmd.0040D030
    0040919B  |.  0FB708        movzx ecx,word ptr ds:[eax]                              ;  第四段注册码的第3位AS值入ECX
    0040919E  |.  898D 5CFFFFFF mov dword ptr ss:[ebp-0xA4],ecx             ;  第四段注册码的第3位AS值入ebp-0xA4
    004091A4  |.  B9 02000000   mov ecx,0x2
    004091A9  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    004091AC  |.  E8 7F3E0000   call PowerCmd.0040D030
    004091B1  |.  0FB700        movzx eax,word ptr ds:[eax]                             ;  第二段注册码的第3位AS值入EAX
    004091B4  |.  0385 5CFFFFFF add eax,dword ptr ss:[ebp-0xA4]             ;  第二、四段注册码的第3位的2个字符AS值相加和入EAX
    004091BA  |.  8985 54FFFFFF mov dword ptr ss:[ebp-0xAC],eax           ;  第二、四段注册码的第3位的2个字符AS值相加和入ebp-0xAC
    004091C0  |.  B9 03000000   mov ecx,0x3
    004091C5  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    004091C8  |.  E8 633E0000   call PowerCmd.0040D030
    004091CD  |.  0FB710        movzx edx,word ptr ds:[eax]                        ;  第四段注册码的第4位AS值入EDX
    004091D0  |.  B9 03000000   mov ecx,0x3
    004091D5  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    004091D8  |.  8995 5CFFFFFF mov dword ptr ss:[ebp-0xA4],edx          ;  第四段注册码的第4位AS值入ebp-0xA4
    004091DE  |.  E8 4D3E0000   call PowerCmd.0040D030
    004091E3  |.  0FB700        movzx eax,word ptr ds:[eax]                         ;  第二段注册码的第4位AS值入EAX
    004091E6  |.  0385 5CFFFFFF add eax,dword ptr ss:[ebp-0xA4]          ;  第二、四段注册码的第4位的2个字符AS值相加和入EAX
    004091EC  |.  B9 04000000   mov ecx,0x4
    004091F1  |.  8985 58FFFFFF mov dword ptr ss:[ebp-0xA8],eax          ;  第二、四段注册码的第4位的2个字符AS值相加和入ebp-0xA8
    004091F7  |.  8D45 B8       lea eax,dword ptr ss:[ebp-0x48]
    004091FA  |.  E8 313E0000   call PowerCmd.0040D030
    004091FF  |.  0FB700        movzx eax,word ptr ds:[eax]                         ;  第四段注册码的第5位AS值入EAX
    00409202  |.  8985 5CFFFFFF mov dword ptr ss:[ebp-0xA4],eax          ;  第四段注册码的第5位AS值入ebp-0xA4
    00409208  |.  B9 04000000   mov ecx,0x4
    0040920D  |.  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
    00409210  |.  E8 1B3E0000   call PowerCmd.0040D030
    00409215  |.  0FB708        movzx ecx,word ptr ds:[eax]                         ;  第二段注册码的第5位AS值入ECX
    00409218  |.  038D 5CFFFFFF add ecx,dword ptr ss:[ebp-0xA4]          ;  第二、四段注册码的第5位的2个字符AS值相加和入ECX
    0040921E  |.  038D 58FFFFFF add ecx,dword ptr ss:[ebp-0xA8]          ;  第二、四段注册码的第4、5位的4个字符AS值相加和入ECX
    00409224  |.  038D 54FFFFFF add ecx,dword ptr ss:[ebp-0xAC]          ;  第二、四段注册码的第3、4、5位的6个字符AS值相加和入ECX
    0040922A  |.  03CB          add ecx,ebx                                                  ;  第二、四段注册码的第2、3、4、5位的8个字符AS值相加和入ECX
    0040922C  |.  03CF          add ecx,edi                                                    ;  第二、四段注册码的第1、2、3、4、5位的10个字符AS值相加和入ECX
    0040922E  |.  3BF1          cmp esi,ecx                                                     ;  第一、三段注册码各字符AS值相加和大于或等于第二、四段注册码的各字符AS值相加和
    00409230  |.  7D 07         jge short PowerCmd.00409239
    00409232  |.  C685 63FFFFFF>mov byte ptr ss:[ebp-0x9D],0x0
    00409239  |>  B9 02000000   mov ecx,0x2
    0040923E  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]          ;  (UNICODE "1C345")
    00409241  |.  E8 EA3D0000   call PowerCmd.0040D030
    00409246  |.  66:8338 4D    cmp word ptr ds:[eax],0x4D               ;  第一段第3位等于0x4D="M"
    0040924A  |.  75 26         jnz short PowerCmd.00409272
    0040924C  |.  B9 03000000   mov ecx,0x3
    00409251  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00409254  |.  E8 D73D0000   call PowerCmd.0040D030
    00409259  |.  66:8338 44    cmp word ptr ds:[eax],0x44               ;  第一段第4位等于0x44="D"
    0040925D  |.  75 13         jnz short PowerCmd.00409272
    0040925F  |.  B9 04000000   mov ecx,0x4
    00409264  |.  8D45 D4       lea eax,dword ptr ss:[ebp-0x2C]
    00409267  |.  E8 C43D0000   call PowerCmd.0040D030
    0040926C  |.  66:8338 41    cmp word ptr ds:[eax],0x41               ;  第一段第5位等于0x41="A"
    00409270  |.  74 07         je short PowerCmd.00409279
    00409272  |>  C685 63FFFFFF>mov byte ptr ss:[ebp-0x9D],0x0
    00409279  |>  8D4D B8       lea ecx,dword ptr ss:[ebp-0x48]          ;  (UNICODE "LQWER")
    0040927C  |.  E8 EFC40E00   call PowerCmd.004F5770
    00409281  |.  8D4D 9C       lea ecx,dword ptr ss:[ebp-0x64]          ;  (UNICODE "DFGHJ")
    00409284  |.  E8 E7C40E00   call PowerCmd.004F5770
    00409289  |.  8D4D 80       lea ecx,dword ptr ss:[ebp-0x80]          ;  (UNICODE "7890A")
    0040928C  |.  E8 DFC40E00   call PowerCmd.004F5770
    00409291  |.  8D4D D4       lea ecx,dword ptr ss:[ebp-0x2C]          ;  (UNICODE "12345")
    00409294  |.  E8 D7C40E00   call PowerCmd.004F5770
    00409299  |>  83BD 78FFFFFF>cmp dword ptr ss:[ebp-0x88],0x8          ;  
    004092A0  |.  72 0F         jb short PowerCmd.004092B1
    004092A2  |.  8B95 64FFFFFF mov edx,dword ptr ss:[ebp-0x9C]          ;  (UNICODE "7890a-dfghj")
    004092A8  |.  52            push edx
    004092A9  |.  E8 D37B0300   call PowerCmd.00440E81                   ;  
    004092AE  |.  83C4 04       add esp,0x4
    004092B1  |>  8A85 63FFFFFF mov al,byte ptr ss:[ebp-0x9D]
    004092B7  |.  A2 1C166D00   mov byte ptr ds:[0x6D161C],al
    004092BC  |.  8B4D F4       mov ecx,dword ptr ss:[ebp-0xC]
    004092BF  |.  64:890D 00000>mov dword ptr fs:[0],ecx
    004092C6  |.  59            pop ecx
    004092C7  |.  5F            pop edi
    004092C8  |.  5E            pop esi
    004092C9  |.  5B            pop ebx
    004092CA  |.  8B4D F0       mov ecx,dword ptr ss:[ebp-0x10]
    004092CD  |.  33CD          xor ecx,ebp
    004092CF  |.  E8 9E7B0300   call PowerCmd.00440E72
    004092D4  |.  8BE5          mov esp,ebp
    004092D6  |.  5D            pop ebp
    004092D7  \.  C3            retn



    归纳总:
    1、注册长为23位分成4段,每段5位且段之前用“-”分开;
    2、如果注册中有字母就把字母转化成大写;设注册码为A-B-C-D,以下表示A1表示第1段的第1位,其它同理;
    3、第一、二段每一位注册码的ASCII值相加和设为AB;
    4、第三、四段每一位注册码的ASCII值相加和设为CD;
    5、要求AB与CD相等;
    6、A1="P"、A2="C";
    7、第一、三段每一位注册码的ASCII值相加和设为AC;
    8、第二、四段每一位注册码的ASCII值相加和设为BD;
    9、要求AC大于等于BD;
    10、A3="M"、A4="D"、A5="A";

    构建注册码:
    1、00000-00000-00000-00000;
    2、PCMDA-00000-00000-00000;通过以上第6、10得到A段注册码;
    3、PCMDA-00000-PCMDA-00000;通第以上第5;
    4、PCMDA-PCMDA-PCMDA-PCMDA;通过以上第9;因为第9条要求是大于或等于,这个注册码可是多个;

    最简单注册码:PCMDA-PCMDA-PCMDA-PCMDA,
    注册码跟用户名无关
    ----------------------------------------------------------------------------------------------------------------------------
    【版权声明】:
    本文原创于GeekCat,转载请注明作者并保存文章的完整!
    ————————————————————————————————————————————————————————————————
    请各位大神指教分析不当处~~~~~~!!!

    评分

    参与人数 2威望 +12 飘云币 +24 收起 理由
    GGLHY + 8 + 20 不错哦~~这想起我以前写的这篇文章了~
    wgz001 + 4 + 4 很给力!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2017-3-10 20:59
  • 签到天数: 243 天

    [LV.8]以坛为家I

    发表于 2015-5-7 08:13:07 | 显示全部楼层
    学习一下了,感谢分享
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 971 天

    [LV.10]以坛为家III

    发表于 2015-5-7 10:51:17 | 显示全部楼层

    感谢楼主分享!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2015-5-7 11:19:39 | 显示全部楼层
    赞 
    看上去好长好长啊
    {:soso_e101:}
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-3-10 19:49
  • 签到天数: 473 天

    [LV.9]以坛为家II

    发表于 2015-5-7 13:32:07 | 显示全部楼层
    谢谢咯。这篇算法文章不错。构造注册码的方式 还可以这样玩?

    点评

    小菜!最笨的方法搞~~  详情 回复 发表于 2015-5-7 17:35
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-25 14:18
  • 签到天数: 881 天

    [LV.10]以坛为家III

     楼主| 发表于 2015-5-7 17:35:08 | 显示全部楼层
    Dxer 发表于 2015-5-7 13:32
    谢谢咯。这篇算法文章不错。构造注册码的方式 还可以这样玩?

    小菜!最笨的方法搞~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 20:04
  • 签到天数: 1836 天

    [LV.Master]伴坛终老

    发表于 2015-5-7 19:35:43 | 显示全部楼层
    膜拜会算法的大牛,学习中
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2015-5-8 11:31:55 | 显示全部楼层
    学习啦,小菜成长中。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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