TA的每日心情 | 开心 2015-8-23 23:49 |
---|
签到天数: 27 天 [LV.4]偶尔看看III
|
本帖最后由 GGLHY 于 2011-1-14 01:30 编辑
先声明下,文章有点长。如果大家略过对注册码格式检测这部分(二)的话,那么你的眼睛会少受点罪了!呵呵
PowerCMD 2.1版注册解码实录
查壳:Microsoft Visual Studio .NET 2005 -- 2008 -> Microsoft Corporation
经过OD跟踪,得出注册码形如XXXXX-XXXXX-XXXXX-XXXXX(可参见对注册码格式检测部分),分别设4部分为S1、S2、S3、S4
S1 - S2 - S3 - S4
直接来到这里吧:
005E0D1C |. 8D55 B8 lea edx, [ebp-48] ; |
005E0D1F |. 52 push edx ; |Arg1
005E0D20 |. E8 5B9B0100 call 005FA880 ; \PowerCmd.005FA880 算法call,F7
005E0D25 |. 83C4 08 add esp, 8
005E0D28 |. 0FB6C0 movzx eax, al
005E0D2B |. 83F8 01 cmp eax, 1 ; 标志位哦!
005E0D2E |. 75 2D jnz short 005E0D5D ; 一失足就成千古恨啊...
一、算法
////////////////////////////////////////////////////////////////////////////////////////////
算法call,F7:
005FA880 /$ 55 push ebp ;本地调用来自 005E0D20(注册), 006007A5(重启验证)
005FA881 |. 8BEC mov ebp, esp
005FA883 |. 6A FF push -1
005FA885 |. 68 4DA56100 push 0061A54D
005FA88A |. 64:A1 0000000>mov eax, fs:[0]
005FA890 |. 50 push eax
005FA891 |. 81EC BC000000 sub esp, 0BC
005FA897 |. A1 58316D00 mov eax, [6D3158]
005FA89C |. 33C5 xor eax, ebp
005FA89E |. 8945 E4 mov [ebp-1C], eax
005FA8A1 |. 56 push esi
005FA8A2 |. 50 push eax
005FA8A3 |. 8D45 F4 lea eax, [ebp-C]
005FA8A6 |. 64:A3 0000000>mov fs:[0], eax
005FA8AC |. C645 F3 00 mov byte ptr [ebp-D], >
005FA8B0 |. 8B4D 0C mov ecx, [ebp+C]
005FA8B3 |. E8 28A2E1FF call 00414AE0
005FA8B8 |. 83F8 17 cmp eax, 17 ; 注册码长度为23位吗?不是就错!
005FA8BB |. 0F85 DA050000 jnz 005FAE9B
005FA8C1 |. 6A 00 push 0
005FA8C3 |. 6A 2D push 2D ; 注意这个2D(“-”),想想看说明了什么?
005FA8C5 |. 8B4D 0C mov ecx, [ebp+C]
005FA8C8 |. E8 133EE3FF call 0042E6E0 ;对注册码格式的检测及得到假码中第一个“-”前部分的长度
005FA8CD |. 8945 E8 mov [ebp-18], eax ;
005FA8D0 |. 6A 01 push 1
005FA8D2 |. 6A 2D push 2D ; 这里有一个2D(“-”)
005FA8D4 |. 8B4D 0C mov ecx, [ebp+C]
005FA8D7 |. E8 043EE3FF call 0042E6E0 ;对注册码格式的检测及得到假码中最后一个“-”前部分的长度
005FA8DC |. 8945 EC mov [ebp-14], eax ;
005FA8DF |. 8B45 E8 mov eax, [ebp-18] ;
005FA8E2 |. 83C0 01 add eax, 1
005FA8E5 |. 3945 EC cmp [ebp-14], eax ; 假码中第一个“-”前(含)部分的长度:最后一个“-”前部分的长度
005FA8E8 |. 0F8E AD050000 jle 005FAE9B
005FA8EE |. 837D E8 00 cmp dword ptr [ebp-18]>,0; 假码中第一个“-”前部分的长度
005FA8F2 |. 0F8E A3050000 jle 005FAE9B
005FA8F8 |. 8B4D EC mov ecx, [ebp-14] ; 假码最后一个“-”前部分的长度
005FA8FB |. 2B4D E8 sub ecx, [ebp-18] ; 得到注册码中第一个“-”(含)和最后一个“-”之间部分
005FA8FE |. 83E9 01 sub ecx, 1 ; 呵呵,这里有个-1(去掉第一个“-”)
005FA901 |. 51 push ecx ; /Arg3 注册码中第一个“-”(含)和最后一个“-”之间部分的长度
005FA902 |. 8B55 E8 mov edx, [ebp-18] ; |注册码中第一个“-”前的长度
005FA905 |. 83C2 01 add edx, 1 ; |
005FA908 |. 52 push edx ; |Arg2注册码中第一个“-”(含)前的长度
005FA909 |. 8D45 C8 lea eax, [ebp-38] ; |
005FA90C |. 50 push eax ; |Arg1
005FA90D |. 8B4D 0C mov ecx, [ebp+C] ; |
005FA910 |. E8 5B5AE3FF call 00430370 ; \PowerCmd.00430370
005FA915 |. C745 FC 00000>mov dword ptr [ebp-4],>
005FA91C |. 6A 00 push 0
005FA91E |. 6A 2D push 2D ;还有一个2D(“-”)
005FA920 |. 8D4D C8 lea ecx, [ebp-38]
005FA923 |. E8 B83DE3FF call 0042E6E0 ;对注册码格式的检测及假码中第一个“-”和第二个“-”之间部分长度
005FA928 |. 8945 C4 mov [ebp-3C], eax
005FA92B |. 8B4D E8 mov ecx, [ebp-18] ;假码中第一个“-”前部分的长度
005FA92E |. 8B55 C4 mov edx, [ebp-3C]
005FA931 |. 8D440A 01 lea eax, [edx+ecx+1] ;假码中第二个“-”前部分的长度
005FA935 |. 8945 C4 mov [ebp-3C], eax
005FA938 |. 837D E8 05 cmp dword ptr [ebp-18]> 5; 注册码第一个“-”前的部分的长度与5比较
005FA93C |. 0F85 4A050000 jnz 005FAE8C ;不相等就直接跳过让[EBP-D]不为零的环节了!
005FA942 |. 8B4D E8 mov ecx, [ebp-18] ;假码中第一个“-”前部分的长度
005FA945 |. 83C1 06 add ecx, 6 ;呵呵,猜猜这里为什么是 + 6
005FA948 |. 394D C4 cmp [ebp-3C], ecx ; 长度比较
005FA94B |. 0F85 3B050000 jnz 005FAE8C ;即第二个“-”之前的长度应该为第一个“-”前的长度+6
005FA951 |. 8B55 C4 mov edx, [ebp-3C] ;即第二个“-”之前的长度
005FA954 |. 83C2 06 add edx, 6
005FA957 |. 3955 EC cmp [ebp-14], edx ;(再+6 后的长度):假码最后一个“-”之前的长度
005FA95A |. 0F85 2C050000 jnz 005FAE8C ;不等就跳
005FA960 |. 8B45 E8 mov eax, [ebp-18] ;假码中第一个“-”前部分长度
005FA963 |. 50 push eax ; /Arg3
005FA964 |. 6A 00 push 0 ; |Arg2 = 00000000
005FA966 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FA96C |. 51 push ecx ; |Arg1
005FA96D |. 8B4D 0C mov ecx, [ebp+C] ; |
005FA970 |. E8 FB59E3FF call 00430370 ; \PowerCmd.00430370 对注册码格式的检测2
005FA975 |. C645 FC 01 mov byte ptr [ebp-4], >
005FA979 |. 8B55 C4 mov edx, [ebp-3C]
005FA97C |. 2B55 E8 sub edx, [ebp-18]
005FA97F |. 83EA 01 sub edx, 1
005FA982 |. 52 push edx ; /Arg3
005FA983 |. 8B45 E8 mov eax, [ebp-18] ; |
005FA986 |. 83C0 01 add eax, 1 ; |
005FA989 |. 50 push eax ; |Arg2
005FA98A |. 8D4D 8C lea ecx, [ebp-74] ; |
005FA98D |. 51 push ecx ; |Arg1
005FA98E |. 8B4D 0C mov ecx, [ebp+C] ; |
005FA991 |. E8 DA59E3FF call 00430370 ; \PowerCmd.00430370
005FA996 |. C645 FC 02 mov byte ptr [ebp-4], >
005FA99A |. 8B55 EC mov edx, [ebp-14]
005FA99D |. 2B55 C4 sub edx, [ebp-3C]
005FA9A0 |. 83EA 01 sub edx, 1
005FA9A3 |. 52 push edx ; /Arg3
005FA9A4 |. 8B45 C4 mov eax, [ebp-3C] ; |
005FA9A7 |. 83C0 01 add eax, 1 ; |
005FA9AA |. 50 push eax ; |Arg2
005FA9AB |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FA9B1 |. 51 push ecx ; |Arg1
005FA9B2 |. 8B4D 0C mov ecx, [ebp+C] ; |
005FA9B5 |. E8 B659E3FF call 00430370 ; \PowerCmd.00430370
005FA9BA |. C645 FC 03 mov byte ptr [ebp-4], >
005FA9BE |. 8B4D 0C mov ecx, [ebp+C]
005FA9C1 |. E8 1AA1E1FF call 00414AE0
005FA9C6 |. 2B45 EC sub eax, [ebp-14]
005FA9C9 |. 83E8 01 sub eax, 1
005FA9CC |. 50 push eax
005FA9CD |. 8D55 A8 lea edx, [ebp-58]
005FA9D0 |. 52 push edx
005FA9D1 |. 8B4D 0C mov ecx, [ebp+C]
005FA9D4 |. E8 875AE3FF call 00430460
005FA9D9 |. C645 FC 04 mov byte ptr [ebp-4], >
005FA9DD |. 8D8D 70FFFFFF lea ecx, [ebp-90]
005FA9E3 |. E8 F8A0E1FF call 00414AE0 ; 得到S1的长度
005FA9E8 |. 83F8 05 cmp eax, 5 ; 判断这里应该是注册码每段由5位组成!!!
005FA9EB |. 0F85 65040000 jnz 005FAE56
005FA9F1 |. 8D4D 8C lea ecx, [ebp-74]
005FA9F4 |. E8 E7A0E1FF call 00414AE0 ; 得到S2的长度
005FA9F9 |. 83F8 05 cmp eax, 5
005FA9FC |. 0F85 54040000 jnz 005FAE56
005FAA02 |. 8D8D 54FFFFFF lea ecx, [ebp-AC]
005FAA08 |. E8 D3A0E1FF call 00414AE0 ; 得到S3的长度
005FAA0D |. 83F8 05 cmp eax, 5
005FAA10 |. 0F85 40040000 jnz 005FAE56
005FAA16 |. 8D4D A8 lea ecx, [ebp-58]
005FAA19 |. E8 C2A0E1FF call 00414AE0 ; 得到S4的长度
005FAA1E |. 83F8 05 cmp eax, 5
005FAA21 |. 0F85 2F040000 jnz 005FAE56
005FAA27 |. 8D8D 70FFFFFF lea ecx, [ebp-90]
005FAA2D |. E8 2E3FE3FF call 0042E960
005FAA32 |. 8D4D 8C lea ecx, [ebp-74]
005FAA35 |. E8 263FE3FF call 0042E960
005FAA3A |. 8D8D 54FFFFFF lea ecx, [ebp-AC]
005FAA40 |. E8 1B3FE3FF call 0042E960
005FAA45 |. 8D4D A8 lea ecx, [ebp-58]
005FAA48 |. E8 133FE3FF call 0042E960
005FAA4D |. 6A 00 push 0 ; /Arg1 = 00000000
005FAA4F |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAA55 |. E8 36DDE0FF call 00408790 ; \PowerCmd.00408790
005FAA5A |. 0FB730 movzx esi, word ptr [eax>; 取第一段S1的第一位ASC
005FAA5D |. 6A 00 push 0 ; /Arg1 = 00000000
005FAA5F |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAA62 |. E8 29DDE0FF call 00408790 ; \PowerCmd.00408790
005FAA67 |. 0FB700 movzx eax, word ptr [eax>; 取第二段S2的第1位ASC
005FAA6A |. 03F0 add esi, eax ; 二者相加,设为Q1
005FAA6C |. 89B5 50FFFFFF mov [ebp-B0], esi
005FAA72 |. 6A 01 push 1 ; /Arg1 = 00000001
005FAA74 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAA7A |. E8 11DDE0FF call 00408790 ; \PowerCmd.00408790
005FAA7F |. 0FB730 movzx esi, word ptr [eax>; 取第一段S1的第2位ASC
005FAA82 |. 6A 01 push 1 ; /Arg1 = 00000001
005FAA84 |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAA87 |. E8 04DDE0FF call 00408790 ; \PowerCmd.00408790
005FAA8C |. 0FB708 movzx ecx, word ptr [eax>; 取第二段S1的第二位ASC
005FAA8F |. 03F1 add esi, ecx ; 二者相加,设为Q2
005FAA91 |. 89B5 44FFFFFF mov [ebp-BC], esi
005FAA97 |. 6A 02 push 2 ; /Arg1 = 00000002
005FAA99 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAA9F |. E8 ECDCE0FF call 00408790 ; \PowerCmd.00408790
005FAAA4 |. 0FB730 movzx esi, word ptr [eax>; 取第一段S1的第3位ASC
005FAAA7 |. 6A 02 push 2 ; /Arg1 = 00000002
005FAAA9 |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAAAC |. E8 DFDCE0FF call 00408790 ; \PowerCmd.00408790
005FAAB1 |. 0FB710 movzx edx, word ptr [eax>; 取第二段S2的第3位ASC
005FAAB4 |. 03F2 add esi, edx ; 二者相加,设为Q3
005FAAB6 |. 89B5 3CFFFFFF mov [ebp-C4], esi
005FAABC |. 6A 03 push 3 ; /Arg1 = 00000003
005FAABE |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAAC4 |. E8 C7DCE0FF call 00408790 ; \PowerCmd.00408790
005FAAC9 |. 0FB730 movzx esi, word ptr [eax>; 取第一段S1的第4位ASC
005FAACC |. 6A 03 push 3 ; /Arg1 = 00000003
005FAACE |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAAD1 |. E8 BADCE0FF call 00408790 ; \PowerCmd.00408790
005FAAD6 |. 0FB700 movzx eax, word ptr [eax>; 取第二段S2的第4位ASC
005FAAD9 |. 03F0 add esi, eax ; 二者相加,设为Q4
005FAADB |. 89B5 38FFFFFF mov [ebp-C8], esi
005FAAE1 |. 6A 04 push 4 ; /Arg1 = 00000004
005FAAE3 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAAE9 |. E8 A2DCE0FF call 00408790 ; \PowerCmd.00408790
005FAAEE |. 0FB730 movzx esi, word ptr [eax>; 取第一段S1的第5位ASC
005FAAF1 |. 6A 04 push 4 ; /Arg1 = 00000004
005FAAF3 |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAAF6 |. E8 95DCE0FF call 00408790 ; \PowerCmd.00408790
005FAAFB |. 0FB708 movzx ecx, word ptr [eax>; 取第二段S2的第5位ASC
005FAAFE |. 03F1 add esi, ecx ; 二者相加,设为Q5
005FAB00 |. 89B5 48FFFFFF mov [ebp-B8], esi ; Q5
005FAB06 |. 8B95 50FFFFFF mov edx, [ebp-B0] ; Q1
005FAB0C |. 0395 44FFFFFF add edx, [ebp-BC] ; Q1 + Q2
005FAB12 |. 0395 3CFFFFFF add edx, [ebp-C4] ; 和 + Q3
005FAB18 |. 0395 38FFFFFF add edx, [ebp-C8] ; (和 + Q3的)和 + Q4
005FAB1E |. 0395 48FFFFFF add edx, [ebp-B8] ; [(和 + Q3的)和 + Q4]的和 + Q5 ,设为N1
005FAB24 |. 8995 40FFFFFF mov [ebp-C0], edx ; N1
005FAB2A |. 6A 00 push 0 ; /Arg1 = 00000000
005FAB2C |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FAB32 |. E8 59DCE0FF call 00408790 ; \PowerCmd.00408790
005FAB37 |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第1位ASC
005FAB3A |. 6A 00 push 0 ; /Arg1 = 00000000
005FAB3C |. 8D4D A8 lea ecx, [ebp-58] ; |
005FAB3F |. E8 4CDCE0FF call 00408790 ; \PowerCmd.00408790
005FAB44 |. 0FB700 movzx eax, word ptr [eax>; 取第4段S4的第1位ASC
005FAB47 |. 03F0 add esi, eax ; 二者相加,设为P1
005FAB49 |. 89B5 50FFFFFF mov [ebp-B0], esi
005FAB4F |. 6A 01 push 1 ; /Arg1 = 00000001
005FAB51 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FAB57 |. E8 34DCE0FF call 00408790 ; \PowerCmd.00408790
005FAB5C |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第2位ASC
005FAB5F |. 6A 01 push 1 ; /Arg1 = 00000001
005FAB61 |. 8D4D A8 lea ecx, [ebp-58] ; |
005FAB64 |. E8 27DCE0FF call 00408790 ; \PowerCmd.00408790
005FAB69 |. 0FB708 movzx ecx, word ptr [eax>; 取第4段S4的第2位ASC
005FAB6C |. 03F1 add esi, ecx ; 二者相加,设为P2
005FAB6E |. 89B5 44FFFFFF mov [ebp-BC], esi
005FAB74 |. 6A 02 push 2 ; /Arg1 = 00000002
005FAB76 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FAB7C |. E8 0FDCE0FF call 00408790 ; \PowerCmd.00408790
005FAB81 |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第3位ASC
005FAB84 |. 6A 02 push 2 ; /Arg1 = 00000002
005FAB86 |. 8D4D A8 lea ecx, [ebp-58] ; |
005FAB89 |. E8 02DCE0FF call 00408790 ; \PowerCmd.00408790
005FAB8E |. 0FB710 movzx edx, word ptr [eax>; 取第4段S4的第3位ASC
005FAB91 |. 03F2 add esi, edx ; 二者相加,设为P3
005FAB93 |. 89B5 3CFFFFFF mov [ebp-C4], esi
005FAB99 |. 6A 03 push 3 ; /Arg1 = 00000003
005FAB9B |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FABA1 |. E8 EADBE0FF call 00408790 ; \PowerCmd.00408790
005FABA6 |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第4位ASC
005FABA9 |. 6A 03 push 3 ; /Arg1 = 00000003
005FABAB |. 8D4D A8 lea ecx, [ebp-58] ; |
005FABAE |. E8 DDDBE0FF call 00408790 ; \PowerCmd.00408790
005FABB3 |. 0FB700 movzx eax, word ptr [eax>; 取第4段S4的第4位ASC
005FABB6 |. 03F0 add esi, eax ; 二者相加,设为P4
005FABB8 |. 89B5 38FFFFFF mov [ebp-C8], esi
005FABBE |. 6A 04 push 4 ; /Arg1 = 00000004
005FABC0 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FABC6 |. E8 C5DBE0FF call 00408790 ; \PowerCmd.00408790
005FABCB |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第5位ASC
005FABCE |. 6A 04 push 4 ; /Arg1 = 00000004
005FABD0 |. 8D4D A8 lea ecx, [ebp-58] ; |
005FABD3 |. E8 B8DBE0FF call 00408790 ; \PowerCmd.00408790
005FABD8 |. 0FB708 movzx ecx, word ptr [eax>; 取第4段S4的第5位ASC
005FABDB |. 03F1 add esi, ecx ; 二者相加,设为P5
005FABDD |. 89B5 48FFFFFF mov [ebp-B8], esi ; P5
005FABE3 |. 8B95 50FFFFFF mov edx, [ebp-B0] ; P1
005FABE9 |. 0395 44FFFFFF add edx, [ebp-BC] ; P1+P2
005FABEF |. 0395 3CFFFFFF add edx, [ebp-C4] ; (和 + P3)
005FABF5 |. 0395 38FFFFFF add edx, [ebp-C8] ; (和 + P3)的和+ P4
005FABFB |. 0395 48FFFFFF add edx, [ebp-B8] ; [(和 + P3)的和+ P4 ]的和 + P5
005FAC01 |. 8995 4CFFFFFF mov [ebp-B4], edx ; 结果设为T1
005FAC07 |. 8B85 40FFFFFF mov eax, [ebp-C0] ; N1
005FAC0D |. 3B85 4CFFFFFF cmp eax, [ebp-B4] ; N1:T1
005FAC13 |. 75 04 jnz short 005FAC19 ; 不等就跳!即要注册成功,则N1必须T1
005FAC15 |. C645 F3 01 mov byte ptr [ebp-D], 1; ///注意这里的地址
005FAC19 |> 6A 00 push 0 ; /Arg1 = 00000000
005FAC1B |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAC21 |. E8 6ADBE0FF call 00408790 ; \PowerCmd.00408790
005FAC26 |. 0FB708 movzx ecx, word ptr [eax>; 取第1段S1的第1位ASC
005FAC29 |. 83F9 50 cmp ecx, 50 ; 与50(P)比较
005FAC2C |. 75 15 jnz short 005FAC43
005FAC2E |. 6A 01 push 1 ; /Arg1 = 00000001
005FAC30 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAC36 |. E8 55DBE0FF call 00408790 ; \PowerCmd.00408790
005FAC3B |. 0FB710 movzx edx, word ptr [eax>
005FAC3E |. 83FA 43 cmp edx, 43 ;与43(C)比较
005FAC41 |. 74 04 je short 005FAC47
005FAC43 |> C645 F3 00 mov byte ptr [ebp-D], >; 不等,这个地址会被置0
005FAC47 |> 6A 00 push 0 ; /Arg1 = 00000000
005FAC49 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FAC4F |. E8 3CDBE0FF call 00408790 ; \PowerCmd.00408790
005FAC54 |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第1位ASC
005FAC57 |. 6A 00 push 0 ; /Arg1 = 00000000
005FAC59 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAC5F |. E8 2CDBE0FF call 00408790 ; \PowerCmd.00408790
005FAC64 |. 0FB700 movzx eax, word ptr [eax>; 取第1段S1的第1位ASC
005FAC67 |. 03F0 add esi, eax ; 二者相加,设为Z1
005FAC69 |. 89B5 50FFFFFF mov [ebp-B0], esi
005FAC6F |. 6A 01 push 1 ; /Arg1 = 00000001
005FAC71 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FAC77 |. E8 14DBE0FF call 00408790 ; \PowerCmd.00408790
005FAC7C |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第2位ASC
005FAC7F |. 6A 01 push 1 ; /Arg1 = 00000001
005FAC81 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAC87 |. E8 04DBE0FF call 00408790 ; \PowerCmd.00408790
005FAC8C |. 0FB708 movzx ecx, word ptr [eax>; 取第1段S1的第2位ASC
005FAC8F |. 03F1 add esi, ecx ; 二者相加,设为Z2
005FAC91 |. 89B5 44FFFFFF mov [ebp-BC], esi
005FAC97 |. 6A 02 push 2 ; /Arg1 = 00000002
005FAC99 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FAC9F |. E8 ECDAE0FF call 00408790 ; \PowerCmd.00408790
005FACA4 |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第3位ASC
005FACA7 |. 6A 02 push 2 ; /Arg1 = 00000002
005FACA9 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FACAF |. E8 DCDAE0FF call 00408790 ; \PowerCmd.00408790
005FACB4 |. 0FB710 movzx edx, word ptr [eax>; 取第1段S1的第3位ASC
005FACB7 |. 03F2 add esi, edx ; 二者相加,设为Z3
005FACB9 |. 89B5 3CFFFFFF mov [ebp-C4], esi
005FACBF |. 6A 03 push 3 ; /Arg1 = 00000003
005FACC1 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FACC7 |. E8 C4DAE0FF call 00408790 ; \PowerCmd.00408790
005FACCC |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第4位ASC
005FACCF |. 6A 03 push 3 ; /Arg1 = 00000003
005FACD1 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FACD7 |. E8 B4DAE0FF call 00408790 ; \PowerCmd.00408790
005FACDC |. 0FB700 movzx eax, word ptr [eax>; 取第1段S1的第4位ASC
005FACDF |. 03F0 add esi, eax ; 二者相加,设为Z4
005FACE1 |. 89B5 38FFFFFF mov [ebp-C8], esi
005FACE7 |. 6A 04 push 4 ; /Arg1 = 00000004
005FACE9 |. 8D8D 54FFFFFF lea ecx, [ebp-AC] ; |
005FACEF |. E8 9CDAE0FF call 00408790 ; \PowerCmd.00408790
005FACF4 |. 0FB730 movzx esi, word ptr [eax>; 取第3段S3的第5位ASC
005FACF7 |. 6A 04 push 4 ; /Arg1 = 00000004
005FACF9 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FACFF |. E8 8CDAE0FF call 00408790 ; \PowerCmd.00408790
005FAD04 |. 0FB708 movzx ecx, word ptr [eax>; 取第1段S1的第5位ASC
005FAD07 |. 03F1 add esi, ecx ; 二者相加,设为Z5
005FAD09 |. 89B5 48FFFFFF mov [ebp-B8], esi ; Z5
005FAD0F |. 8B95 50FFFFFF mov edx, [ebp-B0] ; 同上一样,累加!
005FAD15 |. 0395 44FFFFFF add edx, [ebp-BC]
005FAD1B |. 0395 3CFFFFFF add edx, [ebp-C4]
005FAD21 |. 0395 38FFFFFF add edx, [ebp-C8]
005FAD27 |. 0395 48FFFFFF add edx, [ebp-B8] ; 累加的结果设为R1
005FAD2D |. 8995 40FFFFFF mov [ebp-C0], edx
005FAD33 |. 6A 00 push 0 ; /Arg1 = 00000000
005FAD35 |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAD38 |. E8 53DAE0FF call 00408790 ; \PowerCmd.00408790
005FAD3D |. 0FB730 movzx esi, word ptr [eax>; 取第2段S2的第1位ASC
005FAD40 |. 6A 00 push 0 ; /Arg1 = 00000000
005FAD42 |. 8D4D A8 lea ecx, [ebp-58] ; |
005FAD45 |. E8 46DAE0FF call 00408790 ; \PowerCmd.00408790
005FAD4A |. 0FB700 movzx eax, word ptr [eax>; 取第4段S4的第1位ASC
005FAD4D |. 03F0 add esi, eax ; 二者相加,设为V1
005FAD4F |. 89B5 50FFFFFF mov [ebp-B0], esi
005FAD55 |. 6A 01 push 1 ; /Arg1 = 00000001
005FAD57 |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAD5A |. E8 31DAE0FF call 00408790 ; \PowerCmd.00408790
005FAD5F |. 0FB730 movzx esi, word ptr [eax>; 取第2段S2的第2位ASC
005FAD62 |. 6A 01 push 1 ; /Arg1 = 00000001
005FAD64 |. 8D4D A8 lea ecx, [ebp-58] ; |
005FAD67 |. E8 24DAE0FF call 00408790 ; \PowerCmd.00408790
005FAD6C |. 0FB708 movzx ecx, word ptr [eax>; 取第4段S4的第2位ASC
005FAD6F |. 03F1 add esi, ecx ; 二者相加,设为V2
005FAD71 |. 89B5 44FFFFFF mov [ebp-BC], esi
005FAD77 |. 6A 02 push 2 ; /Arg1 = 00000002
005FAD79 |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAD7C |. E8 0FDAE0FF call 00408790 ; \PowerCmd.00408790
005FAD81 |. 0FB730 movzx esi, word ptr [eax>; 取第2段S2的第3位ASC
005FAD84 |. 6A 02 push 2 ; /Arg1 = 00000002
005FAD86 |. 8D4D A8 lea ecx, [ebp-58] ; |
005FAD89 |. E8 02DAE0FF call 00408790 ; \PowerCmd.00408790
005FAD8E |. 0FB710 movzx edx, word ptr [eax>; 取第4段S4的第3位ASC
005FAD91 |. 03F2 add esi, edx ; 二者相加,设为V3
005FAD93 |. 89B5 3CFFFFFF mov [ebp-C4], esi
005FAD99 |. 6A 03 push 3 ; /Arg1 = 00000003
005FAD9B |. 8D4D 8C lea ecx, [ebp-74] ; |
005FAD9E |. E8 EDD9E0FF call 00408790 ; \PowerCmd.00408790
005FADA3 |. 0FB730 movzx esi, word ptr [eax>; 取第2段S2的第4位ASC
005FADA6 |. 6A 03 push 3 ; /Arg1 = 00000003
005FADA8 |. 8D4D A8 lea ecx, [ebp-58] ; |
005FADAB |. E8 E0D9E0FF call 00408790 ; \PowerCmd.00408790
005FADB0 |. 0FB700 movzx eax, word ptr [eax>; 取第4段S4的第4位ASC
005FADB3 |. 03F0 add esi, eax ; 二者相加,设为V4
005FADB5 |. 89B5 38FFFFFF mov [ebp-C8], esi
005FADBB |. 6A 04 push 4 ; /Arg1 = 00000004
005FADBD |. 8D4D 8C lea ecx, [ebp-74] ; |
005FADC0 |. E8 CBD9E0FF call 00408790 ; \PowerCmd.00408790
005FADC5 |. 0FB730 movzx esi, word ptr [eax>; 取第2段S2的第5位ASC
005FADC8 |. 6A 04 push 4 ; /Arg1 = 00000004
005FADCA |. 8D4D A8 lea ecx, [ebp-58] ; |
005FADCD |. E8 BED9E0FF call 00408790 ; \PowerCmd.00408790
005FADD2 |. 0FB708 movzx ecx, word ptr [eax>; 取第4段S4的第5位ASC
005FADD5 |. 03F1 add esi, ecx ; 二者相加,设为V5
005FADD7 |. 89B5 48FFFFFF mov [ebp-B8], esi ; V5
005FADDD |. 8B95 50FFFFFF mov edx, [ebp-B0]
005FADE3 |. 0395 44FFFFFF add edx, [ebp-BC]
005FADE9 |. 0395 3CFFFFFF add edx, [ebp-C4]
005FADEF |. 0395 38FFFFFF add edx, [ebp-C8]
005FADF5 |. 0395 48FFFFFF add edx, [ebp-B8]
005FADFB |. 8995 4CFFFFFF mov [ebp-B4], edx ; 同上一样,累加!得到的结果设为W1
005FAE01 |. 8B85 40FFFFFF mov eax, [ebp-C0]
005FAE07 |. 3B85 4CFFFFFF cmp eax, [ebp-B4] ; R1:W1
005FAE0D |. 7D 04 jge short 005FAE13 ; 不小于就跳
005FAE0F |. C645 F3 00 mov byte ptr [ebp-D], 0; 还是这个地址!!!
005FAE13 |> 6A 02 push 2 ; /Arg1 = 00000002
005FAE15 |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAE1B |. E8 70D9E0FF call 00408790 ; \PowerCmd.00408790
005FAE20 |. 0FB708 movzx ecx, word ptr [eax>; S1的第3位
005FAE23 |. 83F9 4D cmp ecx, 4D ; 与4D(M)比较
005FAE26 |. 75 2A jnz short 005FAE52 ; 不等就跳
005FAE28 |. 6A 03 push 3 ; /Arg1 = 00000003
005FAE2A |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAE30 |. E8 5BD9E0FF call 00408790 ; \PowerCmd.00408790
005FAE35 |. 0FB710 movzx edx, word ptr [eax>
005FAE38 |. 83FA 44 cmp edx, 44 '与44(D)比较
005FAE3B |. 75 15 jnz short 005FAE52
005FAE3D |. 6A 04 push 4 ; /Arg1 = 00000004
005FAE3F |. 8D8D 70FFFFFF lea ecx, [ebp-90] ; |
005FAE45 |. E8 46D9E0FF call 00408790 ; \PowerCmd.00408790
005FAE4A |. 0FB700 movzx eax, word ptr [eax>
005FAE4D |. 83F8 41 cmp eax, 41 ;与41(A)比较
005FAE50 |. 74 04 je short 005FAE56
005FAE52 |> C645 F3 00 mov byte ptr [ebp-D], 0; 跳到这里来,呵呵!还记得这个地址吗?也可以在这里爆破
005FAE56 |> C645 FC 03 mov byte ptr [ebp-4], 3
005FAE5A |. 8D4D A8 lea ecx, [ebp-58]
005FAE5D |. E8 DE7CE0FF call 00402B40
005FAE62 |. C645 FC 02 mov byte ptr [ebp-4], >
005FAE66 |. 8D8D 54FFFFFF lea ecx, [ebp-AC]
005FAE6C |. E8 CF7CE0FF call 00402B40
005FAE71 |. C645 FC 01 mov byte ptr [ebp-4], >
005FAE75 |. 8D4D 8C lea ecx, [ebp-74]
005FAE78 |. E8 C37CE0FF call 00402B40
005FAE7D |. C645 FC 00 mov byte ptr [ebp-4], >; ?
005FAE81 |. 8D8D 70FFFFFF lea ecx, [ebp-90]
005FAE87 |. E8 B47CE0FF call 00402B40
005FAE8C |> C745 FC FFFFF>mov dword ptr [ebp-4],>
005FAE93 |. 8D4D C8 lea ecx, [ebp-38]
005FAE96 |. E8 A57CE0FF call 00402B40
005FAE9B |> 8A4D F3 mov cl, [ebp-D] ; 又是它,很好的爆破点哦
005FAE9E |. 880D 14A17000 mov [70A114], cl ; 传说中的全局变量?
005FAEA4 |. 8A45 F3 mov al, [ebp-D] ; 还是它!
005FAEA7 |. 8B4D F4 mov ecx, [ebp-C]
005FAEAA |. 64:890D 00000>mov fs:[0], ecx
005FAEB1 |. 59 pop ecx
005FAEB2 |. 5E pop esi
005FAEB3 |. 8B4D E4 mov ecx, [ebp-1C]
005FAEB6 |. 33CD xor ecx, ebp
005FAEB8 |. E8 FF27E2FF call 0041D6BC
005FAEBD |. 8BE5 mov esp, ebp
005FAEBF |. 5D pop ebp
005FAEC0 \. C3 retn
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
=============================================================================================================
关于:
005FC8A0 /$ 55 push ebp
005FC8A1 |. 8BEC mov ebp, esp
005FC8A3 |. 51 push ecx
005FC8A4 |. C745 FC 00000>mov dword ptr [ebp-4], 0
005FC8AB |. 0FB605 14A170>movzx eax, byte ptr [70A114] ; ///在哪里?在哪里见过你?你的样子我觉得好熟悉
005FC8B2 |. 85C0 test eax, eax
005FC8B4 |. 74 2A je short 005FC8E0 ; 跳向未注册用户
005FC8B6 |. B9 D8A07000 mov ecx, 0070A0D8
005FC8BB |. E8 80CCE0FF call 00409540
005FC8C0 |. 50 push eax
005FC8C1 |. 68 B0126900 push 006912B0
005FC8C6 |. 8B4D 08 mov ecx, [ebp+8]
005FC8C9 |. 51 push ecx
005FC8CA |. E8 D14AE3FF call 004313A0
005FC8CF |. 83C4 0C add esp, 0C
005FC8D2 |. 8B55 FC mov edx, [ebp-4]
005FC8D5 |. 83CA 01 or edx, 1
005FC8D8 |. 8955 FC mov [ebp-4], edx
005FC8DB |. 8B45 08 mov eax, [ebp+8]
005FC8DE |. EB 19 jmp short 005FC8F9
005FC8E0 |> 68 D4126900 push 006912D4 ; /未注册用户
005FC8E5 |. 8B4D 08 mov ecx, [ebp+8] ; |
005FC8E8 |. E8 D354E0FF call 00401DC0 ; \PowerCmd.00401DC0
005FC8ED |. 8B45 FC mov eax, [ebp-4]
省略部分代码
===================================================================================================================
////////////////////////////////////////////////// 总结: ///////////////////////////////////////////////
(一)爆破点:
我们看看这里:
(注册部分)
005FAE9B |> 8A4D F3 mov cl, [ebp-D] ;让我欢喜让我忧的[ebp-D]
005FAE9E |. 880D 14A17000 mov [70A114], cl ; 传说中的全局变量?
再看这里:
(about部分)
005FC8AB |. 0FB605 14A170>movzx eax, byte ptr [70A114] ; 还记得这个地址[70A114]吗?
005FC8B2 |. 85C0 test eax, eax
005FC8B4 |. 74 2A je short 005FC8E0 ; 跳向未注册用户
所以说,如果要爆破的话,关键就在[ebp-D],呵呵!
至于在哪里爆破,相信大家都已经很清楚了!
------------------------------------------------------------------------------------------------
(二)算法总结:
1.与用户名无关(貌似和serial也无关)
2.由3位“-”将20位注册码平分为4部分
即注册码形如XXXXX-XXXXX-XXXXX-XXXXX,分别设4部分为S1、S2、S3、S4;
3.注册成功须满足:
S1固定为:pcdma(不区分大小写,程序自动转换为大写);
S1各位ASC累加值和 + S2各位ASC累加值和 = S3各位ASC累加值和 + S4各位ASC累加值和
且
S1各位ASC累加值和 + S3各位ASC累加值和 >= S2各位ASC累加值和 + S4各位ASC累加值和
////////////////////////////////////////////////////////////////////////////////////////////////
因此,完全可以构造N组注册码;比如 pcmda-45678-qdneb-34567
pcmda-88888-qdneb-77777
pcmda-99999-qdneb-88888
呵呵,聪明的你一定看出来这组注册码的规律了!
注册信息保存在HKEY_CURRENT_USER\Software\PowerCmd
"Serial"=dword:4d2eeee5 ///这个好像删除都可以
"Name"="我爱我的祖国!"
"Key"="pcmda-99999-qdneb-88888"
运行后会在PowerCmd.ini里[Register]项下看见注册信息。
二: 关于注册码的格式和检测:
这里值得一提的是对注册码的格式推测和判断
1.关于连字符“-”
005FA8C3 |. 6A 2D push 2D ;2D(“-”)
005FA8D2 |. 6A 2D push 2D ; 这里有一个2D(“-”)
005FA91E |. 6A 2D push 2D ;还有一个2D(“-”)
推测注册码应该有连字符“-”;而且共push了3次,可能意味着有3个“-”当然开始只是猜测而已。
2.非连字符部分
005FA8B8 |. 83F8 17 cmp eax, 17 ;推测注册码长度应该是23位
如果有3个“-”的情况成立的话,那么注册码非连字符部分应该有23-3=20位。正好被平均分成4部分。
好,我们接着往下看
3.是否被均分为4部分?
先看这里:
005FA8AC |. C645 F3 00 MOV BYTE PTR SS:[EBP-D],0 ;注意看这里,很关键的0
005FA8B0 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
005FA8B3 |. E8 28A2E1FF CALL PowerCmd.00414AE0
005FA8B8 |. 83F8 17 CMP EAX,17 ;注册码的长度是23位吗?
005FA8BB |. 0F85 DA050000 JNZ PowerCmd.005FAE9B ;不是的话,那么看看跳往 哪里了?
接着看这里:
005FA938 |. 837D E8 05 cmp dword ptr [ebp-18]>; 第一个“-”之前的注册码长度:5
005FA93C |. 0F85 4A050000 jnz 005FAE8C
005FA942 |. 8B4D E8 mov ecx, [ebp-18]
005FA945 |. 83C1 06 add ecx, 6 ;注意这里的6
005FA948 |. 394D C4 cmp [ebp-3C], ecx ; 长度比较
005FA94B |. 0F85 3B050000 jnz 005FAE8C
005FA951 |. 8B55 C4 mov edx, [ebp-3C]
005FA954 |. 83C2 06 add edx, 6 ;还有这里的6
005FA957 |. 3955 EC cmp [ebp-14], edx
005FA95A |. 0F85 2C050000 jnz 005FAE8C
再看这里:
05FA9E3 |. E8 F8A0E1FF call 00414AE0 ; 得到S1的长度
005FA9E8 |. 83F8 05 cmp eax, 5 ; 判断这里应该是注册码每段由5位组成
005FA9EB |. 0F85 65040000 jnz 005FAE56
005FA9F1 |. 8D4D 8C lea ecx, [ebp-74]
005FA9F4 |. E8 E7A0E1FF call 00414AE0 ; 得到S2的长度
005FA9F9 |. 83F8 05 cmp eax, 5 ;同上
005FA9FC |. 0F85 54040000 jnz 005FAE56
005FAA02 |. 8D8D 54FFFFFF lea ecx, [ebp-AC]
005FAA08 |. E8 D3A0E1FF call 00414AE0 ; 得到S3的长度
005FAA0D |. 83F8 05 cmp eax, 5 ;同上
005FAA10 |. 0F85 40040000 jnz 005FAE56
005FAA16 |. 8D4D A8 lea ecx, [ebp-58]
005FAA19 |. E8 C2A0E1FF call 00414AE0 ; 得到S4的长度
005FAA1E |. 83F8 05 cmp eax, 5 ;同上
005FAA21 |. 0F85 2F040000 jnz 005FAE56
还有:
005FA8C1 |. 6A 00 PUSH 0
005FA8C3 |. 6A 2D PUSH 2D ;这里的“-”
005FA8C5 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
005FA8C8 |. E8 133EE3FF CALL PowerCmd.0042E6E0
005FA8CD |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
005FA8D0 |. 6A 01 PUSH 1
005FA8D2 |. 6A 2D PUSH 2D ;还有个“-”
005FA8D4 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
005FA8D7 |. E8 043EE3FF CALL PowerCmd.0042E6E0
005FA8DC |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
005FA8DF |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
005FA8E2 |. 83C0 01 ADD EAX,1
005FA8E5 |. 3945 EC CMP DWORD PTR SS:[EBP-14],EAX
005FA8E8 |. 0F8E AD050000 JLE PowerCmd.005FAE9B ;这里有一个
005FA8EE |. 837D E8 00 CMP DWORD PTR SS:[EBP-18],0
005FA8F2 |. 0F8E A3050000 JLE PowerCmd.005FAE9B ;这还有一个,
跳向:
005FAE9B |> \8A4D F3 MOV CL,BYTE PTR SS:[EBP-D] ;直接跳到这里来了,而这里的这里已经被005FA8AC处的MOV BYTE PTR SS:[EBP-D],0 为0,结果就不必说了
005FAE9E |. 880D 14A17000 MOV BYTE PTR DS:[70A114],CL ;全局变量
005FAEA4 |. 8A45 F3 MOV AL,BYTE PTR SS:[EBP-D] ;AL也被赋值为0了
因此,从上面的内容来看,除了注册码长度为23位外,注册码还必须含有3个“-”,余下的20位被3个“-”平均分成4等分。
其实,验证一下就知道我们的推测对不对,呵呵!
改变下注册码形式:
分别用1个“-”、2个“-”、3个“-”输出3组注册码
1234567890a-cdefghijklm
1234567-90abcdefgh-jklm
12345-7890a-cdefg-ijklm输入进去,
结果表明我们的推测是成立的。
注册码格式检测1:
0042E6E0 /$ 0FB74424 04 MOVZX EAX,WORD PTR SS:[ESP+4] ; "-"
0042E6E5 |. 807C24 08 00 CMP BYTE PTR SS:[ESP+8],0 ; !
0042E6EA |. 6A 01 PUSH 1
0042E6EC |. 8D5424 0C LEA EDX,DWORD PTR SS:[ESP+C]
0042E6F0 |. 894424 0C MOV DWORD PTR SS:[ESP+C],EAX ; “-”(2D)
0042E6F4 |. 74 0A JE SHORT PowerCmd.0042E700
0042E6F6 |. 6A FF PUSH -1
0042E6F8 |. 52 PUSH EDX
0042E6F9 |. E8 42F8FFFF CALL PowerCmd.0042DF40 ; 注册码检测1-2 得到注册码(已比较)/【未比较】的部分的长度,也决定着下面条件跳转是否成立
0042E6FE |. EB 08 JMP SHORT PowerCmd.0042E708
0042E700 |> 6A 00 PUSH 0 ; |Arg2 = 00000000
0042E702 |. 52 PUSH EDX ; |Arg1
0042E703 |. E8 08F7FDFF CALL PowerCmd.0040DE10 ; 注册码格式检测1-1 这个CALL里,EAX的值决定着下面的跳转
0042E708 |> 83F8 FF CMP EAX,-1 ;
0042E70B |. 75 02 JNZ SHORT PowerCmd.0042E70F
0042E70D |. 0BC0 OR EAX,EAX
0042E70F \> C2 0800 RETN 8
注册码检测1-1:
0040DE10 /$ 55 PUSH EBP
0040DE11 |. 8BEC MOV EBP,ESP
0040DE13 |. 83EC 10 SUB ESP,10
0040DE16 |. 894D F0 MOV DWORD PTR SS:[EBP-10],ECX
0040DE19 |. 837D 10 00 CMP DWORD PTR SS:[EBP+10],0
0040DE1D |. 75 13 JNZ SHORT PowerCmd.0040DE32
0040DE1F |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0040DE22 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
0040DE25 |. 3B48 14 CMP ECX,DWORD PTR DS:[EAX+14]
0040DE28 |. 77 08 JA SHORT PowerCmd.0040DE32
0040DE2A |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
0040DE2D |. E9 B1000000 JMP PowerCmd.0040DEE3
0040DE32 |> 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10]
0040DE35 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
0040DE38 |. 3B42 14 CMP EAX,DWORD PTR DS:[EDX+14] ; 假码长度、假码中第一个“-”和最后一个“-”之间部分的长度【不同CALL调用时有所不同】
0040DE3B |. 0F83 9F000000 JNB PowerCmd.0040DEE0
0040DE41 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0040DE44 |. 8B51 14 MOV EDX,DWORD PTR DS:[ECX+14] ; 同上
0040DE47 |. 2B55 0C SUB EDX,DWORD PTR SS:[EBP+C]
0040DE4A |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ; 同上
0040DE4D |. 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
0040DE50 |. 3B45 FC CMP EAX,DWORD PTR SS:[EBP-4]
0040DE53 |. 0F87 87000000 JA PowerCmd.0040DEE0
0040DE59 |. 8B4D 10 MOV ECX,DWORD PTR SS:[EBP+10]
0040DE5C |. 83E9 01 SUB ECX,1
0040DE5F |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] ; 同上
0040DE62 |. 2BD1 SUB EDX,ECX
0040DE64 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
0040DE67 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0040DE6A |. E8 E149FFFF CALL PowerCmd.00402850
0040DE6F |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
0040DE72 |. 8D1448 LEA EDX,DWORD PTR DS:[EAX+ECX*2]
0040DE75 |. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX ; 假码、假码第一和最后“-”之间的部分【不同的CALL调用时有不同】
0040DE78 |. EB 1C JMP SHORT PowerCmd.0040DE96
0040DE7A |> 8B45 F8 /MOV EAX,DWORD PTR SS:[EBP-8]
0040DE7D |. 2B45 F4 |SUB EAX,DWORD PTR SS:[EBP-C]
0040DE80 |. D1F8 |SAR EAX,1
0040DE82 |. 83C0 01 |ADD EAX,1
0040DE85 |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
0040DE88 |. 2BC8 |SUB ECX,EAX
0040DE8A |. 894D FC |MOV DWORD PTR SS:[EBP-4],ECX
0040DE8D |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
0040DE90 |. 83C2 02 |ADD EDX,2
0040DE93 |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
0040DE96 |> 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; “-”
0040DE99 |. 50 |PUSH EAX ; /Arg3
0040DE9A |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4] ; |
0040DE9D |. 51 |PUSH ECX ; |Arg2
0040DE9E |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C] ; |
0040DEA1 |. 52 |PUSH EDX ; |Arg1
0040DEA2 |. E8 A9590000 |CALL PowerCmd.00413850 ; \PowerCmd.00413850
0040DEA7 |. 83C4 0C |ADD ESP,0C
0040DEAA |. 8945 F8 |MOV DWORD PTR SS:[EBP-8],EAX ; 上面CALL决定了EAX是否为0
0040DEAD |. 837D F8 00 |CMP DWORD PTR SS:[EBP-8],0
0040DEB1 |. 74 2D |JE SHORT PowerCmd.0040DEE0 ; EAX为0,则跳出循环
0040DEB3 |. 8B45 10 |MOV EAX,DWORD PTR SS:[EBP+10]
0040DEB6 |. 50 |PUSH EAX ; /Arg3
0040DEB7 |. 8B4D 08 |MOV ECX,DWORD PTR SS:[EBP+8] ; |“-”(2D)
0040DEBA |. 51 |PUSH ECX ; |Arg2
0040DEBB |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8] ; |假码中剩余部分(包含“-”)
0040DEBE |. 52 |PUSH EDX ; |Arg1
0040DEBF |. E8 1C65FFFF |CALL PowerCmd.004043E0 ; \PowerCmd.004043E0
0040DEC4 |. 83C4 0C |ADD ESP,0C
0040DEC7 |. 85C0 |TEST EAX,EAX
0040DEC9 |. 75 13 |JNZ SHORT PowerCmd.0040DEDE
0040DECB |. 8B4D F0 |MOV ECX,DWORD PTR SS:[EBP-10]
0040DECE |. E8 7D49FFFF |CALL PowerCmd.00402850
0040DED3 |. 8B4D F8 |MOV ECX,DWORD PTR SS:[EBP-8] ; 假码中剩余部分(包含第一个“-”)
0040DED6 |. 2BC8 |SUB ECX,EAX
0040DED8 |. D1F9 |SAR ECX,1
0040DEDA |. 8BC1 |MOV EAX,ECX
0040DEDC |. EB 05 |JMP SHORT PowerCmd.0040DEE3
0040DEDE |>^ EB 9A \JMP SHORT PowerCmd.0040DE7A
0040DEE0 |> 83C8 FF OR EAX,FFFFFFFF
0040DEE3 |> 8BE5 MOV ESP,EBP
0040DEE5 |. 5D POP EBP
0040DEE6 \. C2 0C00 RETN 0C
注册码检测1-2:
0042DF40 /$ 51 PUSH ECX
0042DF41 |. 55 PUSH EBP
0042DF42 |. 57 PUSH EDI
0042DF43 |. 8B7C24 18 MOV EDI,DWORD PTR SS:[ESP+18]
0042DF47 |. 8BE9 MOV EBP,ECX
0042DF49 |. 8B45 14 MOV EAX,DWORD PTR SS:[EBP+14] ; 假码长度
0042DF4C |. 896C24 08 MOV DWORD PTR SS:[ESP+8],EBP
0042DF50 |. 85FF TEST EDI,EDI
0042DF52 |. 75 14 JNZ SHORT PowerCmd.0042DF68
0042DF54 |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
0042DF58 |. 3BC8 CMP ECX,EAX
0042DF5A |. 0F83 BB000000 JNB PowerCmd.0042E01B
0042DF60 |. 5F POP EDI
0042DF61 |. 8BC1 MOV EAX,ECX
0042DF63 |. 5D POP EBP
0042DF64 |. 59 POP ECX
0042DF65 |. C2 0C00 RETN 0C
0042DF68 |> 53 PUSH EBX
0042DF69 |. 56 PUSH ESI
0042DF6A |. 3BF8 CMP EDI,EAX
0042DF6C |. 0F87 A4000000 JA PowerCmd.0042E016
0042DF72 |. 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
0042DF76 |. 2BC7 SUB EAX,EDI ; 假码长度-[EDI]
0042DF78 |. 3BC8 CMP ECX,EAX
0042DF7A |. 73 02 JNB SHORT PowerCmd.0042DF7E
0042DF7C |. 8BC1 MOV EAX,ECX
0042DF7E |> 8B4D 18 MOV ECX,DWORD PTR SS:[EBP+18]
0042DF81 |. 894C24 20 MOV DWORD PTR SS:[ESP+20],ECX ; 假码长度
0042DF85 |. 83F9 08 CMP ECX,8 ; 假码长度与8比较
0042DF88 |. 8D4D 04 LEA ECX,DWORD PTR SS:[EBP+4]
0042DF8B |. 894C24 1C MOV DWORD PTR SS:[ESP+1C],ECX
0042DF8F |. 72 02 JB SHORT PowerCmd.0042DF93
0042DF91 |. 8B09 MOV ECX,DWORD PTR DS:[ECX] ; 假码
0042DF93 |> 8B5C24 18 MOV EBX,DWORD PTR SS:[ESP+18] ; “-”(2D)
0042DF97 |. 8D3441 LEA ESI,DWORD PTR DS:[ECX+EAX*2] ; 假码最后一位
0042DF9A |. 8D9B 00000000 LEA EBX,DWORD PTR DS:[EBX] ; “-”(2D)
0042DFA0 |> 0FB703 /MOVZX EAX,WORD PTR DS:[EBX] ; “-”(2D)
0042DFA3 |. 66:3906 |CMP WORD PTR DS:[ESI],AX ; “-”(2D)依次与(倒序的)假码比较
0042DFA6 |. 75 4C |JNZ SHORT PowerCmd.0042DFF4 ; 不等就跳
0042DFA8 |. 8BD7 |MOV EDX,EDI
0042DFAA |. 8BCB |MOV ECX,EBX
0042DFAC |. 8BC6 |MOV EAX,ESI
0042DFAE |. 85FF |TEST EDI,EDI
0042DFB0 |. 76 13 |JBE SHORT PowerCmd.0042DFC5
0042DFB2 |> 66:8B28 |/MOV BP,WORD PTR DS:[EAX] ; 已比较过的假码的第一位
0042DFB5 |. 66:3B29 ||CMP BP,WORD PTR DS:[ECX] ; “-”(2D)
0042DFB8 |. 75 26 ||JNZ SHORT PowerCmd.0042DFE0
0042DFBA |. 83C0 02 ||ADD EAX,2
0042DFBD |. 83C1 02 ||ADD ECX,2
0042DFC0 |. 83EA 01 ||SUB EDX,1
0042DFC3 |.^ 75 ED |\JNZ SHORT PowerCmd.0042DFB2
0042DFC5 |> 837C24 20 08 |CMP DWORD PTR SS:[ESP+20],8 ; 假码长度与8比较
0042DFCA |. 72 38 |JB SHORT PowerCmd.0042E004
0042DFCC |. 8B5424 1C |MOV EDX,DWORD PTR SS:[ESP+1C]
0042DFD0 |. 8B0A |MOV ECX,DWORD PTR DS:[EDX] ; 假码
0042DFD2 |. 8BC6 |MOV EAX,ESI ; ESI(已比较过的假码)
0042DFD4 |. 5E |POP ESI
0042DFD5 |. 5B |POP EBX
0042DFD6 |. 2BC1 |SUB EAX,ECX ; 倒序比较后还未比较的注册码部分
0042DFD8 |. 5F |POP EDI
0042DFD9 |. D1F8 |SAR EAX,1 ; 得到注册码未比较的部分的长度
0042DFDB |. 5D |POP EBP
0042DFDC |. 59 |POP ECX
0042DFDD |. C2 0C00 |RETN 0C
0042DFE0 |> 66:8BC5 |MOV AX,BP
0042DFE3 |. 66:3B01 |CMP AX,WORD PTR DS:[ECX]
0042DFE6 |. 1BC9 |SBB ECX,ECX
0042DFE8 |. 83E1 FE |AND ECX,FFFFFFFE
0042DFEB |. 83C1 01 |ADD ECX,1
0042DFEE |.^ 74 D5 |JE SHORT PowerCmd.0042DFC5
0042DFF0 |. 8B6C24 10 |MOV EBP,DWORD PTR SS:[ESP+10]
0042DFF4 |> 8BCD |MOV ECX,EBP
0042DFF6 |. E8 5548FDFF |CALL PowerCmd.00402850
0042DFFB |. 3BF0 |CMP ESI,EAX ; 已经比较过的假码 与 整个假码比较
0042DFFD |. 74 17 |JE SHORT PowerCmd.0042E016 ; 全部比较过后则跳出循环,也就决定了下面的EAX的值
0042DFFF |. 83EE 02 |SUB ESI,2
0042E002 |.^ EB 9C \JMP SHORT PowerCmd.0042DFA0
0042E004 |> 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
0042E008 |. 8BC6 MOV EAX,ESI
0042E00A |. 5E POP ESI
0042E00B |. 5B POP EBX
0042E00C |. 2BC1 SUB EAX,ECX
0042E00E |. 5F POP EDI
0042E00F |. D1F8 SAR EAX,1
0042E011 |. 5D POP EBP
0042E012 |. 59 POP ECX
0042E013 |. C2 0C00 RETN 0C
0042E016 |> 5E POP ESI
0042E017 |. 83C8 FF OR EAX,FFFFFFFF
0042E01A |. 5B POP EBX
0042E01B |> 5F POP EDI
0042E01C |. 5D POP EBP
0042E01D |. 59 POP ECX
0042E01E \. C2 0C00 RETN 0C
注册码格式检测2:
00430370 /$ 6A FF PUSH -1
00430372 |. 68 78496000 PUSH PowerCmd.00604978
00430377 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0043037D |. 50 PUSH EAX
0043037E |. 83EC 24 SUB ESP,24
00430381 |. A1 58316D00 MOV EAX,DWORD PTR DS:[6D3158] ;
00430386 |. 33C4 XOR EAX,ESP
00430388 |. 894424 20 MOV DWORD PTR SS:[ESP+20],EAX
0043038C |. 53 PUSH EBX
0043038D |. 55 PUSH EBP
0043038E |. 56 PUSH ESI
0043038F |. 57 PUSH EDI
00430390 |. A1 58316D00 MOV EAX,DWORD PTR DS:[6D3158]
00430395 |. 33C4 XOR EAX,ESP
00430397 |. 50 PUSH EAX
00430398 |. 8D4424 38 LEA EAX,DWORD PTR SS:[ESP+38]
0043039C |. 64:A3 0000000>MOV DWORD PTR FS:[0],EAX
004303A2 |. 8B4424 50 MOV EAX,DWORD PTR SS:[ESP+50]
004303A6 |. 8B7424 48 MOV ESI,DWORD PTR SS:[ESP+48]
004303AA |. 8B5424 4C MOV EDX,DWORD PTR SS:[ESP+4C]
004303AE |. 33DB XOR EBX,EBX
004303B0 |. 8BF9 MOV EDI,ECX
004303B2 |. 8B4F 14 MOV ECX,DWORD PTR DS:[EDI+14] ; 注册码长度
004303B5 |. 895C24 14 MOV DWORD PTR SS:[ESP+14],EBX
004303B9 |. 83F8 FF CMP EAX,-1 ; 注册码中第一个“-”和最后一个“-”之间部分的长度、注册码第一个“-”前的长度【不同的CALL调用时有不同。下同】
004303BC |. 75 04 JNZ SHORT PowerCmd.004303C2
004303BE |. 8BC1 MOV EAX,ECX
004303C0 |. 2BC2 SUB EAX,EDX
004303C2 |> 8D2C02 LEA EBP,DWORD PTR DS:[EDX+EAX] ; 假码最后一个“-”(含)之前部分的长度
004303C5 |. 3BE9 CMP EBP,ECX ; 假码最后一个“-”(含)之前部分的长度:假码长度
004303C7 |. 76 04 JBE SHORT PowerCmd.004303CD
004303C9 |. 8BC1 MOV EAX,ECX
004303CB |. 2BC2 SUB EAX,EDX
004303CD |> 3BD1 CMP EDX,ECX ; 注册码中第一个“-”(含)前的长度:假码长度
004303CF |. 76 0F JBE SHORT PowerCmd.004303E0
004303D1 |. A1 643E6D00 MOV EAX,DWORD PTR DS:[6D3E64]
004303D6 |. 50 PUSH EAX ; /Arg1 => 006A3F60
004303D7 |. 8BCE MOV ECX,ESI ; |
004303D9 |. E8 E219FDFF CALL PowerCmd.00401DC0 ; \PowerCmd.00401DC0
004303DE |. EB 53 JMP SHORT PowerCmd.00430433
004303E0 |> 50 PUSH EAX ; /注册码中第一个“-”和最后一个“-”之间部分的长度
004303E1 |. 33C9 XOR ECX,ECX ; |
004303E3 |. 52 PUSH EDX ; |Arg2
004303E4 |. 66:894C24 24 MOV WORD PTR SS:[ESP+24],CX ; |
004303E9 |. BD 07000000 MOV EBP,7 ; |
004303EE |. 57 PUSH EDI ; |Arg1
004303EF |. 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24] ; |
004303F3 |. 896C24 3C MOV DWORD PTR SS:[ESP+3C],EBP ; |假码最后一个“-”(含)之前部分的长度
004303F7 |. 895C24 38 MOV DWORD PTR SS:[ESP+38],EBX ; |
004303FB |. E8 8024FDFF CALL PowerCmd.00402880 ; \PowerCmd.00402880
00430400 |. 6A FF PUSH -1 ; /Arg3 = FFFFFFFF
00430402 |. 53 PUSH EBX ; |Arg2
00430403 |. 8D4424 20 LEA EAX,DWORD PTR SS:[ESP+20] ; |
00430407 |. 33D2 XOR EDX,EDX ; |
00430409 |. 896E 18 MOV DWORD PTR DS:[ESI+18],EBP ; |
0043040C |. 895E 14 MOV DWORD PTR DS:[ESI+14],EBX ; |
0043040F |. 50 PUSH EAX ; |Arg1
00430410 |. 8BCE MOV ECX,ESI ; |
00430412 |. 895C24 4C MOV DWORD PTR SS:[ESP+4C],EBX ; |
00430416 |. 66:8956 04 MOV WORD PTR DS:[ESI+4],DX ; |
0043041A |. E8 6124FDFF CALL PowerCmd.00402880 ; \PowerCmd.00402880
0043041F |. 837C24 30 08 CMP DWORD PTR SS:[ESP+30],8
00430424 |. 72 0D JB SHORT PowerCmd.00430433
00430426 |. 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C] ; 注册码中第一个“-”和最后一个“-”之间部分
0043042A |. 51 PUSH ECX
0043042B |. E8 9BD2FEFF CALL PowerCmd.0041D6CB
00430430 |. 83C4 04 ADD ESP,4
00430433 |> 8BC6 MOV EAX,ESI
00430435 |. 8B4C24 38 MOV ECX,DWORD PTR SS:[ESP+38]
00430439 |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00430440 |. 59 POP ECX
00430441 |. 5F POP EDI
00430442 |. 5E POP ESI
00430443 |. 5D POP EBP
00430444 |. 5B POP EBX
00430445 |. 8B4C24 20 MOV ECX,DWORD PTR SS:[ESP+20]
00430449 |. 33CC XOR ECX,ESP
0043044B |. E8 6CD2FEFF CALL PowerCmd.0041D6BC
00430450 |. 83C4 30 ADD ESP,30
00430453 \. C2 0C00 RETN 0C
其实算法很简单,对注册码格式也是一眼就猜出来了。关键在检测上花了点时间来验证我的推测是否是正确的。希望本文能对大家有点启发,那也不枉我辛苦地码字了。呵呵
最后上图:
|
评分
-
查看全部评分
|