InnoExtractor 捐赠机制

InnoExtractor 是什么软件,在这里不做介绍,论坛中有。
原作者发布的软件都是Free版的,只有通过捐赠才可能升级到Plus版。
网上到处都是所谓的完美破解版(本论坛也有),但其实都不是完美的,要将Free版完美升级到Plus,只有通过向作者捐赠6美元,作者会通过邮箱发给你你一个捐赠码。
我们就来看看这个捐赠码的输入方式和校验机制。

1、捐赠界面会检测有无注册机在运行,有的话无法输入捐赠码:

005DD2BB        mov         eax,[0060DBC8];^gHasKeyGen:Boolean
005DD2C0        cmp         byte ptr [eax],0
005DD2C3>       jnz         005DD2DB
005DD2C5        mov         eax,5DD508;'havysoft products keygen'
005DD2CA        call        GetWinHandleByTitle
005DD2CF        test        eax,eax
005DD2D1>       jbe         005DD2DB
005DD2D3        mov         eax,[0060DBC8];^gHasKeyGen:Boolean
005DD2D8        mov         byte ptr [eax],1
005DD2DB        mov         eax,[0060DBC8];^gHasKeyGen:Boolean
005DD2E0        cmp         byte ptr [eax],1
005DD2E3>       jz          005DD4D8; 有注册机在运行,则跳出


2、捐赠界面接收组合键Ctrl-Alt-Shift-I
捐赠界面如下:

005DD2E9        mov         ax,[005DD53C];0x7 gvar_005DD53C; Ctrl-Alt-Shift组合键
005DD2EF        cmp         ax,word ptr [ebp+8]
005DD2F3>       jnz         005DD4D8;不是跳出
005DD2F9        mov         eax,dword ptr [ebp-8]
005DD2FC        mov         ax,word ptr [eax]
005DD2FF        cmp         ax,49          ;I键的ASCII码
005DD303>       jnz         005DD4D8;不是跳出


按组合键捐赠界面变成这样,可以输入捐赠码了:


3、捐赠码的组成

00565C44        mov         edx,dword ptr [ebp-4]
00565C47        mov         eax,565D2C;'-'
00565C4C        call        ReversePos
00565C51        mov         dword ptr [ebp-18],eax
00565C54        cmp         dword ptr [ebp-18],0
00565C58>       jle         00565CEC


捐赠码分两个部分,中间用“-”分隔,第一部分是名称,第二部分是由名称产生的校验码。

4、名称的有效性

.text:005659B4 C6 45 FB 00                      mov     [ebp+Result], 0
.text:005659B8 8D 55 F4                       lea     edx, [ebp+TmpS]
.text:005659BB 8B 45 FC                       mov     eax, [ebp+Name]
.text:005659BE E8 0D 87 EB FF                   call    AnsiLowerCase
.text:005659C3 8B 45 F4                       mov     eax, [ebp+TmpS]
.text:005659C6 BA 98 5B 56 00                   mov     edx, offset aUnregisteredus ; "unregistereduser"
.text:005659CB E8 54 24 EA FF                   call    UStrEqual
.text:005659D0 75 04                         jnz     short loc_5659D6
.text:005659D2 C6 45 FB 01                     mov     [ebp+Result], 1
.text:005659D6
.text:005659D6                   loc_5659D6:
.text:005659D6 80 7D FB 01                     cmp     [ebp+Result], 1
.text:005659DA 0F 84 7E 01 00 00                 jz      Exit


如果名称是“unregistereduser”,则不可接收,废话!

