飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 10273|回复: 14

[原创] EmEditor v14.x.x的注册码验证简析

  [复制链接]
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2014-7-11 07:45:15 | 显示全部楼层 |阅读模式
                                                    EmEditor v14.x.x的注册码验证简析(非算法篇)

    算法部分与v12.x 、13.x有了一些改变,这里不做分析。


                                                                                   一、注册的关键返回值与注册信息的保存

    注册时,我们可以很轻松到达这里:
    1. 6DBD40D3    E8 CD1C0000     call emeddlgs.6DBD5DA5                //算法验证的核心CALL~~~
    2. 6DBD40D8    8BF0            mov esi,eax
    3. 6DBD40DA    8975 78         mov dword ptr ss:[ebp+0x78],esi
    4. 6DBD40DD    83FE 01         cmp esi,0x1
    5. 6DBD40E0    0F84 C4010000   je emeddlgs.6DBD42AA
    6. 6DBD40E6    83FE 06         cmp esi,0x6
    7. 6DBD40E9    0F84 BB010000   je emeddlgs.6DBD42AA
    8. 6DBD40EF    83FE 03         cmp esi,0x3
    9. 6DBD40F2    0F84 B2010000   je emeddlgs.6DBD42AA
    10. 6DBD40F8    83FE 05         cmp esi,0x5
    11. 6DBD40FB    75 15           jnz short emeddlgs.6DBD4112
    12. 6DBD40FD    6A 10           push 0x10
    13. 6DBD40FF    68 E3000000     push 0xE3
    复制代码

    那个核心CALL被特殊处理了,所以直接跟进去追踪算法的话,O(∩_∩)O~,会吐血的~~~~

    但是,我们关注下,它下面的显然是返回值进行了几个比较。(PS:在分析v12.x和v13.x的基础上我们知道,真正合法的返回值应该是1
    返回1--------》真正注册成功
    返回2--------》注册失败
    返回3--------》注册成功                                             <------伪注册!
    返回4--------》使用注册码出现注册错误
    返回5--------》本程序没有正确安装
    返回6--------》已过期,需要更新维护计划,输入新的注册码

    所以,注册时候的KO点已经很明朗了~~~。(呵呵,你懂得!)

    1. 6DBD42AA    803D F4C5BF6D 0>cmp byte ptr ds:[0x6DBFC5F4],0x0             //这里可以引导我们定位到重启验证附近
    2. 6DBD42B1    74 0D           je short emeddlgs.6DBD42C0                   //跳的话,就是注册表保存。不跳就是便携版,ini文件保存         
    3. 6DBD42B3    53              push ebx
    4. 6DBD42B4    8D45 28         lea eax,dword ptr ss:[ebp+0x28]
    5. 6DBD42B7    50              push eax
    6. 6DBD42B8    57              push edi
    7. 6DBD42B9    E8 BAE1FEFF     call emeddlgs.6DBC2478                       //加密,ini文件保存注册信息
    8. 6DBD42BE   /EB 63           jmp short emeddlgs.6DBD4323
    9. 6DBD42C0   |68 E467BE6D     push emeddlgs.6DBE67E4                   ; UNICODE "eeadmin.exe"
    10. 6DBD42C5   |8DBD 84F9FFFF   lea edi,dword ptr ss:[ebp-0x67C]
    11. 6DBD42CB   |E8 7505FFFF     call emeddlgs.6DBC4845
    12. 6DBD42D0   |B9 26020000     mov ecx,0x226
    13. 6DBD42D5   |8DBD 8CFBFFFF   lea edi,dword ptr ss:[ebp-0x474]
    14. 6DBD42DB   |85DB            test ebx,ebx
    15. 6DBD42DD   |74 1A           je short emeddlgs.6DBD42F9
    16. 6DBD42DF   |8D45 D8         lea eax,dword ptr ss:[ebp-0x28]
    17. 6DBD42E2   |50              push eax
    18. 6DBD42E3   |8D45 28         lea eax,dword ptr ss:[ebp+0x28]
    19. 6DBD42E6   |50              push eax                                 ; 输入的KEY(UNICODE "D???D-GGLHY-S???8-E???X-J???N")
    20. 6DBD42E7   |FF75 70         push dword ptr ss:[ebp+0x70]
    21. 6DBD42EA   |68 A48FBE6D     push emeddlgs.6DBE8FA4                   ; UNICODE "/r %Iu "%s" "%s""
    22. 6DBD42EF   |E8 6DCDFEFF     call emeddlgs.6DBC1061                   ; 注册表里保存
    23. 6DBD42F4   |83C4 10         add esp,0x10
    24. 6DBD42F7   |EB 14           jmp short emeddlgs.6DBD430D
    复制代码

    注册成功,程序会将注册信息(包含用户名与注册码)一起加密,保存到注册表里。(便携版在文件夹下的eeLM.ini)

    A、注册表保存:
    [HKEY_LOCAL_MACHINE\SOFTWARE\EmSoft\Regist]
    "EmEditor-14"=hex:0e,31,58,c3,94,aa,78,33,5b,..........(具体数值省略大部分)
    貌似安装版会有下面一些内容。因为我是用便携版来分析的。所以安装版的注册信息的验证与写入大家有空了可以看看。

    比如:
    1. 6DBD42EF    E8 6DCDFEFF     call emeddlgs.6DBC1061                   ; 猜测上面/r是 注册码类型的注册码标志
    2. 6DBD42F4    83C4 10         add esp,0x10
    3. 6DBD42F7    EB 14           jmp short emeddlgs.6DBD430D
    复制代码
    比如:
    1. 0137CF28  |6DBD91C5  返回到 emeddlgs.6DBD91C5 来自 emeddlgs.6DBD90DC
    2. 0137CF2C  |0137D1D8  UNICODE "/r 395614 ""D???D-GGLHY-S???8-E???X-J???N" "gg""
    3. 0137CF30  |00000225
    4. 0137CF34  |6DBE8FA4  UNICODE "/r %Iu "%s" "%s""
    复制代码
    比如:
    1. 6DBD4300    68 C88FBE6D     push emeddlgs.6DBE8FC8                   ; UNICODE "/m %Iu "%s""
    2. 6DBD4305    E8 57CDFEFF     call emeddlgs.6DBC1061                   ; 猜测上面/m是 维护类型的注册码标志
    3. 6DBD430A    83C4 0C         add esp,0xC
    4. 6DBD430D    8D85 8CFBFFFF   lea eax,dword ptr ss:[ebp-0x474]         ;  (UNICODE "/r 395614 "D???D-GGLHY-S???8-E???X-J???N" "gg"")
    5. 6DBD4313    50              push eax
    6. 6DBD4314    8D85 84F9FFFF   lea eax,dword ptr ss:[ebp-0x67C]
    7. 6DBD431A    50              push eax                                 ; (UNICODE "E:\办公软件\EmEditor\14\eeadmin.exe")
    复制代码
    比如:
    1. 6DBCDB4D    8B45 10         mov eax,dword ptr ss:[ebp+0x10]          ; (UNICODE "/r 395614 "D???D-GGLHY-S???8-E???X-J???N" "gg"")
    2. 6DBCDB50    8945 D4         mov dword ptr ss:[ebp-0x2C],eax
    3. 6DBCDB53    83C4 0C         add esp,0xC
    4. 6DBCDB56    8D45 C0         lea eax,dword ptr ss:[ebp-0x40]
    5. 6DBCDB59    50              push eax
    6. 6DBCDB5A    C745 C0 3C00000>mov dword ptr ss:[ebp-0x40],0x3C
    7. 6DBCDB61    C745 C4 4000000>mov dword ptr ss:[ebp-0x3C],0x40
    8. 6DBCDB68    C745 DC 0100000>mov dword ptr ss:[ebp-0x24],0x1
    9. 6DBCDB6F    FF15 8832BE6D   call dword ptr ds:[<&SHELL32.ShellExecut>; shell32.ShellExecuteExW
    10. 6DBCDB75    85C0            test eax,eax                             ; 楼上的,你要干什么?
    复制代码


    B、便携版ini文件保存:
    "
    [Regist]
    EmEditor-14=E1BC511E94AA7833C5AA16C195AA7833FF13237388AA78(这里省略很多字符)C31C"

    这里顺便以便携版为例,看看:
    1. 6DC044E1    50              push eax                                 ; (UNICODE "D???D-GGLHY-S???8-E???X-J???N")
    2. 6DC044E2    57              push edi
    3. 6DC044E3    E8 AADFFEFF     call emeddlgs.6DBF2492                   ; F7瞅瞅?
    复制代码
    F7进去后,可以看到算法中的MD5后的某些字符: UNICODE "445c9d29df059213b7"
    注册码的某11位 "E???X-J???N"
    固定字符串 UNICODE "EmEditor-14"
    用户名:gg
    等等。。。。。具体怎么连接的,大家有兴趣可以自己跟一下。


    而下面这里就是注册信息加密的地方了。
    1. 6DBF22E6    55              push ebp
    2. 6DBF22E7    8D6C24 90       lea ebp,dword ptr ss:[esp-0x70]
    3. 6DBF22EB    81EC A0000000   sub esp,0xA0
    4. 6DBF22F1    53              push ebx
    5. 6DBF22F2    56              push esi
    6. 6DBF22F3    57              push edi
    7. 6DBF22F4    BE A0000000     mov esi,0xA0
    8. 6DBF22F9    56              push esi
    9. 6DBF22FA    8BD8            mov ebx,eax
    10. 6DBF22FC    8D45 D0         lea eax,dword ptr ss:[ebp-0x30]
    11. 6DBF22FF    6A 00           push 0x0
    12. 6DBF2301    50              push eax
    13. 6DBF2302    E8 19790100     call emeddlgs.6DC09C20
    14. 6DBF2307    8B55 78         mov edx,dword ptr ss:[ebp+0x78]
    15. 6DBF230A    83C4 0C         add esp,0xC
    16. 6DBF230D    8D45 D0         lea eax,dword ptr ss:[ebp-0x30]
    17. 6DBF2310    50              push eax
    18. 6DBF2311    6A 50           push 0x50
    19. 6DBF2313    59              pop ecx
    20. 6DBF2314    E8 E7ECFFFF     call emeddlgs.6DBF1000
    21. 6DBF2319    FF75 7C         push dword ptr ss:[ebp+0x7C]
    22. 6DBF231C    8D4D D0         lea ecx,dword ptr ss:[ebp-0x30]
    23. 6DBF231F    6A 50           push 0x50
    24. 6DBF2321    58              pop eax
    25. 6DBF2322    E8 D1FEFFFF     call emeddlgs.6DBF21F8
    26. 6DBF2327    8D45 D0         lea eax,dword ptr ss:[ebp-0x30]
    27. 6DBF232A    50              push eax
    28. 6DBF232B    FF15 AC30C16D   call dword ptr ds:[<&KERNEL32.lstrlenW>] ; kernel32.lstrlenW
    29. 6DBF2331    8D7C00 02       lea edi,dword ptr ds:[eax+eax+0x2]
    30. 6DBF2335    FF15 A830C16D   call dword ptr ds:[<&KERNEL32.GetTickCou>; kernel32.GetTickCount
    31. 6DBF233B    50              push eax
    32. 6DBF233C    E8 34710100     call emeddlgs.6DC09475
    33. 6DBF2341    59              pop ecx
    34. 6DBF2342    EB 18           jmp short emeddlgs.6DBF235C
    35. 6DBF2344    E8 3E710100     call emeddlgs.6DC09487
    36. 6DBF2349    25 FF000080     and eax,0x800000FF
    37. 6DBF234E    79 07           jns short emeddlgs.6DBF2357
    38. 6DBF2350    48              dec eax
    39. 6DBF2351    0D 00FFFFFF     or eax,0xFFFFFF00
    40. 6DBF2356    40              inc eax
    41. 6DBF2357    88443D D0       mov byte ptr ss:[ebp+edi-0x30],al
    42. 6DBF235B    47              inc edi
    43. 6DBF235C    3BFE            cmp edi,esi
    44. 6DBF235E  ^ 72 E4           jb short emeddlgs.6DBF2344
    45. 6DBF2360    56              push esi
    46. 6DBF2361    33F6            xor esi,esi
    47. 6DBF2363    56              push esi
    48. 6DBF2364    53              push ebx
    49. 6DBF2365    E8 B6780100     call emeddlgs.6DC09C20
    50. 6DBF236A    83C4 0C         add esp,0xC
    51. 6DBF236D    6A 28           push 0x28
    52. 6DBF236F    33C0            xor eax,eax
    53. 6DBF2371    5F              pop edi
    54. 6DBF2372    0FB688 0C6DC26D movzx ecx,byte ptr ds:[eax+0x6DC26D0C]
    55. 6DBF2379    8A4C8D D0       mov cl,byte ptr ss:[ebp+ecx*4-0x30]
    56. 6DBF237D    80F1 CC         xor cl,0xCC
    57. 6DBF2380    880C83          mov byte ptr ds:[ebx+eax*4],cl
    58. 6DBF2383    40              inc eax
    59. 6DBF2384    3BC7            cmp eax,edi
    60. 6DBF2386  ^ 7C EA           jl short emeddlgs.6DBF2372
    61. 6DBF2388    8D43 01         lea eax,dword ptr ds:[ebx+0x1]
    62. 6DBF238B    0FB68E 0C6DC26D movzx ecx,byte ptr ds:[esi+0x6DC26D0C]
    63. 6DBF2392    8A4C8D D1       mov cl,byte ptr ss:[ebp+ecx*4-0x2F]
    64. 6DBF2396    80F1 AA         xor cl,0xAA
    65. 6DBF2399    8808            mov byte ptr ds:[eax],cl
    66. 6DBF239B    46              inc esi
    67. 6DBF239C    83C0 04         add eax,0x4
    68. 6DBF239F    3BF7            cmp esi,edi
    69. 6DBF23A1  ^ 7C E8           jl short emeddlgs.6DBF238B
    70. 6DBF23A3    33F6            xor esi,esi
    71. 6DBF23A5    8D43 02         lea eax,dword ptr ds:[ebx+0x2]
    72. 6DBF23A8    0FB68E 0C6DC26D movzx ecx,byte ptr ds:[esi+0x6DC26D0C]
    73. 6DBF23AF    8A4C8D D2       mov cl,byte ptr ss:[ebp+ecx*4-0x2E]
    74. 6DBF23B3    80F1 55         xor cl,0x55
    75. 6DBF23B6    8808            mov byte ptr ds:[eax],cl
    76. 6DBF23B8    46              inc esi
    77. 6DBF23B9    83C0 04         add eax,0x4
    78. 6DBF23BC    3BF7            cmp esi,edi
    79. 6DBF23BE  ^ 7C E8           jl short emeddlgs.6DBF23A8
    80. 6DBF23C0    33C0            xor eax,eax
    81. 6DBF23C2    83C3 03         add ebx,0x3
    82. 6DBF23C5    0FB688 0C6DC26D movzx ecx,byte ptr ds:[eax+0x6DC26D0C]
    83. 6DBF23CC    8A4C8D D3       mov cl,byte ptr ss:[ebp+ecx*4-0x2D]
    84. 6DBF23D0    80F1 33         xor cl,0x33
    85. 6DBF23D3    880B            mov byte ptr ds:[ebx],cl
    86. 6DBF23D5    40              inc eax
    87. 6DBF23D6    83C3 04         add ebx,0x4
    88. 6DBF23D9    3BC7            cmp eax,edi
    89. 6DBF23DB  ^ 7C E8           jl short emeddlgs.6DBF23C5
    90. 6DBF23DD    5F              pop edi
    91. 6DBF23DE    5E              pop esi
    92. 6DBF23DF    5B              pop ebx
    93. 6DBF23E0    83C5 70         add ebp,0x70
    94. 6DBF23E3    C9              leave
    复制代码
    这段代码我们在点击关于按钮的时候也会见到它对注册信息解密过程的。这里就不在赘述~~。


    另外:
    1. 6DBF5ACA    E8 405B0000     call emeddlgs.6DBFB60F
    2. 6DBF5ACF    83F8 06         cmp eax,0x6
    3. 6DBF5AD2    0F85 1A030000   jnz emeddlgs.6DBF5DF2
    4. 6DBF5AD8    68 5C67C16D     push emeddlgs.6DC1675C                   ; eeadmin.exe
    5. 6DBF5ADD    8DBD B8FDFFFF   lea edi,dword ptr ss:[ebp-0x248]
    复制代码
    还有
    1. 6DBF9598    E8 72200000     call emeddlgs.6DBFB60F
    2. 6DBF959D    83F8 06         cmp eax,0x6
    3. 6DBF95A0    0F85 CF010000   jnz emeddlgs.6DBF9775
    4. 6DBF95A6    68 5C67C16D     push emeddlgs.6DC1675C                   ; eeadmin.exe
    复制代码
    看起来这个"eeadmin.exe"文件极有可能是与维护密钥有关~~。(猜测,未经验证。哈哈)
    参见(返回6--------》已过期,需要更新维护计划,输入新的注册码)


    同时,在通过注册码的算法校验后,还会对某3位进行计算~~~(这里卖个关子,后面第三部分会讲到)而这个计算会决定是否真正注册成功~~~




                                                                                                二、点击关于的验证

           因为跟踪过便携版的注册信息保存。所以,很好定位到重启验证的关键地方。利用例如字符串professional、PromptRegExpired或者利用加密的代码(查找命令序列)。都能定位到关键地方。。。

    比如:
    1. 0044370E   > \E9 FA020000   jmp     00443A0D
    2. <a href="tel:00443713">00443713</a>   >  833D 4C514D00>cmp     dword ptr [4D514C], 1            ;  ==1      !!!
    3. 0044371A   .  74 0D         je      short <a href="tel:00443729">00443729</a>
    4. 0044371C   .  833D 4C514D00>cmp     dword ptr [4D514C], 6            ;  ==6
    5. <a href="tel:00443723">00443723</a>   .  0F85 59010000 jnz     <a href="tel:00443882">00443882</a>
    6. <a href="tel:00443729">00443729</a>   >  FF35 14304C00 push    dword ptr [4C3014]               ;  PromptRegExpired
    7. 0044372F   .  33C0          xor     eax, eax
    8. <a href="tel:00443731">00443731</a>   .  40            inc     eax
    9. <a href="tel:00443732">00443732</a>   .  E8 517D0000   call    0044B488
    10. <a href="tel:00443737">00443737</a>   .  85C0          test    eax, eax
    11. <a href="tel:00443739">00443739</a>   .  0F84 43010000 je      <a href="tel:00443882">00443882</a>
    12. 0044373F   .  8365 E8 00    and     dword ptr [ebp-18], 0
    13. <a href="tel:00443743">00443743</a>   .  833D 4C514D00>cmp     dword ptr [4D514C], 1            ;  ==1
    14. 0044374A   .  75 73         jnz     short 004437BF
    复制代码
    很显然是全局变量[4D514C]的值应该=1。也就是注册验证的返回值必须=1~~

    接着往下看:
    1. <a href="tel:00443760">00443760</a>   .  8D85 48FFFFFF lea     eax, dword ptr [ebp-B8]
    2. <a href="tel:00443766">00443766</a>   .  50            push    eax                            ; /pLocaltime
    3. <a href="tel:00443767">00443767</a>   .  FF15 94F34B00 call    dword ptr [<&KERNEL32.GetLocal>; \GetLocalTime
    4. 0044376D   .  FFB5 4EFFFFFF push    dword ptr [ebp-B2]
    5. <a href="tel:00443773">00443773</a>   .  FFB5 4AFFFFFF push    dword ptr [ebp-B6]
    6. <a href="tel:00443779">00443779</a>   .  FFB5 48FFFFFF push    dword ptr [ebp-B8]
    复制代码
    哎,它也要问“时间都去哪儿啦”?



                                                                                        三、三种不同类型的KEY

    通过KeyGen生成的KEY注册后,会发现有2大类情况,即只有注册给XXX的字样和带有附加信息字样两种。而附加信息又和时间有关
    仔细分一下,又可分成3类:

    A.独行侠:这样的KEY在关于的对话框里,只有注册给XXX的信息。

    B.有固定期限的合同工:这样的KEY注册后在关于的对话框里,除了注册给XXX外,下面还有一行信息(维护计划结束于XXXX年XX月XX日)的字样

    C.永结同心的情深伉俪:这样的KEY注册后在关于的对话框里,除了注册给XXX外,下面还有一行信息(终身授权)的字样


    附PS的图如下:
    类型A:
    类型AA.PNG


    类型B:

    类型B

    类型B


    类型C:

    类型C

    类型C



    OK,这三种类型的KEY,只有后面2种才是真正合法的~~~~~~

    原因如下:
    程序在注册及重启验证的时候,会校验软件的特定3位,而这3位经过某种计算,得到的结果会通过某个函数转换为形如XXXX-XX-XX的日期。

    因此,如果无法转换成时间的KEY,那只能说Sorry。你能注册成功,但是,但是,但是,只要超过30天,你会收到弹窗的礼物。。。。

    反之,如果能转换成时间的KEY,则会缔结合同,约定到XXXX年XX月XX日之前,你的地盘你做主!到期后,咱再谈谈“续约”或重新签订“维护条款”。

    好吧,不是说还有永结同心的(终身授权)吗?

    是的,如果这3位为特定的数字2的话,呵呵~~~直接就是一见倾情,永结同心了。

    口说无凭,where `s your evidence?

    好吧,有请代码兄弟们出场:(出场费等下再说)
    1. 6DBF2B43    E8 B8E4FFFF     call    6DBF1000
    2. 6DBF2B48    8B43 48         mov     eax, dword ptr [ebx+48]        ; 在哪里,在哪里见过你?
    3. 6DBF2B4B    83F8 01         cmp     eax, 1                         ; 你的笑容这样熟悉!
    4. 6DBF2B4E    74 23           je      short 6DBF2B73
    5. 6DBF2B50    83F8 03         cmp     eax, 3                         ; 类型为A的key返回值就是3!
    6. 6DBF2B53    74 1E           je      short 6DBF2B73
    7. 6DBF2B55    83F8 06         cmp     eax, 6
    8. 6DBF2B58    74 19           je      short 6DBF2B73
    9. (省略部分代码)
    10. 6DBF2BFB    50              push    eax
    11. 6DBF2BFC    E8 AD320100     call    6DC05EAE                     ; 检测是否能转换成合法到期日
    12. 6DBF2C01    84C0            test    al, al                       ; 不能则是伪注册~~~(即类型为A的KEY)
    13. 6DBF2C03    0F84 D3000000   je      6DBF2CDC                     ; 伪注册则跳
    14. 6DBF2C09    68 7063C16D     push    6DC16370                     ; UNICODE "\n("
    15. 6DBF2C0E    8BC7            mov     eax, edi
    复制代码


    进CALL后,可以看到一些内容。。。比如:

    A、        注册码的特定3位的运算:
    1. 6DC05DB2    83F8 1D         cmp     eax, 1D                      ; 注册码长度为29位吗?
    2. 6DC05DB5    74 08           je      short 6DC05DBF
    3. 6DC05DB7    83C8 FF         or      eax, FFFFFFFF
    4. 6DC05DBA    E9 EB000000     jmp     6DC05EAA
    5. 6DC05DBF    8B45 08         mov     eax, dword ptr [ebp+8]
    6. 6DC05DC2    83C0 1C         add     eax, 1C
    7. 6DC05DC5    8945 E8         mov     dword ptr [ebp-18], eax
    8. 6DC05DC8    FF75 E8         push    dword ptr [ebp-18]
    9. 6DC05DCB    FF15 AC30C16D   call    dword ptr [<&KERNEL32.lstrle>; kernel32.lstrlenW
    10. 6DC05DD1    83F8 03         cmp     eax, 3                       ; 特定位置的字符长度大于3吗?
    11. 6DC05DD4    7D 09           jge     short 6DC05DDF
    12. 6DC05DD6    834D FC FF      or      dword ptr [ebp-4], FFFFFFFF
    13. 6DC05DDA    E9 C8000000     jmp     6DC05EA7
    14. 6DC05DDF    8365 F8 00      and     dword ptr [ebp-8], 0
    15. 6DC05DE3    8365 F4 00      and     dword ptr [ebp-C], 0
    16. 6DC05DE7    EB 07           jmp     short 6DC05DF0
    17. 6DC05DE9    8B45 F4         mov     eax, dword ptr [ebp-C]
    18. 6DC05DEC    40              inc     eax
    19. 6DC05DED    8945 F4         mov     dword ptr [ebp-C], eax
    20. 6DC05DF0    837D F4 03      cmp     dword ptr [ebp-C], 3
    21. 6DC05DF4    0F8D A7000000   jge     6DC05EA1
    22. 6DC05DFA    8B45 F8         mov     eax, dword ptr [ebp-8]       ; 累加结果(初始=0)
    23. 6DC05DFD    C1E0 05         shl     eax, 5                       ; *32
    24. 6DC05E00    8945 F8         mov     dword ptr [ebp-8], eax
    25. 6DC05E03    8365 F0 00      and     dword ptr [ebp-10], 0
    26. 6DC05E07    8B45 F4         mov     eax, dword ptr [ebp-C]
    27. 6DC05E0A    8B4D E8         mov     ecx, dword ptr [ebp-18]
    28. 6DC05E0D    66:8B0441       mov     ax, word ptr [ecx+eax*2]
    29. 6DC05E11    66:8945 EC      mov     word ptr [ebp-14], ax
    30. 6DC05E15    0FB745 EC       movzx   eax, word ptr [ebp-14]
    31. 6DC05E19    83F8 32         cmp     eax, 32                      ; 这个是终身授权的关键
    32. 6DC05E1C    7C 15           jl      short 6DC05E33
    33. 6DC05E1E    0FB745 EC       movzx   eax, word ptr [ebp-14]
    34. 6DC05E22    83F8 39         cmp     eax, 39
    35. 6DC05E25    7F 0C           jg      short 6DC05E33
    36. 6DC05E27    0FB745 EC       movzx   eax, word ptr [ebp-14]
    37. 6DC05E2B    83E8 32         sub     eax, 32                      ; 数字则-32
    38. 6DC05E2E    8945 F0         mov     dword ptr [ebp-10], eax
    39. 6DC05E31    EB 60           jmp     short 6DC05E93
    40. 6DC05E33    0FB745 EC       movzx   eax, word ptr [ebp-14]
    41. 6DC05E37    83F8 41         cmp     eax, 41
    42. 6DC05E3A    7C 15           jl      short 6DC05E51
    43. 6DC05E3C    0FB745 EC       movzx   eax, word ptr [ebp-14]
    44. 6DC05E40    83F8 48         cmp     eax, 48
    45. 6DC05E43    7F 0C           jg      short 6DC05E51
    46. 6DC05E45    0FB745 EC       movzx   eax, word ptr [ebp-14]
    47. 6DC05E49    83E8 39         sub     eax, 39                      ; 大写字母A~H则-39
    48. 6DC05E4C    8945 F0         mov     dword ptr [ebp-10], eax
    49. 6DC05E4F    EB 42           jmp     short 6DC05E93
    50. 6DC05E51    0FB745 EC       movzx   eax, word ptr [ebp-14]
    51. 6DC05E55    83F8 4A         cmp     eax, 4A
    52. 6DC05E58    7C 15           jl      short 6DC05E6F
    53. 6DC05E5A    0FB745 EC       movzx   eax, word ptr [ebp-14]
    54. 6DC05E5E    83F8 4E         cmp     eax, 4E
    55. 6DC05E61    7F 0C           jg      short 6DC05E6F
    56. 6DC05E63    0FB745 EC       movzx   eax, word ptr [ebp-14]
    57. 6DC05E67    83E8 3A         sub     eax, 3A                      ; 大写字母J~N则-3A
    58. 6DC05E6A    8945 F0         mov     dword ptr [ebp-10], eax
    59. 6DC05E6D    EB 24           jmp     short 6DC05E93
    60. 6DC05E6F    0FB745 EC       movzx   eax, word ptr [ebp-14]
    61. 6DC05E73    83F8 50         cmp     eax, 50                      ; 大写字母P~Z则-3B
    62. 6DC05E76    7C 15           jl      short 6DC05E8D
    63. 6DC05E78    0FB745 EC       movzx   eax, word ptr [ebp-14]
    64. 6DC05E7C    83F8 5A         cmp     eax, 5A
    65. 6DC05E7F    7F 0C           jg      short 6DC05E8D
    66. 6DC05E81    0FB745 EC       movzx   eax, word ptr [ebp-14]
    67. 6DC05E85    83E8 3B         sub     eax, 3B
    68. 6DC05E88    8945 F0         mov     dword ptr [ebp-10], eax
    69. 6DC05E8B    EB 06           jmp     short 6DC05E93
    70. 6DC05E8D    834D FC FF      or      dword ptr [ebp-4], FFFFFFFF
    71. 6DC05E91    EB 14           jmp     short 6DC05EA7
    72. 6DC05E93    8B45 F8         mov     eax, dword ptr [ebp-8]
    73. 6DC05E96    0345 F0         add     eax, dword ptr [ebp-10]      ; 累加。初始0 + 差  (差值很关键哦!)
    74. 6DC05E99    8945 F8         mov     dword ptr [ebp-8], eax
    75. 6DC05E9C  ^ E9 48FFFFFF     jmp     6DC05DE9
    76. 6DC05EA1    8B45 F8         mov     eax, dword ptr [ebp-8]
    77. 6DC05EA4    8945 FC         mov     dword ptr [ebp-4], eax       ; 累加计算的的结果保存起来
    78. 6DC05EA7    8B45 FC         mov     eax, dword ptr [ebp-4]       ; 最终累加和=0则为终身授权版
    79. 6DC05EAA    C9              leave
    80. 6DC05EAB    C2 0400         retn    4
    复制代码

    运算结果再来计算:
    1. 6DC05ED2    E8 CCFEFFFF     call    6DC05DA3                     ; 运算特定3位
    2. 6DC05ED7    8945 FC         mov     dword ptr [ebp-4], eax       ; 3位的运算结果
    3. 6DC05EDA    837D FC 00      cmp     dword ptr [ebp-4], 0
    4. 6DC05EDE    7D 0C           jge     short 6DC05EEC
    5. 6DC05EE0    32C0            xor     al, al
    6. 6DC05EE2    E9 B4000000     jmp     6DC05F9B
    7. (省略部分代码)
    8. 6DC05F05    AB              stos    dword ptr es:[edi]
    9. 6DC05F06    B8 DD070000     mov     eax, 7DD                     ; 呵呵~~~
    10. 6DC05F0B    66:8945 E4      mov     word ptr [ebp-1C], ax
    11. (省略部分代码)
    12. 6DC05F24    50              push    eax
    13. 6DC05F25    FF15 8031C16D   call    dword ptr [<&KERNEL32.System>; kernel32.SystemTimeToFileTime
    14. 6DC05F2B    8B45 D4         mov     eax, dword ptr [ebp-2C]
    15. (省略部分代码)
    16. 6DC05F3A    99              cdq
    17. 6DC05F3B    6A 00           push    0
    18. 6DC05F3D    <a href="tel:68 80969800">68 80969800</a>     push    989680
    19. 6DC05F42    52              push    edx
    20. 6DC05F43    50              push    eax
    21. 6DC05F44    E8 17A10000     call    6DC10060                     ; 具体运算1
    22. 6DC05F49    6A 00           push    0
    23. 6DC05F4B    6A 3C           push    3C
    24. 6DC05F4D    52              push    edx
    25. 6DC05F4E    50              push    eax
    26. 6DC05F4F    E8 0CA10000     call    6DC10060                     ; 具体运算2
    27. 6DC05F54    6A 00           push    0
    28. 6DC05F56    6A 3C           push    3C
    29. 6DC05F58    52              push    edx
    30. 6DC05F59    50              push    eax
    31. 6DC05F5A    E8 01A10000     call    6DC10060                     ; 具体运算3
    32. (省略部分代码)
    33. 6DC05F92    50              push    eax
    34. 6DC05F93    FF15 8831C16D   call    dword ptr [<&KERNEL32.FileTi>; kernel32.FileTimeToSystemTime
    35. 6DC05F99    B0 01           mov     al, 1
    36. 6DC05F9B    5F              pop     edi
    37. 6DC05F9C    C9              leave
    38. 6DC05F9D    C2 0800         retn    8
    复制代码
    限于篇幅,这里面的3个具体运算就不列出来了~~~很简单的东东~~~

    运算后的结果看能否转换成合法的时间。如果不能,呵呵~~~,只能为爱说抱歉了!
    类型为A的这种注册码在验证时的返回值是3,也就是那种伪注册。所以说,爱是要付出真心的,只能从1而终,岂可3心2意?


    接着看:
    1. 6DBF2BFB    50              push    eax
    2. 6DBF2BFC    E8 AD320100     call    6DC05EAE                       ; 检测是否能转换成合法到期日
    3. 6DBF2C01    84C0            test    al, al                         ; 不能则是伪注册~~~(即类型为A的KEY)
    4. 6DBF2C03    0F84 D3000000   je      6DBF2CDC                       ; 伪注册则跳
    5. 6DBF2C09    68 7063C16D     push    6DC16370                       ; UNICODE "\n("
    6. 6DBF2C0E    8BC7            mov     eax, edi
    7. 6DBF2C10    8D8D 0CFDFFFF   lea     ecx, dword ptr [ebp-2F4]       ; (UNICODE "注册至:\ngg")
    8. 6DBF2C16    E8 DDF5FFFF     call    6DBF21F8
    9. 6DBF2C1B    B8 DD070000     mov     eax, 7DD
    10. 6DBF2C20    66:3945 F0      cmp     word ptr [ebp-10], ax          ; 计算后得到的年份数:7DD
    11. 6DBF2C24    75 22           jnz     short 6DBF2C48                 ; 不等则失去(终身授权条件1)
    12. 6DBF2C26    66:837D F2 01   cmp     word ptr [ebp-E], 1            ; 计算后得到的月份数:1
    13. 6DBF2C2B    75 1B           jnz     short 6DBF2C48                 ; 不等则失去(终身授权条件2)
    14. 6DBF2C2D    66:837D F6 01   cmp     word ptr [ebp-A], 1            ; 计算后得到的日期数:1
    15. 6DBF2C32    75 14           jnz     short 6DBF2C48                 ; 不等则失去(终身授权条件3)
    16. 6DBF2C34    56              push    esi
    17. 6DBF2C35    8D85 04FBFFFF   lea     eax, dword ptr [ebp-4FC]
    复制代码

    好吧~~~我能说优雅点已暴露吗?



    PS:感谢Pentium450兄弟的友情测试~~~
















    来自群组: 暗算

    评分

    参与人数 1威望 +4 收起 理由
    lmze2000 + 4 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-4-25 12:06:37 | 显示全部楼层
    g6649 发表于 2016-4-24 02:27
    楼主好厉害。
    我也是喜欢用emeditor这个编辑器
    现在网上找到的版本(包括最新的15.9)大部分都是像楼主说 ...

    欢迎兄弟来到飘云阁论坛。。。。

    这款编辑器,我也非常喜欢,所以才会花点时间和精力来分析它。。。

    至于16.X,目前还没出来。。。出来后如果有可能的话,或许我会跟进。


    评分

    参与人数 1威望 +4 收起 理由
    g6649 + 4 赞一个!

    查看全部评分

    PYG19周年生日快乐!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-4-30 04:34
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2016-4-24 02:27:31 | 显示全部楼层
    楼主好厉害。
    我也是喜欢用emeditor这个编辑器
    现在网上找到的版本(包括最新的15.9)大部分都是像楼主说的类型A,是假注册。
    找了好久才找到楼主的贴子,专门注册了帐号来感谢楼主(正在使用楼主于3楼提供的终身授权KEY)。
    目前的版本已经到15.9了,不知道啥时候会更新成16.X,也不知道楼主能不能看到我这个回帖。
    可以不要脸的求楼主如果出了16.X的话能看看16.X的验证机制有没有变嘛?
    总之谢谢楼主啦。

    点评

    欢迎兄弟来到飘云阁论坛。。。。 这款编辑器,我也非常喜欢,所以才会花点时间和精力来分析它。。。 至于16.X,目前还没出来。。。出来后如果有可能的话,或许我会跟进。  详情 回复 发表于 2016-4-25 12:06
    PYG19周年生日快乐!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-5 22:17
  • 签到天数: 154 天

    [LV.7]常住居民III

    发表于 2014-7-11 10:24:21 | 显示全部楼层
    沙发没抢到,板凳也不错,膜拜!!!

    点评

    谢谢兄弟的友情测试~~~~3ks  发表于 2014-7-11 10:36
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

     楼主| 发表于 2014-7-14 11:03:04 | 显示全部楼层
    本帖最后由 GGLHY 于 2014-7-15 20:31 编辑

    为方便兄弟们调试,这里用KG生成3组不同类型的KEY:

    类型A:DABZS-Y5TCJ-HF22A-UZK8P-QS2MM

    类型B:  DMBZD-GGLHY-SJW28-EWS9X-J66ZN                  <2091-7-9到期>                  

    类型C:DMEZD-GGPYG-UZ222-XATBS-J3CHD                  (终身授权)


    大家有兴趣的话可以去看看
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-17 22:44
  • 签到天数: 132 天

    [LV.7]常住居民III

    发表于 2014-10-18 10:39:05 | 显示全部楼层
    好文章啊! 学习。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

     楼主| 发表于 2015-11-6 08:09:46 | 显示全部楼层
    鉴于V15.x系列取消了CV,此帖从内版移至外版,取消阅读权限!有兴趣的兄弟们可以对照着最新版分析下{:soso_e113:}
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

     楼主| 发表于 2015-11-6 08:14:51 | 显示全部楼层
    V15.x系列算法与V14.x一样,未变{:soso_e113:}Key可通用
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-9-27 19:17
  • 签到天数: 31 天

    [LV.5]常住居民I

    发表于 2016-10-4 03:13:03 | 显示全部楼层
    16.x继续裸奔
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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