GeekCat 发表于 2015-5-7 00:26:38

PowerCmd V2.2 算法分析

【文章标题】:PowerCmd V2.2 算法分析【文章作者】: geekcat
【作者邮箱】: [email protected]
【作者主页】:
【软件名称】: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 ebp00408D51|.8BEC          mov ebp,esp00408D53|.6A FF         push -0x100408D55|.68 3BBE5E00   push PowerCmd.005EBE3B00408D5A|.64:A1 0000000>mov eax,dword ptr fs:00408D60|.50            push eax00408D61|.81EC A0000000 sub esp,0xA000408D67|.A1 E4906900   mov eax,dword ptr ds:00408D6C|.33C5          xor eax,ebp00408D6E|.8945 F0       mov dword ptr ss:,eax00408D71|.53            push ebx00408D72|.56            push esi00408D73|.57            push edi00408D74|.50            push eax00408D75|.8D45 F4       lea eax,dword ptr ss:00408D78|.64:A3 0000000>mov dword ptr fs:,eax00408D7E|.8BF1          mov esi,ecx00408D80|.837E 10 17    cmp dword ptr ds:,0x17         ;注册码的长度要求0x17=23位00408D84|.C685 63FFFFFF>mov byte ptr ss:,0x000408D8B|.0F85 20050000 jnz PowerCmd.004092B100408D91|.6A 00         push 0x000408D93|.6A 2D         push 0x2D                        00408D95|.E8 863E0400   call PowerCmd.0044CC20                   ;注册码以“-”来分段,并计算注册码第一段的长度00408D9A|.6A 01         push 0x100408D9C|.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,eax00408DA9|.8D47 01       lea eax,dword ptr ds:00408DAC|.3BD8          cmp ebx,eax                                          ;注册码的第一段位数最长要小于注册码总位数一半,即不能超过10位00408DAE|.0F8E FD040000 jle PowerCmd.004092B100408DB4|.85FF          test edi,edi                                                ;注册码第一段长度不能为零,即注册码不能以“-”开头00408DB6|.0F8E F5040000 jle PowerCmd.004092B100408DBC|.8BCB          mov ecx,ebx                                           ;"12345-7890a-dfghj-lqwer"00408DBE|.2BCF          sub ecx,edi00408DC0|.49            dec ecx00408DC1|.51            push ecx00408DC2|.50            push eax00408DC3|.8D95 64FFFFFF lea edx,dword ptr ss:00408DC9|.52            push edx00408DCA|.8BCE          mov ecx,esi00408DCC|.E8 0F4C0400   call PowerCmd.0044D9E000408DD1|.6A 00         push 0x000408DD3|.6A 2D         push 0x2D                              00408DD5|.8D8D 64FFFFFF lea ecx,dword ptr ss:          ;从以下分析注册码每一段为5位共4段,各段间以“-”链接00408DDB|.C745 FC 00000>mov dword ptr ss:,0x000408DE2|.E8 393E0400   call PowerCmd.0044CC20                     ;计算注册码第二段的长度00408DE7|.8D4438 01   lea eax,dword ptr ds:      ;注册码前两段加1即上中间“-”字符入EAX00408DEB|.83FF 05       cmp edi,0x5                                                 ;第一段注册码的长度等于500408DEE|.0F85 A5040000 jnz PowerCmd.0040929900408DF4|.83F8 0B       cmp eax,0xB                                             ;注册码前两段加1即上中间“-”字符等于0xB即11位,得第2段注册码为5位00408DF7|.0F85 9C040000 jnz PowerCmd.0040929900408DFD|.83FB 11       cmp ebx,0x11                                           ;注册码除最后一段外的总长度要等于0x11即17位,最后一段为5位00408E00|.0F85 93040000 jnz PowerCmd.0040929900408E06|.57            push edi00408E07|.6A 00         push 0x000408E09|.8D45 D4       lea eax,dword ptr ss:00408E0C|.50            push eax00408E0D|.8BCE          mov ecx,esi                                             ;"7890a-dfghj"00408E0F|.E8 CC4B0400   call PowerCmd.0044D9E0                   ;EAX中出现注册码的第一段“12345”00408E14|.57            push edi00408E15|.6A 06         push 0x600408E17|.8D4D 80       lea ecx,dword ptr ss:00408E1A|.51            push ecx00408E1B|.8BCE          mov ecx,esi00408E1D|.C645 FC 01    mov byte ptr ss:,0x100408E21|.E8 BA4B0400   call PowerCmd.0044D9E000408E26|.8D53 F4       lea edx,dword ptr ds:         ;EAX中出现"7890a"00408E29|.52            push edx00408E2A|.6A 0C         push 0xC00408E2C|.8D45 9C       lea eax,dword ptr ss:          ;(UNICODE "ekCat") 注册名的后5位00408E2F|.50            push eax00408E30|.8BCE          mov ecx,esi00408E32|.C645 FC 02    mov byte ptr ss:,0x200408E36|.E8 A54B0400   call PowerCmd.0044D9E000408E3B|.C645 FC 03    mov byte ptr ss:,0x3            ;"dfghj"00408E3F|.8B46 10       mov eax,dword ptr ds:00408E42|.2BC3          sub eax,ebx00408E44|.48            dec eax00408E45|.50            push eax00408E46|.8D4D B8       lea ecx,dword ptr ss:          ;(UNICODE "ekCat")00408E49|.51            push ecx00408E4A|.8BCE          mov ecx,esi00408E4C|.E8 9F4C0400   call PowerCmd.0044DAF000408E51|.C645 FC 04    mov byte ptr ss:,0x4            ;EAX中出现注册最一段"lqwer"00408E55|.397D E4       cmp dword ptr ss:,edi00408E58|.0F85 1B040000 jnz PowerCmd.0040927900408E5E|.397D 90       cmp dword ptr ss:,edi00408E61|.0F85 12040000 jnz PowerCmd.0040927900408E67|.397D AC       cmp dword ptr ss:,edi00408E6A|.0F85 09040000 jnz PowerCmd.0040927900408E70|.397D C8       cmp dword ptr ss:,edi00408E73|.0F85 00040000 jnz PowerCmd.0040927900408E79|.8D4D D4       lea ecx,dword ptr ss:          ;(UNICODE "12345")00408E7C|.E8 FF3C0400   call PowerCmd.0044CB80                   ;小写转大写00408E81|.8D4D 80       lea ecx,dword ptr ss:          ;(UNICODE "7890a")00408E84|.E8 F73C0400   call PowerCmd.0044CB8000408E89|.8D4D 9C       lea ecx,dword ptr ss:          ;(UNICODE "dfghj")00408E8C|.E8 EF3C0400   call PowerCmd.0044CB8000408E91|.8D4D B8       lea ecx,dword ptr ss:          ;(UNICODE "lqwer")00408E94|.E8 E73C0400   call PowerCmd.0044CB8000408E99|.33C9          xor ecx,ecx00408E9B|.8D45 80       lea eax,dword ptr ss:          ;(UNICODE "7890A")00408E9E|.E8 8D410000   call PowerCmd.0040D03000408EA3|.0FB730      movzx esi,word ptr ds:00408EA6|.33C9          xor ecx,ecx00408EA8|.8D45 D4       lea eax,dword ptr ss:          ;(UNICODE "12345")00408EAB|.E8 80410000   call PowerCmd.0040D03000408EB0|.0FB738      movzx edi,word ptr ds:00408EB3|.8D4B F0       lea ecx,dword ptr ds:00408EB6|.8D45 80       lea eax,dword ptr ss:00408EB9|.03FE          add edi,esi                                                   ;第一、二段的第1个字符AS值相加入EDI00408EBB|.E8 70410000   call PowerCmd.0040D03000408EC0|.0FB730      movzx esi,word ptr ds:00408EC3|.8D4B F0       lea ecx,dword ptr ds:00408EC6|.8D45 D4       lea eax,dword ptr ss:00408EC9|.E8 62410000   call PowerCmd.0040D03000408ECE|.0FB718      movzx ebx,word ptr ds:00408ED1|.B9 02000000   mov ecx,0x200408ED6|.8D45 80       lea eax,dword ptr ss:00408ED9|.03DE          add ebx,esi                                                    ;第一、二段的第2个字符AS值相加入EBX00408EDB|.E8 50410000   call PowerCmd.0040D03000408EE0|.0FB730      movzx esi,word ptr ds:00408EE3|.B9 02000000   mov ecx,0x200408EE8|.8D45 D4       lea eax,dword ptr ss:00408EEB|.E8 40410000   call PowerCmd.0040D03000408EF0|.0FB700      movzx eax,word ptr ds:00408EF3|.03C6          add eax,esi                                                    ;第一、二段的第3个字符AS值相加入EAX00408EF5|.8985 54FFFFFF mov dword ptr ss:,eax          ;第一、二段的第3个字符AS值相保存在到EBP-AC中00408EFB|.B9 03000000   mov ecx,0x300408F00|.8D45 80       lea eax,dword ptr ss:00408F03|.E8 28410000   call PowerCmd.0040D03000408F08|.0FB730      movzx esi,word ptr ds:00408F0B|.B9 03000000   mov ecx,0x300408F10|.8D45 D4       lea eax,dword ptr ss:00408F13|.E8 18410000   call PowerCmd.0040D03000408F18|.0FB700      movzx eax,word ptr ds:00408F1B|.03C6          add eax,esi                                                      ;第一、二段的第4个字符AS值相加入EAX00408F1D|.8985 58FFFFFF mov dword ptr ss:,eax          ;第一、二段的第4个字符AS值相加保存在到EBP-A8中00408F23|.B9 04000000   mov ecx,0x400408F28|.8D45 80       lea eax,dword ptr ss:00408F2B|.E8 00410000   call PowerCmd.0040D03000408F30|.0FB710      movzx edx,word ptr ds:                     ;第一段的第5位保存到EDX中00408F33|.B9 04000000   mov ecx,0x400408F38|.8D45 D4       lea eax,dword ptr ss:00408F3B|.8995 5CFFFFFF mov dword ptr ss:,edx          ;第一段的第5位保存到EBP-A4中00408F41|.E8 EA400000   call PowerCmd.0040D03000408F46|.0FB730      movzx esi,word ptr ds:                        ;第二段的第5位保存到ESI中00408F49|.03B5 5CFFFFFF add esi,dword ptr ss:          ;第一、二段的第5个字符AS值相加入ESI中00408F4F|.33C9          xor ecx,ecx00408F51|.03B5 58FFFFFF add esi,dword ptr ss:          ;第一、二段的第4、5位4个字符AS值相加入ESI中00408F57|.8D45 B8       lea eax,dword ptr ss:               ;第四段注册转换成大写后入EAX00408F5A|.03B5 54FFFFFF add esi,dword ptr ss:          ;第一、二段的第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.0040D03000408F69|.0FB718      movzx ebx,word ptr ds:               ;第四段的第1位字符AS值入EBX00408F6C|.33C9          xor ecx,ecx                                          ;计数器00408F6E|.8D45 9C       lea eax,dword ptr ss:          ;(UNICODE "DFGHJ")00408F71|.E8 BA400000   call PowerCmd.0040D03000408F76|.0FB738      movzx edi,word ptr ds:                  ;第三段的第1位字符AS值00408F79|.B9 01000000   mov ecx,0x100408F7E|.8D45 B8       lea eax,dword ptr ss:00408F81|.03FB          add edi,ebx                                             ;第四、三段的第1个字符AS值相加入EDI00408F83|.E8 A8400000   call PowerCmd.0040D03000408F88|.0FB700      movzx eax,word ptr ds:                  ;第四段的第2位字符AS值入EAX00408F8B|.8985 5CFFFFFF mov dword ptr ss:,eax          ;第四段的第2位字符AS值入ebp-0xA400408F91|.B9 01000000   mov ecx,0x100408F96|.8D45 9C       lea eax,dword ptr ss:00408F99|.E8 92400000   call PowerCmd.0040D03000408F9E|.0FB718      movzx ebx,word ptr ds:                      ;第三段的第2位字符AS值入EBX00408FA1|.039D 5CFFFFFF add ebx,dword ptr ss:          ;第四、三段的第2个字符AS值相加入EBX00408FA7|.B9 02000000   mov ecx,0x200408FAC|.8D45 B8       lea eax,dword ptr ss:00408FAF|.E8 7C400000   call PowerCmd.0040D03000408FB4|.0FB708      movzx ecx,word ptr ds:00408FB7|.898D 5CFFFFFF mov dword ptr ss:,ecx00408FBD|.B9 02000000   mov ecx,0x200408FC2|.8D45 9C       lea eax,dword ptr ss:00408FC5|.E8 66400000   call PowerCmd.0040D03000408FCA|.0FB700      movzx eax,word ptr ds:00408FCD|.0385 5CFFFFFF add eax,dword ptr ss:          ;第四、三段的第3个字符AS值相加入EAX00408FD3|.B9 03000000   mov ecx,0x300408FD8|.8985 54FFFFFF mov dword ptr ss:,eax          ;第四、三段的第3个字符AS值相加入ebp-0xAC00408FDE|.8D45 B8       lea eax,dword ptr ss:00408FE1|.E8 4A400000   call PowerCmd.0040D03000408FE6|.0FB710      movzx edx,word ptr ds:00408FE9|.B9 03000000   mov ecx,0x300408FEE|.8D45 9C       lea eax,dword ptr ss:00408FF1|.8995 5CFFFFFF mov dword ptr ss:,edx00408FF7|.E8 34400000   call PowerCmd.0040D03000408FFC|.0FB700      movzx eax,word ptr ds:00408FFF|.0385 5CFFFFFF add eax,dword ptr ss:          ;第四、三段的第4个字符AS值相加入EAX00409005|.B9 04000000   mov ecx,0x40040900A|.8985 58FFFFFF mov dword ptr ss:,eax          ;第四、三段的第4个字符AS值相加入ebp-0xA800409010|.8D45 B8       lea eax,dword ptr ss:00409013|.E8 18400000   call PowerCmd.0040D03000409018|.0FB700      movzx eax,word ptr ds:0040901B|.8985 5CFFFFFF mov dword ptr ss:,eax00409021|.B9 04000000   mov ecx,0x400409026|.8D45 9C       lea eax,dword ptr ss:00409029|.E8 02400000   call PowerCmd.0040D0300040902E|.0FB708      movzx ecx,word ptr ds:00409031|.038D 5CFFFFFF add ecx,dword ptr ss:          ;第四、三段的第5个字符AS值相加入ECX00409037|.038D 58FFFFFF add ecx,dword ptr ss:          ;第四、三段的第4、5位4字符AS值相加入ECX0040903D|.038D 54FFFFFF add ecx,dword ptr ss:          ;第四、三段的第3、4、5位6字符AS值相加入ECX00409043|.03CB          add ecx,ebx                                                ;第四、三段的第2、3、4、5位8字符AS值相加入ECX00409045|.03CF          add ecx,edi                                                    ;第四、三段的第1、2、3、4、5位10字符AS值相加入ECX00409047|.3BF1          cmp esi,ecx                                                   ;关键比较 第一、二段注册码各字符AS相加和要等于第三、四段注册码各字符AS相加和00409049|.75 07         jnz short PowerCmd.00409052                     ;不能跳0040904B|.C685 63FFFFFF>mov byte ptr ss:,0x1         ;标志位00409052|>33C9          xor ecx,ecx00409054|.8D45 D4       lea eax,dword ptr ss:                  ;第一段注册码入EAX=“12345”00409057|.E8 D43F0000   call PowerCmd.0040D0300040905C|.66:8338 50    cmp word ptr ds:,0x50                        ;第一段注册码的第1位AS值跟50比较“P”00409060|.75 13         jnz short PowerCmd.0040907500409062|.B9 01000000   mov ecx,0x100409067|.8D45 D4       lea eax,dword ptr ss:0040906A|.E8 C13F0000   call PowerCmd.0040D0300040906F|.66:8338 43    cmp word ptr ds:,0x43                        ;第一段注册码的第2位AS值跟43比较“C”00409073|.74 07         je short PowerCmd.0040907C00409075|>C685 63FFFFFF>mov byte ptr ss:,0x00040907C|>33C9          xor ecx,ecx0040907E|.8D45 9C       lea eax,dword ptr ss:                  ;第三段注册码入EAX=“DFGHJ”00409081|.E8 AA3F0000   call PowerCmd.0040D03000409086|.0FB730      movzx esi,word ptr ds:                        ;第三段注册的第1位AS值入ESI00409089|.33C9          xor ecx,ecx0040908B|.8D45 D4       lea eax,dword ptr ss:                ;第一段注册码入EAX=“12345”0040908E|.E8 9D3F0000   call PowerCmd.0040D03000409093|.0FB738      movzx edi,word ptr ds:                           ;第一段注册码的第1位AS值入EDI00409096|.B9 01000000   mov ecx,0x10040909B|.8D45 9C       lea eax,dword ptr ss:0040909E|.03FE          add edi,esi                                                      ;第一、三段注册码的第1位AS值相加入EDI004090A0|.E8 8B3F0000   call PowerCmd.0040D030004090A5|.0FB730      movzx esi,word ptr ds:                         ;第三段注册的第2位AS值入EDI004090A8|.B9 01000000   mov ecx,0x1004090AD|.8D45 D4       lea eax,dword ptr ss:004090B0|.E8 7B3F0000   call PowerCmd.0040D030004090B5|.0FB718      movzx ebx,word ptr ds:                     ;第一段注册码的第2位AS值入EBX004090B8|.B9 02000000   mov ecx,0x2004090BD|.8D45 9C       lea eax,dword ptr ss:004090C0|.03DE          add ebx,esi                                                   ;第一、三段注册码的第2位AS值相加入EBX004090C2|.E8 693F0000   call PowerCmd.0040D030004090C7|.0FB730      movzx esi,word ptr ds:                     ;第三段注册的第3位AS值入ESI004090CA|.B9 02000000   mov ecx,0x2004090CF|.8D45 D4       lea eax,dword ptr ss:004090D2|.E8 593F0000   call PowerCmd.0040D030004090D7|.0FB700      movzx eax,word ptr ds:                      ;第一段注册码的第3位AS值入EAX004090DA|.03C6          add eax,esi                                                       ;第一、三段注册码的第3位AS值相加入EAX004090DC|.8985 54FFFFFF mov dword ptr ss:,eax          ;第一、三段注册码的第3位AS值相加和入ebp-0xAC004090E2|.B9 03000000   mov ecx,0x3004090E7|.8D45 9C       lea eax,dword ptr ss:004090EA|.E8 413F0000   call PowerCmd.0040D030004090EF|.0FB730      movzx esi,word ptr ds:                         ;第三段注册的第4位AS值入ESI004090F2|.B9 03000000   mov ecx,0x3004090F7|.8D45 D4       lea eax,dword ptr ss:004090FA|.E8 313F0000   call PowerCmd.0040D030004090FF|.0FB700      movzx eax,word ptr ds:                        ;第一段注册码的第4位AS值入EAX00409102|.03C6          add eax,esi                                                       ;第一、三段注册码的第4位AS值相加入EAX00409104|.8985 58FFFFFF mov dword ptr ss:,eax             ;第一、三段注册码的第4位AS值相加和入ebp-0xA80040910A|.B9 04000000   mov ecx,0x40040910F|.8D45 9C       lea eax,dword ptr ss:00409112|.E8 193F0000   call PowerCmd.0040D03000409117|.0FB710      movzx edx,word ptr ds:                         ;第三段注册的第5位AS值入EDX0040911A|.B9 04000000   mov ecx,0x40040911F|.8D45 D4       lea eax,dword ptr ss:00409122|.8995 5CFFFFFF mov dword ptr ss:,edx         ;第三段注册的第5位AS值入ebp-0xA400409128|.E8 033F0000   call PowerCmd.0040D0300040912D|.0FB730      movzx esi,word ptr ds:                        ;第一段注册码的第5位AS值入ESI00409130|.03B5 5CFFFFFF add esi,dword ptr ss:            ;第一、三段注册码的第5位AS值相加和入ESI00409136|.33C9          xor ecx,ecx00409138|.03B5 58FFFFFF add esi,dword ptr ss:               ;第一、三段注册码的第4、5位的4个字符AS值相加和入ESI0040913E|.8D45 B8       lea eax,dword ptr ss:00409141|.03B5 54FFFFFF add esi,dword ptr ss:             ;第一、三段注册码的第3、4、5位的6个字符AS值相加和入ESI00409147|.03F3          add esi,ebx                                                   ;第一、三段注册码的第2、3、4、5位的8个字符AS值相加和入ESI00409149|.03F7          add esi,edi                                                       ;第一、三段注册码的第1、2、3、4、5位的10个字符AS值相加和入ESI0040914B|.E8 E03E0000   call PowerCmd.0040D03000409150|.0FB718      movzx ebx,word ptr ds:                        ;第四段注册码的第1位AS值入EBX00409153|.33C9          xor ecx,ecx00409155|.8D45 80       lea eax,dword ptr ss:00409158|.E8 D33E0000   call PowerCmd.0040D0300040915D|.0FB738      movzx edi,word ptr ds:                        ;第二段注册码的第1位AS值入EDI00409160|.B9 01000000   mov ecx,0x100409165|.8D45 B8       lea eax,dword ptr ss:00409168|.03FB          add edi,ebx                                                    ;第二、四段注册码的第1位的2个字符AS值相加和入EDI0040916A|.E8 C13E0000   call PowerCmd.0040D0300040916F|.0FB700      movzx eax,word ptr ds:                        ;第四段注册码的第2位AS值入EAX00409172|.8985 5CFFFFFF mov dword ptr ss:,eax            ;第四段注册码的第2位AS值入ebp-0xA400409178|.B9 01000000   mov ecx,0x10040917D|.8D45 80       lea eax,dword ptr ss:00409180|.E8 AB3E0000   call PowerCmd.0040D03000409185|.0FB718      movzx ebx,word ptr ds:                            ;第二段注册码的第2位AS值入EBX00409188|.039D 5CFFFFFF add ebx,dword ptr ss:            ;第二、四段注册码的第2位的2个字符AS值相加和入EBX0040918E|.B9 02000000   mov ecx,0x200409193|.8D45 B8       lea eax,dword ptr ss:00409196|.E8 953E0000   call PowerCmd.0040D0300040919B|.0FB708      movzx ecx,word ptr ds:                              ;第四段注册码的第3位AS值入ECX0040919E|.898D 5CFFFFFF mov dword ptr ss:,ecx             ;第四段注册码的第3位AS值入ebp-0xA4004091A4|.B9 02000000   mov ecx,0x2004091A9|.8D45 80       lea eax,dword ptr ss:004091AC|.E8 7F3E0000   call PowerCmd.0040D030004091B1|.0FB700      movzx eax,word ptr ds:                           ;第二段注册码的第3位AS值入EAX004091B4|.0385 5CFFFFFF add eax,dword ptr ss:             ;第二、四段注册码的第3位的2个字符AS值相加和入EAX004091BA|.8985 54FFFFFF mov dword ptr ss:,eax         ;第二、四段注册码的第3位的2个字符AS值相加和入ebp-0xAC004091C0|.B9 03000000   mov ecx,0x3004091C5|.8D45 B8       lea eax,dword ptr ss:004091C8|.E8 633E0000   call PowerCmd.0040D030004091CD|.0FB710      movzx edx,word ptr ds:                        ;第四段注册码的第4位AS值入EDX004091D0|.B9 03000000   mov ecx,0x3004091D5|.8D45 80       lea eax,dword ptr ss:004091D8|.8995 5CFFFFFF mov dword ptr ss:,edx          ;第四段注册码的第4位AS值入ebp-0xA4004091DE|.E8 4D3E0000   call PowerCmd.0040D030004091E3|.0FB700      movzx eax,word ptr ds:                         ;第二段注册码的第4位AS值入EAX004091E6|.0385 5CFFFFFF add eax,dword ptr ss:          ;第二、四段注册码的第4位的2个字符AS值相加和入EAX004091EC|.B9 04000000   mov ecx,0x4004091F1|.8985 58FFFFFF mov dword ptr ss:,eax          ;第二、四段注册码的第4位的2个字符AS值相加和入ebp-0xA8004091F7|.8D45 B8       lea eax,dword ptr ss:004091FA|.E8 313E0000   call PowerCmd.0040D030004091FF|.0FB700      movzx eax,word ptr ds:                         ;第四段注册码的第5位AS值入EAX00409202|.8985 5CFFFFFF mov dword ptr ss:,eax          ;第四段注册码的第5位AS值入ebp-0xA400409208|.B9 04000000   mov ecx,0x40040920D|.8D45 80       lea eax,dword ptr ss:00409210|.E8 1B3E0000   call PowerCmd.0040D03000409215|.0FB708      movzx ecx,word ptr ds:                         ;第二段注册码的第5位AS值入ECX00409218|.038D 5CFFFFFF add ecx,dword ptr ss:          ;第二、四段注册码的第5位的2个字符AS值相加和入ECX0040921E|.038D 58FFFFFF add ecx,dword ptr ss:          ;第二、四段注册码的第4、5位的4个字符AS值相加和入ECX00409224|.038D 54FFFFFF add ecx,dword ptr ss:          ;第二、四段注册码的第3、4、5位的6个字符AS值相加和入ECX0040922A|.03CB          add ecx,ebx                                                ;第二、四段注册码的第2、3、4、5位的8个字符AS值相加和入ECX0040922C|.03CF          add ecx,edi                                                    ;第二、四段注册码的第1、2、3、4、5位的10个字符AS值相加和入ECX0040922E|.3BF1          cmp esi,ecx                                                   ;第一、三段注册码各字符AS值相加和大于或等于第二、四段注册码的各字符AS值相加和00409230|.7D 07         jge short PowerCmd.0040923900409232|.C685 63FFFFFF>mov byte ptr ss:,0x000409239|>B9 02000000   mov ecx,0x20040923E|.8D45 D4       lea eax,dword ptr ss:          ;(UNICODE "1C345")00409241|.E8 EA3D0000   call PowerCmd.0040D03000409246|.66:8338 4D    cmp word ptr ds:,0x4D               ;第一段第3位等于0x4D="M"0040924A|.75 26         jnz short PowerCmd.004092720040924C|.B9 03000000   mov ecx,0x300409251|.8D45 D4       lea eax,dword ptr ss:00409254|.E8 D73D0000   call PowerCmd.0040D03000409259|.66:8338 44    cmp word ptr ds:,0x44               ;第一段第4位等于0x44="D"0040925D|.75 13         jnz short PowerCmd.004092720040925F|.B9 04000000   mov ecx,0x400409264|.8D45 D4       lea eax,dword ptr ss:00409267|.E8 C43D0000   call PowerCmd.0040D0300040926C|.66:8338 41    cmp word ptr ds:,0x41               ;第一段第5位等于0x41="A"00409270|.74 07         je short PowerCmd.0040927900409272|>C685 63FFFFFF>mov byte ptr ss:,0x000409279|>8D4D B8       lea ecx,dword ptr ss:          ;(UNICODE "LQWER")0040927C|.E8 EFC40E00   call PowerCmd.004F577000409281|.8D4D 9C       lea ecx,dword ptr ss:          ;(UNICODE "DFGHJ")00409284|.E8 E7C40E00   call PowerCmd.004F577000409289|.8D4D 80       lea ecx,dword ptr ss:          ;(UNICODE "7890A")0040928C|.E8 DFC40E00   call PowerCmd.004F577000409291|.8D4D D4       lea ecx,dword ptr ss:          ;(UNICODE "12345")00409294|.E8 D7C40E00   call PowerCmd.004F577000409299|>83BD 78FFFFFF>cmp dword ptr ss:,0x8          ;004092A0|.72 0F         jb short PowerCmd.004092B1004092A2|.8B95 64FFFFFF mov edx,dword ptr ss:          ;(UNICODE "7890a-dfghj")004092A8|.52            push edx004092A9|.E8 D37B0300   call PowerCmd.00440E81                   ;004092AE|.83C4 04       add esp,0x4004092B1|>8A85 63FFFFFF mov al,byte ptr ss:004092B7|.A2 1C166D00   mov byte ptr ds:,al004092BC|.8B4D F4       mov ecx,dword ptr ss:004092BF|.64:890D 00000>mov dword ptr fs:,ecx004092C6|.59            pop ecx004092C7|.5F            pop edi004092C8|.5E            pop esi004092C9|.5B            pop ebx004092CA|.8B4D F0       mov ecx,dword ptr ss:004092CD|.33CD          xor ecx,ebp004092CF|.E8 9E7B0300   call PowerCmd.00440E72004092D4|.8BE5          mov esp,ebp004092D6|.5D            pop ebp004092D7\.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,转载请注明作者并保存文章的完整!————————————————————————————————————————————————————————————————请各位大神指教分析不当处~~~~~~!!!

开心啦 发表于 2015-5-7 08:13:07

学习一下了,感谢分享

gujin162 发表于 2015-5-7 10:51:17


感谢楼主分享!

wgz001 发表于 2015-5-7 11:19:39

赞 
看上去好长好长啊
{:soso_e101:}

Dxer 发表于 2015-5-7 13:32:07

谢谢咯。这篇算法文章不错。构造注册码的方式 还可以这样玩?

GeekCat 发表于 2015-5-7 17:35:08

Dxer 发表于 2015-5-7 13:32
谢谢咯。这篇算法文章不错。构造注册码的方式 还可以这样玩?

小菜!最笨的方法搞~~

qinccckencn 发表于 2015-5-7 19:35:43

膜拜会算法的大牛,学习中

xmp123 发表于 2015-5-8 11:31:55

学习啦,小菜成长中。
页: [1]
查看完整版本: PowerCmd V2.2 算法分析