.text:00565A01 C7 45 F0 01 00 00+                  mov     [ebp+I], 1
.text:00565A08
.text:00565A08                   loc_565A08:
.text:00565A08 8B 45 F4                        mov     eax, [ebp+TmpS]
.text:00565A0B 8B 55 F0                        mov     edx, [ebp+I]
.text:00565A0E 66 8B 44 50 FE                    mov     ax, [eax+edx*2-2]
.text:00565A13 66 89 45 EE                      mov     [ebp+var_12], ax
.text:00565A17 B8 BC 5B 56 00                    mov     eax, offset dword_565BBC
.text:00565A1C 89 45 D8                        mov     [ebp+var_28], eax
.text:00565A1F 8B 45 D8                        mov     eax, [ebp+var_28]
.text:00565A22 66 8B 55 EE                      mov     dx, [ebp+var_12]
.text:00565A26 66 81 FA FF 00                    cmp     dx, 0FFh
.text:00565A2B 77 09                          ja      short loc_565A36
.text:00565A2D 81 E2 FF 00 00 00                  and     edx, 0FFh
.text:00565A33 0F A3 10                        bt      [eax], edx
.text:00565A36
.text:00565A36                   loc_565A36:
.text:00565A36 0F 92 C0                        setb    al
.text:00565A39 88 45 D7                        mov     [ebp+var_29], al
.text:00565A3C 80 7D D7 00                      cmp     [ebp+var_29], 0
.text:00565A40 75 09                          jnz     short loc_565A4B
.text:00565A42 C6 45 FB 01                      mov     [ebp+Result], 1
.text:00565A46 E9 13 01 00 00                    jmp     Exit
.text:00565A4B                   ; ---------------------------------------------------------------------------
.text:00565A4B
.text:00565A4B                   loc_565A4B:
.text:00565A4B FF 45 F0                        inc     [ebp+I]
.text:00565A4E FF 4D E0                        dec     [ebp+var_20]
.text:00565A51 75 B5                          jnz     short loc_565A08


这是个For循环,检测名称是否都是由字母组成,有非字母则视为无效!

.text:00565A84 C7 45 F0 01 00 00+                  mov     [ebp+I], 1
.text:00565A8B
.text:00565A8B                   loc_565A8B:
.text:00565A8B 8B 45 F4                         mov     eax, [ebp+TmpS]
.text:00565A8E 8B 55 F0                         mov     edx, [ebp+I]
.text:00565A91 66 8B 44 50 FE                     mov     ax, [eax+edx*2-2]
.text:00565A96 66 89 45 EE                       mov     [ebp+var_12], ax
.text:00565A9A 66 8B 45 EE                       mov     ax, [ebp+var_12]
.text:00565A9E 66 89 45 CE                       mov     [ebp+var_32], ax
.text:00565AA2 66 8B 45 EE                       mov     ax, [ebp+var_12]
.text:00565AA6 83 C0 9F                         add     eax, 0FFFFFF9Fh
.text:00565AA9 66 83 E8 1A                       sub     ax, 1Ah
.text:00565AAD 73 0C                           jnb     short loc_565ABB
.text:00565AAF 66 8B 45 EE                       mov     ax, [ebp+var_12]
.text:00565AB3 66 25 DF FF                       and     ax, 0FFDFh
.text:00565AB7 66 89 45 CE                       mov     [ebp+var_32], ax
.text:00565ABB
.text:00565ABB                   loc_565ABB:
.text:00565ABB 66 8B 45 EE                       mov     ax, [ebp+var_12]
.text:00565ABF 66 3B 45 CE                       cmp     ax, [ebp+var_32]
.text:00565AC3 75 03                           jnz     short loc_565AC8
.text:00565AC5 FF 45 E8                         inc     [ebp+CapitalCount];大写字母计数
.text:00565AC8
.text:00565AC8                   loc_565AC8:
.text:00565AC8 FF 45 F0                         inc     [ebp+I]
.text:00565ACB FF 4D E0                         dec     [ebp+var_20]
.text:00565ACE 75 BB                           jnz     short loc_565A8B
.text:00565AD0                   loc_565AD0:
.text:00565AD0 83 7D E8 02                       cmp     [ebp+CapitalCount], 2;小于2个无效
.text:00565AD4 7C 06                           jl      short loc_565ADC
.text:00565AD6 83 7D E8 04                       cmp     [ebp+CapitalCount], 4;大于4个无效
.text:00565ADA 7E 06                           jle     short loc_565AE2
.text:00565ADC
.text:00565ADC                   loc_565ADC:
.text:00565ADC C6 45 FB 01                       mov     [ebp+Result], 1
.text:00565AE0 EB 7C                           jmp     short Exit


