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 时不时会发生,我怀疑是暗装,再次不做讨论。下面给出注册机下载
我先拿了沙发再仔细看帖{:5_188:} Zixue 发表于 2015-11-22 10:54
我先拿了沙发再仔细看帖
巡查辛苦了 板凳都遭抢了。 LYQingYe 发表于 2015-11-22 10:55
巡查辛苦了
{:5_188:} 分内事,这里最后的BUG判断注册码错误其实是因为还有一步,两层算法算出注册码后,会加密注入码,然后会取加密后的一定长度内容,以这个长度的内容来判断是否真码 Zixue 发表于 2015-11-22 10:59
分内事,这里最后的BUG判断注册码错误其实是因为还有一步,两层算法算出注册码后,会加密注入 ...
并没有,以我见解,在V4.0以后的版本就没有注册机这一算法,那个BUG的解决办法就是,分析他的加密过程,然后把我们计算好的注册码 加密,打入注册表。这样才不会错 。 LYQingYe 发表于 2015-11-22 11:04
并没有,以我见解,在V4.0以后的版本就没有注册机这一算法,那个BUG的解决办法就是,分析他的加密过程, ...
{:5_184:}我以前搞过这个程序,和你这个过程差不多,区别就是我楼上说的那样,还有就是这个玩意貌似时不时的偶尔又是未注册,不知道是不是电脑问题= = Zixue 发表于 2015-11-22 11:09
我以前搞过这个程序,和你这个过程差不多,区别就是我楼上说的那样,还有就是这个玩意貌似时 ...
只要一次正确就不会错了 其实算法很简单。。。但是为什么看你的帖子突然感觉好复杂{:5_184:} 阿超 发表于 2015-11-22 11:26
其实算法很简单。。。但是为什么看你的帖子突然感觉好复杂
具体看版本,我这是最新