飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3792|回复: 0

[原创] 网络黑白棋(翻转棋)2.0注册算法分析

[复制链接]

该用户从未签到

发表于 2007-11-10 16:10:41 | 显示全部楼层 |阅读模式
网络黑白棋(翻转棋)2.0注册算法分析

网络黑白棋是广泛流行的益智类游戏,又名翻转棋、反棋、奥赛罗棋、苹果棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。
主要特点:
1、可以进行人机对战,即玩家和电脑对战,您可以和电脑比比智力,可选择电脑的水平等级。
2、可以进行两人游戏,即两个玩家通过网络进行较量,网络对战支持聊天功能。
3、支持悔棋功能,悔棋步数不限;两人通过网络进行对战时,一方要悔棋时需得到对方的回应(即同意)才能悔棋。
4、软件界面极酷,游戏信息和提示显示齐全,操作简单,交互友好。
5、可以随时更换棋盘和棋子的样式。



软件在未注册的状态下,每次退出时会弹出一个NAG提示对话框;先打开注册窗口,输入注册名:aCaFeeL,输入注册码:12345678,点击[完成注册]按钮,程序提示注册失败;确定软件为VB编写并用了tElock 0.98b1 -> tE!加壳,将其脱壳之后,用od载入,按F9键运行程序后,再打开注册窗口,再次输入上面的测试注册名和测试注册码后,下断点: BPx rtcMsgBox,然后点击[完成注册]按钮,此时程序被中断下来,顺着被中断的地方向上查看,发现错误信息是从 0046EDA7 处跳转过来的,于是来到这里后,发现如下的代码:

》》》》》》
(省略...)
0046ED60   .  50                      push    eax
0046ED61   .  E8 4AE2FFFF             call    a.0046CFB0                              ;  决定了ax的结果,F7进入
0046ED66   .  33C9                    xor     ecx, ecx                                ;  ecx 清零
0046ED68   .  66:3D FFFF              cmp     ax, 0FFFF                               ;  ax 与 0FFFF 比较
0046ED6C   .  0F94C1                  sete    cl                                      ;  设置cl结果
0046ED6F   .  F7D9                    neg     ecx                                     ;  对ecx进行取补
0046ED71   .  66:898D 38FFFFFF        mov     word ptr [ebp-C8], cx                   ;  -> [ebp-C8] 中
0046ED78   .  8D4D D8                 lea     ecx, dword ptr [ebp-28]
0046ED7B   .  FF15 A0124000           call    dword ptr [<&MSVBVM60.__vbaFreeStr>]    ;  MSVBVM60.__vbaFreeStr
0046ED81   .  8D4D D0                 lea     ecx, dword ptr [ebp-30]
0046ED84   .  FF15 9C124000           call    dword ptr [<&MSVBVM60.__vbaFreeObj>]    ;  MSVBVM60.__vbaFreeObj
0046ED8A   .  66:399D 38FFFFFF        cmp     word ptr [ebp-C8], bx
0046ED91   .  B9 04000280             mov     ecx, 80020004
0046ED96   .  B8 0A000000             mov     eax, 0A
0046ED9B   .  894D 94                 mov     dword ptr [ebp-6C], ecx
0046ED9E   .  8945 8C                 mov     dword ptr [ebp-74], eax
0046EDA1   .  894D A4                 mov     dword ptr [ebp-5C], ecx
0046EDA4   .  8945 9C                 mov     dword ptr [ebp-64], eax
0046EDA7      0F84 47050000           je      a.0046F2F4                              ;  这里便是跳向错误的跳转
0046EDAD   .  8D95 7CFFFFFF           lea     edx, dword ptr [ebp-84]
(省略...)
》》》》》》


从上面可知道,要分析算法,需要进入 0046ED61 地址的:

0046ED61   .  E8 4AE2FFFF             call    a.0046CFB0

在这里再用F2键下断,用OD重新载入程序后,F9键运行,再次重复上面的步骤,便断在了这里,按F7建进入该子程序后:

》》》》》》
0046CFB0   $  55                      push    ebp                                     ;  注册算法开始
0046CFB1   .  8BEC                    mov     ebp, esp
0046CFB3   .  83EC 08                 sub     esp, 8
0046CFB6   .  68 C61F4000             push    <a.__vbaExceptHandler>
0046CFBB   .  64:A1 00000000          mov     eax, dword ptr fs:[0]
0046CFC1   .  50                      push    eax
0046CFC2   .  64:8925 00000000        mov     dword ptr fs:[0], esp
0046CFC9   .  81EC A0000000           sub     esp, 0A0
0046CFCF   .  53                      push    ebx
0046CFD0   .  56                      push    esi
0046CFD1   .  57                      push    edi
0046CFD2   .  8965 F8                 mov     dword ptr [ebp-8], esp
0046CFD5   .  C745 FC 681A4000        mov     dword ptr [ebp-4], a.00401A68
0046CFDC   .  8B75 08                 mov     esi, dword ptr [ebp+8]
0046CFDF   .  33FF                    xor     edi, edi
0046CFE1   .  897D E8                 mov     dword ptr [ebp-18], edi
0046CFE4   .  897D E4                 mov     dword ptr [ebp-1C], edi
0046CFE7   .  8B06                    mov     eax, dword ptr [esi]
0046CFE9   .  897D D4                 mov     dword ptr [ebp-2C], edi
0046CFEC   .  50                      push    eax
0046CFED   .  897D C4                 mov     dword ptr [ebp-3C], edi
0046CFF0   .  897D B4                 mov     dword ptr [ebp-4C], edi
0046CFF3   .  897D A4                 mov     dword ptr [ebp-5C], edi
0046CFF6   .  897D 94                 mov     dword ptr [ebp-6C], edi
0046CFF9   .  897D 84                 mov     dword ptr [ebp-7C], edi
0046CFFC   .  89BD 74FFFFFF           mov     dword ptr [ebp-8C], edi
0046D002   .  FF15 38104000           call    dword ptr [<&MSVBVM60.__vbaLenBstr>]    ;  得到注册码的长度 -> eax
0046D008   .  33C9                    xor     ecx, ecx
0046D00A   .  83F8 10                 cmp     eax, 10                                 ;  eax是否为16位
0046D00D   .  0F94C1                  sete    cl                                      ;  相等,cl设置1
0046D010   .  8D55 94                 lea     edx, dword ptr [ebp-6C]
0046D013   .  6A 06                   push    6
0046D015   .  8D45 D4                 lea     eax, dword ptr [ebp-2C]
0046D018   .  52                      push    edx
0046D019   .  F7D9                    neg     ecx
0046D01B   .  50                      push    eax
0046D01C   .  66:898D 7CFFFFFF        mov     word ptr [ebp-84], cx
0046D023   .  C785 74FFFFFF 0B000000  mov     dword ptr [ebp-8C], 0B                  ;  长度为12(因为是UNICODE)
0046D02D   .  8975 9C                 mov     dword ptr [ebp-64], esi
0046D030   .  C745 94 08400000        mov     dword ptr [ebp-6C], 4008
0046D037   .  FF15 54124000           call    dword ptr [<&MSVBVM60.rtcLeftCharVar>]  ;  取注册码左边的12/2=6个字符
0046D03D   .  8D8D 74FFFFFF           lea     ecx, dword ptr [ebp-8C]
0046D043   .  8D55 D4                 lea     edx, dword ptr [ebp-2C]
0046D046   .  51                      push    ecx
0046D047   .  8D45 84                 lea     eax, dword ptr [ebp-7C]
0046D04A   .  52                      push    edx
0046D04B   .  8D4D C4                 lea     ecx, dword ptr [ebp-3C]
0046D04E   .  50                      push    eax
0046D04F   .  51                      push    ecx
0046D050   .  C745 8C 84BF4000        mov     dword ptr [ebp-74], a.0040BF84          ;  注意a.0040BF84的'BWCV20'
0046D057   .  C745 84 08800000        mov     dword ptr [ebp-7C], 8008
0046D05E   .  FF15 2C124000           call    dword ptr [<&MSVBVM60.__vbaVarCmpEq>]   ;  注册码左边6位字符是否为'BWCV20'
0046D064   .  8D55 B4                 lea     edx, dword ptr [ebp-4C]
0046D067   .  50                      push    eax
0046D068   .  52                      push    edx
0046D069   .  FF15 54114000           call    dword ptr [<&MSVBVM60.__vbaVarAnd>]     ;  MSVBVM60.__vbaVarAnd
0046D06F   .  50                      push    eax
0046D070   .  FF15 D8104000           call    dword ptr [<&MSVBVM60.__vbaBoolVarNull>>;  MSVBVM60.__vbaBoolVarNull
0046D076   .  8BD8                    mov     ebx, eax
0046D078   .  8D85 74FFFFFF           lea     eax, dword ptr [ebp-8C]
0046D07E   .  8D4D D4                 lea     ecx, dword ptr [ebp-2C]
0046D081   .  50                      push    eax
0046D082   .  51                      push    ecx
0046D083   .  6A 02                   push    2
0046D085   .  FF15 44104000           call    dword ptr [<&MSVBVM60.__vbaFreeVarList>>;  MSVBVM60.__vbaFreeVarList
0046D08B   .  83C4 0C                 add     esp, 0C
0046D08E   .  66:3BDF                 cmp     bx, di
0046D091      0F84 90030000           je      a.0046D427                              ;  没有'BWCV20',则跳走
0046D097   .  8B3D E4104000           mov     edi, dword ptr [<&MSVBVM60.rtcMidCharVa>;  MSVBVM60.rtcMidCharVar
0046D09D   .  8D55 D4                 lea     edx, dword ptr [ebp-2C]
0046D0A0   .  52                      push    edx
0046D0A1   .  8D45 94                 lea     eax, dword ptr [ebp-6C]
0046D0A4   .  6A 07                   push    7
0046D0A6   .  8D4D C4                 lea     ecx, dword ptr [ebp-3C]
0046D0A9   .  50                      push    eax
0046D0AA   .  51                      push    ecx
0046D0AB   .  C745 DC 01000000        mov     dword ptr [ebp-24], 1
0046D0B2   .  C745 D4 02000000        mov     dword ptr [ebp-2C], 2                   ;  长度为2(因为是UNICODE)
0046D0B9   .  8975 9C                 mov     dword ptr [ebp-64], esi
0046D0BC   .  C745 94 08400000        mov     dword ptr [ebp-6C], 4008
0046D0C3   .  FFD7                    call    edi                                     ;  取注册码的2/2=1个字符
0046D0C5   .  8B1D AC114000           mov     ebx, dword ptr [<&MSVBVM60.__vbaStrVarV>;  MSVBVM60.__vbaStrVarVal
0046D0CB   .  8D55 C4                 lea     edx, dword ptr [ebp-3C]
0046D0CE   .  8D45 E8                 lea     eax, dword ptr [ebp-18]
0046D0D1   .  52                      push    edx
0046D0D2   .  50                      push    eax
0046D0D3   .  FFD3                    call    ebx                                     ;  <&MSVBVM60.__vbaStrVarVal>
0046D0D5   .  50                      push    eax                                     ;  eax 所指的字符
0046D0D6   .  FF15 A4124000           call    dword ptr [<&MSVBVM60.rtcR8ValFromBstr>>;  第7位字符->实数(ST0)
0046D0DC   .  DC05 601A4000           fadd    qword ptr [401A60]                      ;  ST0 + 2.000000000000000;
0046D0E2   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D0E4   .  A8 0D                   test    al, 0D                                  ;  = OD?
0046D0E6   .  0F85 95030000           jnz     a.0046D481
0046D0EC   .  FF15 D4104000           call    dword ptr [<&MSVBVM60.__vbaFpR8>]       ;  MSVBVM60.__vbaFpR8
0046D0F2   .  DC1D 70194000           fcomp   qword ptr [401970]                      ;  ST0 比较 3.000000000000000;
0046D0F8   .  C785 58FFFFFF 01000000  mov     dword ptr [ebp-A8], 1
0046D102   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D104   .  F6C4 40                 test    ah, 40
0046D107      75 0A                   jnz     short a.0046D113                        ;  跳
0046D109   .  C785 58FFFFFF 00000000  mov     dword ptr [ebp-A8], 0
0046D113   >  8D4D B4                 lea     ecx, dword ptr [ebp-4C]
0046D116   .  8D95 74FFFFFF           lea     edx, dword ptr [ebp-8C]
0046D11C   .  51                      push    ecx
0046D11D   .  6A 07                   push    7
0046D11F   .  8D45 A4                 lea     eax, dword ptr [ebp-5C]
0046D122   .  52                      push    edx
0046D123   .  50                      push    eax
0046D124   .  C745 BC 01000000        mov     dword ptr [ebp-44], 1
0046D12B   .  C745 B4 02000000        mov     dword ptr [ebp-4C], 2                   ;  长度为2(因为是UNICODE)
0046D132   .  89B5 7CFFFFFF           mov     dword ptr [ebp-84], esi
0046D138   .  C785 74FFFFFF 08400000  mov     dword ptr [ebp-8C], 4008
0046D142   .  FFD7                    call    edi                                     ;  取注册码的2/2=1个字符
0046D144   .  8D4D A4                 lea     ecx, dword ptr [ebp-5C]
0046D147   .  8D55 E4                 lea     edx, dword ptr [ebp-1C]
0046D14A   .  51                      push    ecx
0046D14B   .  52                      push    edx
0046D14C   .  FFD3                    call    ebx
0046D14E   .  50                      push    eax                                     ;  eax 所指的字符
0046D14F   .  FF15 A4124000           call    dword ptr [<&MSVBVM60.rtcR8ValFromBstr>>;  第7位数值->实数(ST0)
0046D155   .  DC25 601A4000           fsub    qword ptr [401A60]                      ;  ST0 - 2.000000000000000;
0046D15B   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D15D   .  A8 0D                   test    al, 0D
0046D15F   .  0F85 1C030000           jnz     a.0046D481
0046D165   .  FF15 D4104000           call    dword ptr [<&MSVBVM60.__vbaFpR8>]       ;  MSVBVM60.__vbaFpR8
0046D16B   .  DC1D 70194000           fcomp   qword ptr [401970]                      ;  ST0 比较 3.000000000000000;
0046D171   .  DFE0                    fstsw   ax
0046D173   .  F6C4 40                 test    ah, 40
0046D176      74 07                   je      short a.0046D17F
0046D178   .  B8 01000000             mov     eax, 1
0046D17D   .  EB 02                   jmp     short a.0046D181
0046D17F   >  33C0                    xor     eax, eax
0046D181   >  8B8D 58FFFFFF           mov     ecx, dword ptr [ebp-A8]
0046D187   .  F7D8                    neg     eax
0046D189   .  F7D9                    neg     ecx
0046D18B   .  0BC1                    or      eax, ecx
0046D18D   .  8D4D E8                 lea     ecx, dword ptr [ebp-18]
0046D190   .  8985 60FFFFFF           mov     dword ptr [ebp-A0], eax
0046D196   .  8D45 E4                 lea     eax, dword ptr [ebp-1C]
0046D199   .  50                      push    eax
0046D19A   .  51                      push    ecx
0046D19B   .  6A 02                   push    2
0046D19D   .  FF15 08124000           call    dword ptr [<&MSVBVM60.__vbaFreeStrList>>;  MSVBVM60.__vbaFreeStrList
0046D1A3   .  8D55 A4                 lea     edx, dword ptr [ebp-5C]
0046D1A6   .  8D45 B4                 lea     eax, dword ptr [ebp-4C]
0046D1A9   .  52                      push    edx
0046D1AA   .  8D4D C4                 lea     ecx, dword ptr [ebp-3C]
0046D1AD   .  50                      push    eax
0046D1AE   .  8D55 D4                 lea     edx, dword ptr [ebp-2C]
0046D1B1   .  51                      push    ecx
0046D1B2   .  52                      push    edx
0046D1B3   .  6A 04                   push    4
0046D1B5   .  FF15 44104000           call    dword ptr [<&MSVBVM60.__vbaFreeVarList>>;  MSVBVM60.__vbaFreeVarList
0046D1BB   .  83C4 20                 add     esp, 20
0046D1BE   .  66:83BD 60FFFFFF 00     cmp     word ptr [ebp-A0], 0
0046D1C6   .  0F84 5B020000           je      a.0046D427
0046D1CC   .  8D45 D4                 lea     eax, dword ptr [ebp-2C]
0046D1CF   .  8D4D 94                 lea     ecx, dword ptr [ebp-6C]
0046D1D2   .  50                      push    eax
0046D1D3   .  6A 0A                   push    0A
0046D1D5   .  8D55 C4                 lea     edx, dword ptr [ebp-3C]
0046D1D8   .  51                      push    ecx
0046D1D9   .  52                      push    edx
0046D1DA   .  C745 DC 01000000        mov     dword ptr [ebp-24], 1
0046D1E1   .  C745 D4 02000000        mov     dword ptr [ebp-2C], 2                   ;  长度为2(因为是UNICODE)
0046D1E8   .  8975 9C                 mov     dword ptr [ebp-64], esi
0046D1EB   .  C745 94 08400000        mov     dword ptr [ebp-6C], 4008
0046D1F2   .  FFD7                    call    edi                                     ;  取注册码的2/2=1个字符
0046D1F4   .  8D45 C4                 lea     eax, dword ptr [ebp-3C]
0046D1F7   .  8D4D E8                 lea     ecx, dword ptr [ebp-18]
0046D1FA   .  50                      push    eax
0046D1FB   .  51                      push    ecx
0046D1FC   .  FFD3                    call    ebx
0046D1FE   .  50                      push    eax                                     ;  eax 所指的字符
0046D1FF   .  FF15 A4124000           call    dword ptr [<&MSVBVM60.rtcR8ValFromBstr>>;  第10位数值->实数(ST0)
0046D205   .  DC05 601A4000           fadd    qword ptr [401A60]                      ;  ST0 + 2.000000000000000;
0046D20B   .  DFE0                    fstsw   ax
0046D20D   .  A8 0D                   test    al, 0D
0046D20F   .  0F85 6C020000           jnz     a.0046D481
0046D215   .  FF15 D4104000           call    dword ptr [<&MSVBVM60.__vbaFpR8>]       ;  MSVBVM60.__vbaFpR8
0046D21B   .  DC1D 581A4000           fcomp   qword ptr [401A58]                      ;  ST0 比较 7.000000000000000;
0046D221   .  C785 54FFFFFF 01000000  mov     dword ptr [ebp-AC], 1
0046D22B   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D22D   .  F6C4 40                 test    ah, 40
0046D230      75 0A                   jnz     short a.0046D23C                        ;  跳
0046D232   .  C785 54FFFFFF 00000000  mov     dword ptr [ebp-AC], 0
0046D23C   >  8D55 B4                 lea     edx, dword ptr [ebp-4C]
0046D23F   .  8D85 74FFFFFF           lea     eax, dword ptr [ebp-8C]
0046D245   .  52                      push    edx
0046D246   .  6A 0A                   push    0A
0046D248   .  8D4D A4                 lea     ecx, dword ptr [ebp-5C]
0046D24B   .  50                      push    eax
0046D24C   .  51                      push    ecx
0046D24D   .  C745 BC 01000000        mov     dword ptr [ebp-44], 1
0046D254   .  C745 B4 02000000        mov     dword ptr [ebp-4C], 2                   ;  长度为2(因为是UNICODE)
0046D25B   .  89B5 7CFFFFFF           mov     dword ptr [ebp-84], esi
0046D261   .  C785 74FFFFFF 08400000  mov     dword ptr [ebp-8C], 4008
0046D26B   .  FFD7                    call    edi                                     ;  取注册码的2/2=1个字符
0046D26D   .  8D55 A4                 lea     edx, dword ptr [ebp-5C]
0046D270   .  8D45 E4                 lea     eax, dword ptr [ebp-1C]
0046D273   .  52                      push    edx
0046D274   .  50                      push    eax
0046D275   .  FFD3                    call    ebx
0046D277   .  50                      push    eax                                     ;  eax 所指的字符
0046D278   .  FF15 A4124000           call    dword ptr [<&MSVBVM60.rtcR8ValFromBstr>>;  第10位数值->实数(ST0)
0046D27E   .  DC25 601A4000           fsub    qword ptr [401A60]                      ;  ST0 - 2.000000000000000;
0046D284   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D286   .  A8 0D                   test    al, 0D
0046D288   .  0F85 F3010000           jnz     a.0046D481
0046D28E   .  FF15 D4104000           call    dword ptr [<&MSVBVM60.__vbaFpR8>]       ;  MSVBVM60.__vbaFpR8
0046D294   .  DC1D 581A4000           fcomp   qword ptr [401A58]                      ;  ST0 比较 7.000000000000000;
0046D29A   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D29C   .  F6C4 40                 test    ah, 40
0046D29F      74 07                   je      short a.0046D2A8
0046D2A1   .  B8 01000000             mov     eax, 1
0046D2A6   .  EB 02                   jmp     short a.0046D2AA
0046D2A8   >  33C0                    xor     eax, eax
0046D2AA   >  8B8D 54FFFFFF           mov     ecx, dword ptr [ebp-AC]
0046D2B0   .  8D55 E8                 lea     edx, dword ptr [ebp-18]
0046D2B3   .  F7D8                    neg     eax
0046D2B5   .  F7D9                    neg     ecx
0046D2B7   .  0BC1                    or      eax, ecx
0046D2B9   .  8D4D E4                 lea     ecx, dword ptr [ebp-1C]
0046D2BC   .  51                      push    ecx
0046D2BD   .  52                      push    edx
0046D2BE   .  6A 02                   push    2
0046D2C0   .  8985 60FFFFFF           mov     dword ptr [ebp-A0], eax
0046D2C6   .  FF15 08124000           call    dword ptr [<&MSVBVM60.__vbaFreeStrList>>;  MSVBVM60.__vbaFreeStrList
0046D2CC   .  8D45 A4                 lea     eax, dword ptr [ebp-5C]
0046D2CF   .  8D4D B4                 lea     ecx, dword ptr [ebp-4C]
0046D2D2   .  50                      push    eax
0046D2D3   .  8D55 C4                 lea     edx, dword ptr [ebp-3C]
0046D2D6   .  51                      push    ecx
0046D2D7   .  8D45 D4                 lea     eax, dword ptr [ebp-2C]
0046D2DA   .  52                      push    edx
0046D2DB   .  50                      push    eax
0046D2DC   .  6A 04                   push    4
0046D2DE   .  FF15 44104000           call    dword ptr [<&MSVBVM60.__vbaFreeVarList>>;  MSVBVM60.__vbaFreeVarList
0046D2E4   .  83C4 20                 add     esp, 20
0046D2E7   .  66:83BD 60FFFFFF 00     cmp     word ptr [ebp-A0], 0
0046D2EF      0F84 32010000           je      a.0046D427
0046D2F5   .  8D4D D4                 lea     ecx, dword ptr [ebp-2C]
0046D2F8   .  8D55 94                 lea     edx, dword ptr [ebp-6C]
0046D2FB   .  51                      push    ecx
0046D2FC   .  6A 0F                   push    0F
0046D2FE   .  8D45 C4                 lea     eax, dword ptr [ebp-3C]
0046D301   .  52                      push    edx
0046D302   .  50                      push    eax
0046D303   .  C745 DC 01000000        mov     dword ptr [ebp-24], 1
0046D30A   .  C745 D4 02000000        mov     dword ptr [ebp-2C], 2                   ;  长度为2(因为是UNICODE)
0046D311   .  8975 9C                 mov     dword ptr [ebp-64], esi
0046D314   .  C745 94 08400000        mov     dword ptr [ebp-6C], 4008
0046D31B   .  FFD7                    call    edi                                     ;  取注册码的2/2=1个字符
0046D31D   .  8D4D C4                 lea     ecx, dword ptr [ebp-3C]
0046D320   .  8D55 E8                 lea     edx, dword ptr [ebp-18]
0046D323   .  51                      push    ecx
0046D324   .  52                      push    edx
0046D325   .  FFD3                    call    ebx
0046D327   .  50                      push    eax                                     ;  eax 所指的字符
0046D328   .  FF15 A4124000           call    dword ptr [<&MSVBVM60.rtcR8ValFromBstr>>;  第15位数值->实数(ST0)
0046D32E   .  DC05 601A4000           fadd    qword ptr [401A60]                      ;  ST0 + 2.000000000000000;
0046D334   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D336   .  A8 0D                   test    al, 0D
0046D338   .  0F85 43010000           jnz     a.0046D481
0046D33E   .  FF15 D4104000           call    dword ptr [<&MSVBVM60.__vbaFpR8>]       ;  MSVBVM60.__vbaFpR8
0046D344   .  DC1D 601A4000           fcomp   qword ptr [401A60]                      ;  ST0 与 2.000000000000000 比较
0046D34A   .  C785 50FFFFFF 01000000  mov     dword ptr [ebp-B0], 1
0046D354   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D356   .  F6C4 40                 test    ah, 40
0046D359      75 0A                   jnz     short a.0046D365                        ;  跳
0046D35B   .  C785 50FFFFFF 00000000  mov     dword ptr [ebp-B0], 0
0046D365   >  8D45 B4                 lea     eax, dword ptr [ebp-4C]
0046D368   .  8D8D 74FFFFFF           lea     ecx, dword ptr [ebp-8C]
0046D36E   .  50                      push    eax
0046D36F   .  6A 0F                   push    0F
0046D371   .  8D55 A4                 lea     edx, dword ptr [ebp-5C]
0046D374   .  51                      push    ecx
0046D375   .  52                      push    edx
0046D376   .  C745 BC 01000000        mov     dword ptr [ebp-44], 1
0046D37D   .  C745 B4 02000000        mov     dword ptr [ebp-4C], 2                   ;  长度为2(因为是UNICODE)
0046D384   .  89B5 7CFFFFFF           mov     dword ptr [ebp-84], esi
0046D38A   .  C785 74FFFFFF 08400000  mov     dword ptr [ebp-8C], 4008
0046D394   .  FFD7                    call    edi                                     ;  取注册码的2/2=1个字符
0046D396   .  8D45 A4                 lea     eax, dword ptr [ebp-5C]
0046D399   .  8D4D E4                 lea     ecx, dword ptr [ebp-1C]
0046D39C   .  50                      push    eax
0046D39D   .  51                      push    ecx
0046D39E   .  FFD3                    call    ebx
0046D3A0   .  50                      push    eax                                     ;  eax 所指的字符
0046D3A1   .  FF15 A4124000           call    dword ptr [<&MSVBVM60.rtcR8ValFromBstr>>;  第15位数值->实数(ST0)
0046D3A7   .  DC25 601A4000           fsub    qword ptr [401A60]                      ;  ST0 - 2.000000000000000;
0046D3AD   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D3AF   .  A8 0D                   test    al, 0D
0046D3B1   .  0F85 CA000000           jnz     a.0046D481
0046D3B7   .  FF15 D4104000           call    dword ptr [<&MSVBVM60.__vbaFpR8>]       ;  MSVBVM60.__vbaFpR8
0046D3BD   .  DC1D 601A4000           fcomp   qword ptr [401A60]                      ;  ST0 与 2.000000000000000 比较
0046D3C3   .  DFE0                    fstsw   ax                                      ;  FST -> ax
0046D3C5   .  F6C4 40                 test    ah, 40
0046D3C8      74 07                   je      short a.0046D3D1
0046D3CA   .  B8 01000000             mov     eax, 1
0046D3CF   .  EB 02                   jmp     short a.0046D3D3
(省略...)
》》》》》》


通过上面的分析,我们知道了其注册算法的方式为:

注册码的长度是由16个字符组成的;
注册码的前6位字符固定为:BWCV20;
注册码的第 7位数字 + 2 或 -2 的后的结果必须为 3;故注册码的第 7位数字为:1或者5;
注册码的第10位数字 + 2 或 -2 的后的结果必须为 7;故注册码的第10位数字为:5或者9;
注册码的第15位数字 + 2 或 -2 的后的结果必须为 2;故注册码的第15位数字为:0或者4;
剩下的则必须为数字,便可以了。而注册名没有参与运算,呵呵。

放上一组可用的Key:
注册名:aCaFeeL
注册码:BWCV201005000000


好的,就到这里结束吧!最后不要忘了哈:BPD rtcMsgBox,嘿嘿!
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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