这又是个for循环,检测大写字母的个数,大写字母在2-4个范围内是有效的。


.text:00565B08 C7 45 F0 01 00 00+                   mov     [ebp+I], 1
.text:00565B0F
.text:00565B0F                   loc_565B0F:
.text:00565B0F 8B 45 F4                          mov     eax, [ebp+TmpS]
.text:00565B12 8B 55 F0                          mov     edx, [ebp+I]
.text:00565B15 66 8B 44 50 FE                      mov     ax, [eax+edx*2-2]
.text:00565B1A 66 89 45 EE                        mov     [ebp+var_12], ax
.text:00565B1E B8 DC 5B 56 00                      mov     eax, offset dword_565BDC
.text:00565B23 89 45 C4                          mov     [ebp+var_3C], eax
.text:00565B26 8B 45 C4                          mov     eax, [ebp+var_3C]
.text:00565B29 66 8B 55 EE                        mov     dx, [ebp+var_12]
.text:00565B2D 66 81 FA FF 00                      cmp     dx, 0FFh
.text:00565B32 77 09                            ja      short loc_565B3D
.text:00565B34 81 E2 FF 00 00 00                    and     edx, 0FFh
.text:00565B3A 0F A3 10                          bt      [eax], edx
.text:00565B3D
.text:00565B3D                   loc_565B3D:
.text:00565B3D 0F 92 C0                          setb    al
.text:00565B40 88 45 C3                          mov     [ebp+var_3D], al
.text:00565B43 80 7D C3 00                        cmp     [ebp+var_3D], 0
.text:00565B47 74 03                            jz      short loc_565B4C
.text:00565B49 FF 45 E4                          inc     [ebp+VowelCount];元音字母计数
.text:00565B4C
.text:00565B4C                   loc_565B4C:
.text:00565B4C FF 45 F0                          inc     [ebp+I]
.text:00565B4F FF 4D E0                          dec     [ebp+var_20]
.text:00565B52 75 BB                            jnz     short loc_565B0F
.text:00565B54
.text:00565B54                   loc_565B54:
.text:00565B54 83 7D E4 02                       cmp     [ebp+VowelCount], 2;小于2个无效
.text:00565B58 7D 04                           jge     short Exit
.text:00565B5A C6 45 FB 01                       mov     [ebp+Result], 1
.text:00565B5E
.text:00565B5E                   Exit:


这还是个for循环,检测元音字母的个数,必须2个以上有效。

结论:名称必须全部由字母组成,并且含2-4个大写字母和不少于2个元音字母。

5、校验码
校验码由名称通过计算CRC32得到,作者在程序中有个Bug,是由Ansi字符程序转到Unicode字符程序时留下的。
目前程序是Unicode字符的,名称的每个字母由两个字节组成,但在计算时又按Ansi方式进行,这样只计算了名称的一半,每个字母多出的字节0也进行了计算。
因此我们只能讲错就错!
计算得到的CRC32码,转换成8位十六进制值,就是校验码了。

6、提供一枚捐赠码玩玩
PoJie-022ED495
在上个界面输入这个捐赠码,出现如下感谢信息:


7、好了,到此,Free版真正完美升级到了Plus版!


8、为好事者准备的礼物!
有好事者将原作者的软件进行汉化破解,再包装。
现在破解不必了,还是原汁原味用原作者的东西吧!
进行汉化包装,执行以下注册表代码,Free版就是Plus版了!

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\ZHS]

[HKEY_CURRENT_USER\SOFTWARE\ZHS\IE]

"IE1942781259513"="PoJie-022ED495"



这是我做的捐赠码产生器,没啥必要发布了,除非原作者将PoJie名称也加入非法名称!

强调:
组合键必须在捐赠界面输入才起作用!

按组合键方式:先按住Ctrl、Alt和Shift三个键,再按I键。


组合按键是:Ctrl-Alt-Shift-I

转载自:https://www.52pojie.cn/thread-1459729-1-1.html

版权声明:
作者:RuyeNet
链接:https://www.iloveu.top/archives/157
来源:RuyeNet
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录