天涯思君不可忘,不识张郎是张郎 --- EmEditor v12.0.4的注册算法分析
天涯思君不可忘,不识张郎是张郎 --- EmEditor v12.0.4的注册算法分析“EmEditor is a fast, lightweight, yet extendable, easy-to-use text editor for Windows. Both native 64-bit and 32-bit builds are available!ZDnet.com’s Ed Burnette called EmEditor the “World’s fastest text editor.” Read full review.The text editor supports powerful macros, Unicode, and very large files. Emurasoft’s timeless mission is to achieve our clients’ needs and wants by listening to them with empathy and expertise. We value timely customer support, and are honored to have distinguished users, including major corporations, educational institutions, institutions of the European Union, ministries of Japan, and governments from all over the world.”
--------------摘自其官网
EmEditor一直是我喜欢的文本编辑器之一。近日看到官网升至V14.XXX了,顺手做了这个V12.0.4的算法分析,想必不会影响到最新版吧?(为毛不是最新版的破文?呵呵,你懂的,不解释哈)。
闲话少叙,我们直接来到:
一、太极初传柔克刚
6DC1634B FF75 08 push dword ptr
6DC1634E FF15 A030C26D call dword ptr [<&KERNEL32.lstrlenW>] ; kernel32.lstrlenW
6DC16354 83F8 1D cmp eax, 1D ; 输入的注册码为29位吗?
6DC16357 74 0A je short 6DC16363
6DC16359 B8 02000000 mov eax, 2 ; 当道时见中山狼
6DC1635E E9 5F0C0000 jmp 6DC16FC2
6DC16363 83A5 18FDFFFF 0>and dword ptr , 0
6DC1636A EB 0D jmp short 6DC16379
6DC1636C 8B85 18FDFFFF mov eax, dword ptr
6DC16372 40 inc eax
6DC16373 8985 18FDFFFF mov dword ptr , eax
6DC16379 83BD 18FDFFFF 1>cmp dword ptr , 1D ; 29位注册码的初级检测完毕了吗?
6DC16380 0F8D BB000000 jge 6DC16441
6DC16386 8B85 18FDFFFF mov eax, dword ptr
6DC1638C 40 inc eax
6DC1638D 99 cdq
6DC1638E B9 06000000 mov ecx, 6 ; 排难解纷当六强
6DC16393 F7F9 idiv ecx
6DC16395 85D2 test edx, edx
6DC16397 75 21 jnz short 6DC163BA
6DC16399 8B85 18FDFFFF mov eax, dword ptr
6DC1639F 8B4D 08 mov ecx, dword ptr
6DC163A2 0FB70441 movzx eax, word ptr ; 很显然,注册码中的6的倍数位上应该为“-”
6DC163A6 83F8 2D cmp eax, 2D ; 是"-" 吗?
6DC163A9 74 0A je short 6DC163B5
6DC163AB B8 02000000 mov eax, 2
6DC163B0 E9 0D0C0000 jmp 6DC16FC2
6DC163B5 E9 82000000 jmp 6DC1643C
6DC163BA 8B85 18FDFFFF mov eax, dword ptr
6DC163C0 8B4D 08 mov ecx, dword ptr ; 输入的注册码!
6DC163C3 66:8B0441 mov ax, word ptr ; 依次每一位!
6DC163C7 66:8985 FAFCFFF>mov word ptr , ax
6DC163CE 0FB785 FAFCFFFF movzx eax, word ptr
6DC163D5 83F8 41 cmp eax, 41 ; 合法的注册码必须是大写字母,不能是小写的字母
6DC163D8 7C 0C jl short 6DC163E6
6DC163DA 0FB785 FAFCFFFF movzx eax, word ptr
6DC163E1 83F8 5A cmp eax, 5A
6DC163E4 7E 18 jle short 6DC163FE
6DC163E6 0FB785 FAFCFFFF movzx eax, word ptr
6DC163ED 83F8 32 cmp eax, 32
6DC163F0 7C 30 jl short 6DC16422 ; 若是数字则不得小于2
6DC163F2 0FB785 FAFCFFFF movzx eax, word ptr
6DC163F9 83F8 39 cmp eax, 39
6DC163FC 7F 24 jg short 6DC16422
6DC163FE 0FB785 FAFCFFFF movzx eax, word ptr
6DC16405 83F8 4F cmp eax, 4F ; 不能为大写字母O
6DC16408 74 18 je short 6DC16422
6DC1640A 0FB785 FAFCFFFF movzx eax, word ptr
6DC16411 83F8 49 cmp eax, 49 ; 不能为大写字母 I
6DC16414 74 0C je short 6DC16422
6DC16416 C785 F4FCFFFF 0>mov dword ptr , 1 ; 初步检测合格的标志
6DC16420 EB 07 jmp short 6DC16429
6DC16422 83A5 F4FCFFFF 0>and dword ptr , 0
6DC16429 83BD F4FCFFFF 0>cmp dword ptr , 0
6DC16430 75 0A jnz short 6DC1643C
6DC16432 B8 02000000 mov eax, 2 ; 恩断义绝紫衫王!
6DC16437 E9 860B0000 jmp 6DC16FC2
6DC1643C^ E9 2BFFFFFF jmp 6DC1636C
6DC16441 837D 0C 0C cmp dword ptr , 0C
6DC16445 75 15 jnz short 6DC1645C
6DC16447 8B45 08 mov eax, dword ptr
6DC1644A 0FB700 movzx eax, word ptr
6DC1644D 83F8 42 cmp eax, 42 ; 第一位是 "B" 吗?
6DC16450 74 0A je short 6DC1645C ; 君子可欺之以方
6DC16452 B8 02000000 mov eax, 2
6DC16457 E9 660B0000 jmp 6DC16FC2
6DC1645C 837D 0C 0A cmp dword ptr , 0A
6DC16460 75 15 jnz short 6DC16477
6DC16462 8B45 08 mov eax, dword ptr
6DC16465 0FB700 movzx eax, word ptr
6DC16468 83F8 41 cmp eax, 41
6DC1646B 74 0A je short 6DC16477
6DC1646D B8 02000000 mov eax, 2
6DC16472 E9 4B0B0000 jmp 6DC16FC2
6DC16477 837D 0C 0C cmp dword ptr , 0C
6DC1647B 75 26 jnz short 6DC164A3
6DC1647D 8D85 70FFFFFF lea eax, dword ptr ; 表1: 《九阳神功》
6DC16483 8985 C0FDFFFF mov dword ptr , eax
6DC16489 8D85 F0FDFFFF lea eax, dword ptr ; 表2:《九阴真经》
6DC1648F 8985 00FFFFFF mov dword ptr , eax
6DC16495 8D85 20FFFFFF lea eax, dword ptr ; 表3:《武穆遗书》
6DC1649B 8985 A8FEFFFF mov dword ptr , eax
6DC164A1 EB 24 jmp short 6DC164C7
6DC164A3 8D85 78FDFFFF lea eax, dword ptr
6DC164A9 8985 C0FDFFFF mov dword ptr , eax
6DC164AF 8D85 C0FEFFFF lea eax, dword ptr
6DC164B5 8985 00FFFFFF mov dword ptr , eax
6DC164BB 8D85 30FEFFFF lea eax, dword ptr
6DC164C1 8985 A8FEFFFF mov dword ptr , eax
6DC164C7 83A5 14FDFFFF 0>and dword ptr , 0
6DC164CE EB 0D jmp short 6DC164DD
6DC164D0 8B85 14FDFFFF mov eax, dword ptr
6DC164D6 40 inc eax
6DC164D7 8985 14FDFFFF mov dword ptr , eax
6DC164DD 83BD 14FDFFFF 0>cmp dword ptr , 0B
6DC164E4 7D 24 jge short 6DC1650A
6DC164E6 8B85 14FDFFFF mov eax, dword ptr 附取输入的注册码的特定的11位字符的顺序为:
00CFD17409 00 00 00 03 00 00 00 00 00 00 00 04 00 00 00..............
00CFD1840A 00 00 00 05 00 00 00 01 00 00 00 06 00 00 00.............
00CFD19402 00 00 00 08 00 00 00 07 00 00 00 .........即第10、4、1、5、11、6、2、7、3、9、8位。
好吧,我们现在基本上已了解了注册码最基本的信息了吧!
二、青翼出没一笑扬
我们接着往下走,直到这里。嗯?这是什么的节奏?
6DC1655A 8985 88FCFFFF mov dword ptr , eax
6DC16560 83A5 90FCFFFF 0>and dword ptr , 0
6DC16567 83A5 8CFCFFFF 0>and dword ptr , 0
6DC1656E C785 94FCFFFF 0>mov dword ptr , 67452301 ; 倚天长剑飞寒铓
6DC16578 C785 98FCFFFF 8>mov dword ptr , EFCDAB89
6DC16582 C785 9CFCFFFF F>mov dword ptr , 98BADCFE
6DC1658C C785 A0FCFFFF 7>mov dword ptr , 10325476
6DC16596 8B85 88FCFFFF mov eax, dword ptr
(省略部分代码)
6DC16A0E C1E8 10 shr eax, 10
6DC16A11 25 FF000000 and eax, 0FF
6DC16A16 8B8D B4FBFFFF mov ecx, dword ptr
6DC16A1C 88840D E6FCFFFF mov byte ptr , al
6DC16A23 8B85 F8FBFFFF mov eax, dword ptr
6DC16A29 8B8485 94FCFFFF mov eax, dword ptr [ebp+eax*4-36C>
6DC16A30 C1E8 18 shr eax, 18
6DC16A33 25 FF000000 and eax, 0FF
(省略部分代码)
6DC16AEF EB 10 jmp short 6DC16B01浮槎北溟海茫茫,谁送冰舸来仙乡?MD5情意深~~~,不悔仲子逾我墙!
三、群雄归心约三章
好吧,前面的青翼蝠王带给我们MD5后的结果了,接下来呢?奇谋秘计梦一场,针其膏兮药其肓。我们接着看程序会干些什么事?
章一剥极而复参九阳
6DC16B41 8B85 10FDFFFF mov eax, dword ptr
6DC16B47 40 inc eax
6DC16B48 8985 10FDFFFF mov dword ptr , eax
6DC16B4E 83BD 10FDFFFF 0>cmp dword ptr , 7 ; 参数7
6DC16B55 7D 22 jge short 6DC16B79
6DC16B57 8B85 10FDFFFF mov eax, dword ptr
6DC16B5D 8B8485 04FFFFFF mov eax, dword ptr ; 查表A,决定取MD5结果的哪7位字符
6DC16B64 8B8D 10FDFFFF mov ecx, dword ptr
6DC16B6A 66:8B4445 B0 mov ax, word ptr
6DC16B6F 66:89844D 4CFDF>mov word ptr , ax
6DC16B77^ EB C8 jmp short 6DC16B41附取7位字符串的表A:
00CFD2B403 00 00 00 0A 00 00 00 01 00 00 00 15 00 00 00.............
00CFD2C406 00 00 00 1F 00 00 00 1C 00 00 00 .........即取MD5字符串的第4、11、2、22、7、32、29位,得到一个7位字符组成的数值....
6DC16B84 6A 00 push 0
6DC16B86 8D85 4CFDFFFF lea eax, dword ptr ; 七侠聚会乐未央
6DC16B8C 50 push eax
6DC16B8D E8 15140000 call 6DC17FA7 ; 转化为16进制的数值形式
(省略部分代码)
6DC16BB7 83BD 54FBFFFF 0>cmp dword ptr , 5
6DC16BBE 0F8D DB000000 jge 6DC16C9F
6DC16BC4 B8 05000000 mov eax, 5 ; 循环5次哦!
6DC16BC9 2B85 54FBFFFF sub eax, dword ptr
6DC16BCF 48 dec eax
6DC16BD0 8985 40FBFFFF mov dword ptr , eax
6DC16BD6 B8 20000000 mov eax, 20
6DC16BDB 85C0 test eax, eax
6DC16BDD 75 09 jnz short 6DC16BE8
6DC16BDF 83A5 50FBFFFF 0>and dword ptr , 0
6DC16BE6 EB 63 jmp short 6DC16C4B
6DC16BE8 83BD 40FBFFFF 0>cmp dword ptr , 0
6DC16BEF 75 0C jnz short 6DC16BFD
6DC16BF1 C785 50FBFFFF 0>mov dword ptr , 1
6DC16BFB EB 4E jmp short 6DC16C4B
6DC16BFD C785 44FBFFFF 2>mov dword ptr , 20
6DC16C07 C785 48FBFFFF 0>mov dword ptr , 1
6DC16C11 EB 0D jmp short 6DC16C20
6DC16C13 8B85 48FBFFFF mov eax, dword ptr
6DC16C19 40 inc eax
6DC16C1A 8985 48FBFFFF mov dword ptr , eax
6DC16C20 8B85 48FBFFFF mov eax, dword ptr
6DC16C26 3B85 40FBFFFF cmp eax, dword ptr
6DC16C2C 73 11 jnb short 6DC16C3F
6DC16C2E 8B85 44FBFFFF mov eax, dword ptr
6DC16C34 C1E0 05 shl eax, 5
6DC16C37 8985 44FBFFFF mov dword ptr , eax
6DC16C3D^ EB D4 jmp short 6DC16C13
6DC16C3F 8B85 44FBFFFF mov eax, dword ptr ; 5次循环,每次的值不同(基本上就是5个常数)
6DC16C45 8985 50FBFFFF mov dword ptr , eax
6DC16C4B 8B85 3CFBFFFF mov eax, dword ptr ; 16进制的数值形式
6DC16C51 31D2 xor edx, edx
6DC16C53 F7B5 50FBFFFF div dword ptr ; 每循环一次结果(初始为转化的数值)除以不同的常数
6DC16C59 8985 4CFBFFFF mov dword ptr , eax ; 商
6DC16C5F 8B85 3CFBFFFF mov eax, dword ptr
6DC16C65 31D2 xor edx, edx
6DC16C67 F7B5 50FBFFFF div dword ptr ;余数(初始为转化的数值)对常数取余
6DC16C6D 8995 3CFBFFFF mov dword ptr , edx ; 结果保存起来 ,进行下一轮运算
6DC16C73 8B85 4CFBFFFF mov eax, dword ptr
6DC16C79 31D2 xor edx, edx
6DC16C7B B9 20000000 mov ecx, 20
6DC16C80 F7F1 div ecx ; 商 mod 20H
6DC16C82 8B85 54FBFFFF mov eax, dword ptr
6DC16C88 8B8D C0FDFFFF mov ecx, dword ptr ; 表1
6DC16C8E 66:8B0C51 mov cx, word ptr ; 根据 mod 20H的余数来查表
6DC16C92 66:898C45 9CFEF>mov word ptr , cx ; 结果保存起来
6DC16C9A^ E9 0BFFFFFF jmp 6DC16BAA查表得到的5个字符相连的字符串,下面重新排序
6DC16CCE 8B85 0CFDFFFF mov eax, dword ptr
6DC16CD4 8B8485 1CFDFFFF mov eax, dword ptr ; 重新排序的表A-1
6DC16CDB 8B8D 0CFDFFFF mov ecx, dword ptr
6DC16CE1 66:8B8445 9CFEF>mov ax, word ptr
6DC16CE9 66:89844D 64FFF>mov word ptr , ax附:重新排序的表A-1:
00CFD0CC03 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00.............
00CFD0DC02 00 00 00 ...即取第4、11、2、22、7、32、29位重新排序。
6DC16CFE 8D85 64FFFFFF lea eax, dword ptr ; 重新排序后的5位字符串
6DC16D04 50 push eax
6DC16D05 8B45 08 mov eax, dword ptr ; 输入的注册码第3-4-5部分
6DC16D08 83C0 18 add eax, 18
6DC16D0B 50 push eax
6DC16D0C E8 C1170000 call 6DC184D2 ; 显然排序后的5位与输入的注册码第3部分进行比较
6DC16D11 83C4 0C add esp, 0C
6DC16D14 85C0 test eax, eax
6DC16D16 74 0A je short 6DC16D22
6DC16D18 B8 02000000 mov eax, 2 ; 祸起萧墙破金汤
6DC16D1D E9 A0020000 jmp 6DC16FC2
章二:百尺高塔任回翔
6DC16D38 83BD 08FDFFFF 0>cmp dword ptr , 7 ; 第二次也是取7位
6DC16D3F 7D 22 jge short 6DC16D63
6DC16D41 8B85 08FDFFFF mov eax, dword ptr
6DC16D47 8B8485 30FDFFFF mov eax, dword ptr ; 第二次取7位顺序表B
(省略部分代码)
6DC16D6C 6A 10 push 10
6DC16D6E 6A 00 push 0
6DC16D70 8D85 4CFDFFFF lea eax, dword ptr ; 取的7位的字符串附:再取7位的顺序表B
00CFD0E008 00 00 00 02 00 00 00 1E 00 00 00 12 00 00 00............
00CFD0F01D 00 00 00 09 00 00 00 1A 00 00 00 .......32...即取第9、3、31、19、30、10、27位。
6DC16E27^\EB D4 jmp short 6DC16DFD
6DC16E29 8B85 28FBFFFF mov eax, dword ptr ; 又是那5个常数依次出现
6DC16E2F 8985 34FBFFFF mov dword ptr , eax
6DC16E35 8B85 20FBFFFF mov eax, dword ptr ; 流程与前面的相同,这里不再赘述。
6DC16E3B 31D2 xor edx, edx
6DC16E3D F7B5 34FBFFFF div dword ptr
(省略部分代码)
6DC16E78 66:8B0C51 mov cx, word ptr ; 注意这里的表不同了。表2(不公开)
6DC16E7C 66:898C45 9CFEF>mov word ptr , cx
6DC16E84^ E9 0BFFFFFF jmp 6DC16D94
(省略部分代码)
6DC16EBE 8B8485 ACFEFFFF mov eax, dword ptr ; 得到的5位字符串重新排序的表B-1
6DC16EC5 8B8D 04FDFFFF mov ecx, dword ptr
6DC16ECB 66:8B8445 9CFEF>mov ax, word ptr ; 重新排序,保存
6DC16ED3 66:89844D 64FFF>mov word ptr , ax附:5位字符串重新排序的表B-1:
00CFD25C01 00 00 00 04 00 00 00 02 00 00 00 03 00 00 00............
00CFD26C00 00 00 00 ....即按第2、5、3、4、1位重新排序。
6DC16EE8 8D85 64FFFFFF lea eax, dword ptr ; 重新排序后的5位字符串
6DC16EEE 50 push eax
6DC16EEF 8B45 08 mov eax, dword ptr ; 输入的注册码
6DC16EF2 83C0 24 add eax, 24
6DC16EF5 50 push eax ; 注册码第4部分
6DC16EF6 E8 D7150000 call 6DC184D2
6DC16EFB 83C4 0C add esp, 0C
6DC16EFE 85C0 test eax, eax
6DC16F00 74 05 je short 6DC16F07 ; 四女同舟何所望
6DC16F02 B8 02000000 mov eax, 2
章三:夭矫三松郁青苍
6DC16F1D 83BD 00FDFFFF 0>cmp dword ptr , 7 ; 第三次取7位
6DC16F24 7D 22 jge short 6DC16F48
6DC16F26 8B85 00FDFFFF mov eax, dword ptr
6DC16F2C 8B8485 5CFDFFFF mov eax, dword ptr ; 第三次取7位时的表
6DC16F33 8B8D 00FDFFFF mov ecx, dword ptr
6DC16F39 66:8B4445 B0 mov ax, word ptr
6DC16F3E 66:89844D 4CFDF>mov word ptr , ax
6DC16F46^ EB C8 jmp short 6DC16F10附 第三次取7位顺序的表C
00CFD10C17 00 00 00 0E 00 00 00 05 00 00 00 19 00 00 00............
00CFD11C14 00 00 00 07 00 00 00 16 00 00 00 .........6DC16F55 8D85 4CFDFFFF lea eax, dword ptr
6DC16F5B 50 push eax
6DC16F5C E8 46100000 call 6DC17FA7 ; 转为16进制数值
(省略部分代码)
6DC16F8D 0F8D DB000000 jge 6DC1706E
6DC16F93 B8 05000000 mov eax, 5 ; 循环5次
6DC16F98 2B85 1CFBFFFF sub eax, dword ptr
6DC16F9E 48 dec eax
(省略部分代码)
6DC1700C^ EB D4 jmp short 6DC16FE2
6DC1700E 8B85 0CFBFFFF mov eax, dword ptr ; 同样是这5个常数依次出现
(省略部分代码)
6DC1705D 66:8B0C51 mov cx, word ptr ; 表3 查表3
6DC17061 66:898C45 9CFEF>mov word ptr , cx ; 结果保存起来
6DC17069^ E9 0BFFFFFF jmp 6DC16F79
6DC1706E 31C0 xor eax, eax附 5位重新排序的表C-1:
00CFD22004 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00.............
00CFD23001 00 00 00 ...即按照5、1、3、4、2的顺序重新排序。
6DC170DB E8 F2130000 call 6DC184D2 ; 重新排序的5位字符串:输入的注册码的第5部分
6DC170E0 83C4 0C add esp, 0C
6DC170E3 85C0 test eax, eax
6DC170E5 74 0A je short 6DC170F1 ; 穷发十载泛归航
6DC170E7 B8 02000000 mov eax, 2 ; 爱你恨你,问君知否?
6DC170EC^ E9 D1FEFFFF jmp 6DC16FC2
6DC170F1 8B45 08 mov eax, dword ptr 这里看起来篇幅较长,但实际上就是3次取值运算,查表,重新排序,得到3组各5位字符的字符串。详情可参见下面的第五部分。
四、箫长琴短衣流黄
6DC170F4 0FB740 06 movzx eax, word ptr ; 输入的注册码的第4位
6DC170F8 83F8 5A cmp eax, 5A ; 是大写字母“Z”吗?
6DC170FB 74 0A je short 6DC17107
6DC170FD B8 03000000 mov eax, 3 ; 猜猜不是会咋样?
6DC17102^ E9 BBFEFFFF jmp 6DC16FC2
6DC17107 8B45 08 mov eax, dword ptr
6DC1710A 66:8B40 04 mov ax, word ptr ; 输入的注册码的第3位
6DC1710E 66:8985 BCFDFFF>mov word ptr , ax
6DC17115 0FB785 BCFDFFFF movzx eax, word ptr
6DC1711C 83F8 4D cmp eax, 4D ; 是 "M"吗?
6DC1711F 74 46 je short 6DC17167
6DC17121 0FB785 BCFDFFFF movzx eax, word ptr
6DC17128 83F8 45 cmp eax, 45 ; 是 "E"吗?
6DC1712B 74 3A je short 6DC17167
6DC1712D 0FB785 BCFDFFFF movzx eax, word ptr
6DC17134 83F8 48 cmp eax, 48 ; 是 "H"吗?
6DC17137 74 2E je short 6DC17167
6DC17139 0FB785 BCFDFFFF movzx eax, word ptr
6DC17140 83F8 4E cmp eax, 4E ; 是 "N"吗?
6DC17143 74 22 je short 6DC17167
6DC17145 0FB785 BCFDFFFF movzx eax, word ptr
6DC1714C 83F8 41 cmp eax, 41 ; 是 "A"吗?
6DC1714F 74 16 je short 6DC17167
6DC17151 0FB785 BCFDFFFF movzx eax, word ptr
6DC17158 83F8 42 cmp eax, 42 ; 是 "B"吗?
6DC1715B 74 0A je short 6DC17167 ; 天下英雄莫能当
6DC1715D B8 03000000 mov eax, 3 ;东西永隔如参商
6DC17162^ E9 5BFEFFFF jmp 6DC16FC2
6DC17167^ E9 53FEFFFF jmp 6DC16FBF
6DC1716C C3 retn这么明显,没啥可说的了~~
五、不识张郎是张郎
对于7位的数值是如何运算的,我们举个例子来演示。
首先我们介绍下每次5个循环中出现的5个常数,分别是:
第一次循环中为100000H;
第二次循环中为8000H;
第三次循环中为400H;
第四次循环中为20H;
第五次循环中为1H;
我们就以计算第3部分注册码为例(第4、第5部分流程一样,具体参数不同而已)。
比如注册码前11位 BUNZZ-GGLHY --》换序---》得到HZBZY-UGNLG,进行MD5。
MD5(HZBZY-UGNLG)=b183c28176a3a48342b7010a9bbe369b
取MD5后的第 4、11、2、22、7、32、29位,得到字符串“3a118b3”,转化为16进制数值为3a118b3
第一次循环中:
3a118b3 / 100000H=3a
3a % 20H...1A(=26) 查表,第27位-(A)
3a118b3% 100000H=118b3 (余数进行下一循环)
第二次循环中:
118B3(第一次循环中的余数) / 8000H = 2
2 % 20H =2 查表,第3位(W)
118B3 % 8000H = 18B3(余数进行下一循环)
第三次循环中:
18b3 (第二次循环中的余数)/400H=6
6 %20H =6 ,查表第7位(2)
18b3 % 400H = b3(余数进行下一循环)
第四次循环中:
B3 (第三次循环中的余数)/20h=5
5 %20H =5 ,查表第6位(S)
B3 % 20h = 13H (余数进行下一循环)
第五次循环中:
13H(第四次循环中的余数) /1 =13h
13h % 20H =13h,查表第20位(C)
13%1 =0,不再进行计算
因此得到一个5位的字符串:AW2SC
按照第4、2、5、1、3的顺序重新排序,成为:SWCA2 ------------》即为注册码的第3部分。
简言之,按照不同顺序取MD5中的7位字符,作为一个7位数的16进制数值进行运算,商的结果查表,余数继续循环运算~~,直至5次运算完毕
六、秘笈兵书此中藏
好吧,行文至此,小结下算法:
0.注册码与用户名无关。
1.注册码的形式为:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX,长度为29位。字母为大写,且不能有数字0、1,也不能有大写字母I、O。(4个“-”将注册码分为5部分。)
2.注册码第1位为"B";
第3位可以是大写字母“A”、“B”、“E”、“H”、“M”、“N”中的任意1位;
第4位固定为“Z”;
3.注册码的前11位按照第10、4、1、5、11、6、2、7、3、9、8位的顺序组成新的字符串,进行标准MD5运算。
4.分别计算剩余的3组Key:
a。取MD5后的第 4、11、2、22、7、32、29位,得到一个7位的数值,运算、查表1,结果按照第4、2、5、1、3的顺序重新排序。---》注册码的第3部分
b。取MD5后的第9、3、31、19、30、10、27位,得到一个7位的数值,运算、查表2,结果按照第2、5、3、4、1的顺序重新排序。---》注册码的第4部分
c。取MD5后的第24、15、6、26、21、8、23位,得到一个7位的数值,运算、查表3,结果按照第5、1、3、4、2的顺序重新排序。---》注册码的第5部分
(7位数值的运算参见前面第五部分“不识张郎是张郎”。)
附表1,用于生成注册码第3部分时的查表: 《九阳神功》!
4BWEPS2D5T3Y8NFQJLUCVHZ6RMAK7G9X
附表2(用于生成注册码第4部分时的查表):《九阴真经》!
请原谅,为某种原因,我不在这里公开表2
附表3(用于生成注册码第5部分时的查表):《武穆遗书》!
请原谅,同样我也不在这里公开表3,不解释~~
顺便附Key一组:
**** Hidden Message *****
KG源码就不放了~~~{:2_153:},你懂的!
不是流行有图有 真-相 吗?传图,立照为证~~哈哈
**** Hidden Message *****
PS:本文首发于飘云阁论坛,转载请注明。谢谢!
暗算 好东西,支持一下~
em很好用
依照国际惯例,自己的沙发自己坐! {:lol:}{:shy:}G大分析好精彩,章节题目有创意~~! 本帖最后由 GGLHY 于 2014-3-18 17:39 编辑
theend 发表于 2014-3-18 17:25
G大分析好精彩,章节题目有创意~~!
哈哈!{:handshake:}前段时间刚看完《天龙八部》,近日又重看《倚天屠龙记》。暂借其章回目一用而已~~
希望金老不会找我要版权哈{:titter:}
写得很精彩,就是没附件,哈哈 G大分析好精彩!!!膜拜!!!! 好文章!膜拜GG大神!
强悍 {:victory:} 来膜拜G大了,支持!!! {:victory:}分析好精彩