acafeel 发表于 2007-11-10 16:10:41

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

网络黑白棋(翻转棋)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 , cx                   ;-> 中
0046ED78   .8D4D D8               lea   ecx, dword ptr
0046ED7B   .FF15 A0124000         call    dword ptr [<&MSVBVM60.__vbaFreeStr>]    ;MSVBVM60.__vbaFreeStr
0046ED81   .8D4D D0               lea   ecx, dword ptr
0046ED84   .FF15 9C124000         call    dword ptr [<&MSVBVM60.__vbaFreeObj>]    ;MSVBVM60.__vbaFreeObj
0046ED8A   .66:399D 38FFFFFF      cmp   word ptr , bx
0046ED91   .B9 04000280             mov   ecx, 80020004
0046ED96   .B8 0A000000             mov   eax, 0A
0046ED9B   .894D 94               mov   dword ptr , ecx
0046ED9E   .8945 8C               mov   dword ptr , eax
0046EDA1   .894D A4               mov   dword ptr , ecx
0046EDA4   .8945 9C               mov   dword ptr , eax
0046EDA7      0F84 47050000         je      a.0046F2F4                              ;这里便是跳向错误的跳转
0046EDAD   .8D95 7CFFFFFF         lea   edx, dword ptr
(省略...)
》》》》》》


从上面可知道,要分析算法,需要进入 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:
0046CFC1   .50                      push    eax
0046CFC2   .64:8925 00000000      mov   dword ptr fs:, 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 , esp
0046CFD5   .C745 FC 681A4000      mov   dword ptr , a.00401A68
0046CFDC   .8B75 08               mov   esi, dword ptr
0046CFDF   .33FF                  xor   edi, edi
0046CFE1   .897D E8               mov   dword ptr , edi
0046CFE4   .897D E4               mov   dword ptr , edi
0046CFE7   .8B06                  mov   eax, dword ptr
0046CFE9   .897D D4               mov   dword ptr , edi
0046CFEC   .50                      push    eax
0046CFED   .897D C4               mov   dword ptr , edi
0046CFF0   .897D B4               mov   dword ptr , edi
0046CFF3   .897D A4               mov   dword ptr , edi
0046CFF6   .897D 94               mov   dword ptr , edi
0046CFF9   .897D 84               mov   dword ptr , edi
0046CFFC   .89BD 74FFFFFF         mov   dword ptr , 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
0046D013   .6A 06                   push    6
0046D015   .8D45 D4               lea   eax, dword ptr
0046D018   .52                      push    edx
0046D019   .F7D9                  neg   ecx
0046D01B   .50                      push    eax
0046D01C   .66:898D 7CFFFFFF      mov   word ptr , cx
0046D023   .C785 74FFFFFF 0B000000mov   dword ptr , 0B                  ;长度为12(因为是UNICODE)
0046D02D   .8975 9C               mov   dword ptr , esi
0046D030   .C745 94 08400000      mov   dword ptr , 4008
0046D037   .FF15 54124000         call    dword ptr [<&MSVBVM60.rtcLeftCharVar>];取注册码左边的12/2=6个字符
0046D03D   .8D8D 74FFFFFF         lea   ecx, dword ptr
0046D043   .8D55 D4               lea   edx, dword ptr
0046D046   .51                      push    ecx
0046D047   .8D45 84               lea   eax, dword ptr
0046D04A   .52                      push    edx
0046D04B   .8D4D C4               lea   ecx, dword ptr
0046D04E   .50                      push    eax
0046D04F   .51                      push    ecx
0046D050   .C745 8C 84BF4000      mov   dword ptr , a.0040BF84          ;注意a.0040BF84的'BWCV20'
0046D057   .C745 84 08800000      mov   dword ptr , 8008
0046D05E   .FF15 2C124000         call    dword ptr [<&MSVBVM60.__vbaVarCmpEq>]   ;注册码左边6位字符是否为'BWCV20'
0046D064   .8D55 B4               lea   edx, dword ptr
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
0046D07E   .8D4D D4               lea   ecx, dword ptr
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
0046D0A0   .52                      push    edx
0046D0A1   .8D45 94               lea   eax, dword ptr
0046D0A4   .6A 07                   push    7
0046D0A6   .8D4D C4               lea   ecx, dword ptr
0046D0A9   .50                      push    eax
0046D0AA   .51                      push    ecx
0046D0AB   .C745 DC 01000000      mov   dword ptr , 1
0046D0B2   .C745 D4 02000000      mov   dword ptr , 2                   ;长度为2(因为是UNICODE)
0046D0B9   .8975 9C               mov   dword ptr , esi
0046D0BC   .C745 94 08400000      mov   dword ptr , 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
0046D0CE   .8D45 E8               lea   eax, dword ptr
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                       ;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                       ;ST0 比较 3.000000000000000;
0046D0F8   .C785 58FFFFFF 01000000mov   dword ptr , 1
0046D102   .DFE0                  fstsw   ax                                    ;FST -> ax
0046D104   .F6C4 40               test    ah, 40
0046D107      75 0A                   jnz   short a.0046D113                        ;跳
0046D109   .C785 58FFFFFF 00000000mov   dword ptr , 0
0046D113   >8D4D B4               lea   ecx, dword ptr
0046D116   .8D95 74FFFFFF         lea   edx, dword ptr
0046D11C   .51                      push    ecx
0046D11D   .6A 07                   push    7
0046D11F   .8D45 A4               lea   eax, dword ptr
0046D122   .52                      push    edx
0046D123   .50                      push    eax
0046D124   .C745 BC 01000000      mov   dword ptr , 1
0046D12B   .C745 B4 02000000      mov   dword ptr , 2                   ;长度为2(因为是UNICODE)
0046D132   .89B5 7CFFFFFF         mov   dword ptr , esi
0046D138   .C785 74FFFFFF 08400000mov   dword ptr , 4008
0046D142   .FFD7                  call    edi                                     ;取注册码的2/2=1个字符
0046D144   .8D4D A4               lea   ecx, dword ptr
0046D147   .8D55 E4               lea   edx, dword ptr
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                       ;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                       ;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
0046D187   .F7D8                  neg   eax
0046D189   .F7D9                  neg   ecx
0046D18B   .0BC1                  or      eax, ecx
0046D18D   .8D4D E8               lea   ecx, dword ptr
0046D190   .8985 60FFFFFF         mov   dword ptr , eax
0046D196   .8D45 E4               lea   eax, dword ptr
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
0046D1A6   .8D45 B4               lea   eax, dword ptr
0046D1A9   .52                      push    edx
0046D1AA   .8D4D C4               lea   ecx, dword ptr
0046D1AD   .50                      push    eax
0046D1AE   .8D55 D4               lea   edx, dword ptr
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 , 0
0046D1C6   .0F84 5B020000         je      a.0046D427
0046D1CC   .8D45 D4               lea   eax, dword ptr
0046D1CF   .8D4D 94               lea   ecx, dword ptr
0046D1D2   .50                      push    eax
0046D1D3   .6A 0A                   push    0A
0046D1D5   .8D55 C4               lea   edx, dword ptr
0046D1D8   .51                      push    ecx
0046D1D9   .52                      push    edx
0046D1DA   .C745 DC 01000000      mov   dword ptr , 1
0046D1E1   .C745 D4 02000000      mov   dword ptr , 2                   ;长度为2(因为是UNICODE)
0046D1E8   .8975 9C               mov   dword ptr , esi
0046D1EB   .C745 94 08400000      mov   dword ptr , 4008
0046D1F2   .FFD7                  call    edi                                     ;取注册码的2/2=1个字符
0046D1F4   .8D45 C4               lea   eax, dword ptr
0046D1F7   .8D4D E8               lea   ecx, dword ptr
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                       ;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                       ;ST0 比较 7.000000000000000;
0046D221   .C785 54FFFFFF 01000000mov   dword ptr , 1
0046D22B   .DFE0                  fstsw   ax                                    ;FST -> ax
0046D22D   .F6C4 40               test    ah, 40
0046D230      75 0A                   jnz   short a.0046D23C                        ;跳
0046D232   .C785 54FFFFFF 00000000mov   dword ptr , 0
0046D23C   >8D55 B4               lea   edx, dword ptr
0046D23F   .8D85 74FFFFFF         lea   eax, dword ptr
0046D245   .52                      push    edx
0046D246   .6A 0A                   push    0A
0046D248   .8D4D A4               lea   ecx, dword ptr
0046D24B   .50                      push    eax
0046D24C   .51                      push    ecx
0046D24D   .C745 BC 01000000      mov   dword ptr , 1
0046D254   .C745 B4 02000000      mov   dword ptr , 2                   ;长度为2(因为是UNICODE)
0046D25B   .89B5 7CFFFFFF         mov   dword ptr , esi
0046D261   .C785 74FFFFFF 08400000mov   dword ptr , 4008
0046D26B   .FFD7                  call    edi                                     ;取注册码的2/2=1个字符
0046D26D   .8D55 A4               lea   edx, dword ptr
0046D270   .8D45 E4               lea   eax, dword ptr
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                       ;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                       ;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
0046D2B0   .8D55 E8               lea   edx, dword ptr
0046D2B3   .F7D8                  neg   eax
0046D2B5   .F7D9                  neg   ecx
0046D2B7   .0BC1                  or      eax, ecx
0046D2B9   .8D4D E4               lea   ecx, dword ptr
0046D2BC   .51                      push    ecx
0046D2BD   .52                      push    edx
0046D2BE   .6A 02                   push    2
0046D2C0   .8985 60FFFFFF         mov   dword ptr , eax
0046D2C6   .FF15 08124000         call    dword ptr [<&MSVBVM60.__vbaFreeStrList>>;MSVBVM60.__vbaFreeStrList
0046D2CC   .8D45 A4               lea   eax, dword ptr
0046D2CF   .8D4D B4               lea   ecx, dword ptr
0046D2D2   .50                      push    eax
0046D2D3   .8D55 C4               lea   edx, dword ptr
0046D2D6   .51                      push    ecx
0046D2D7   .8D45 D4               lea   eax, dword ptr
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 , 0
0046D2EF      0F84 32010000         je      a.0046D427
0046D2F5   .8D4D D4               lea   ecx, dword ptr
0046D2F8   .8D55 94               lea   edx, dword ptr
0046D2FB   .51                      push    ecx
0046D2FC   .6A 0F                   push    0F
0046D2FE   .8D45 C4               lea   eax, dword ptr
0046D301   .52                      push    edx
0046D302   .50                      push    eax
0046D303   .C745 DC 01000000      mov   dword ptr , 1
0046D30A   .C745 D4 02000000      mov   dword ptr , 2                   ;长度为2(因为是UNICODE)
0046D311   .8975 9C               mov   dword ptr , esi
0046D314   .C745 94 08400000      mov   dword ptr , 4008
0046D31B   .FFD7                  call    edi                                     ;取注册码的2/2=1个字符
0046D31D   .8D4D C4               lea   ecx, dword ptr
0046D320   .8D55 E8               lea   edx, dword ptr
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                       ;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                       ;ST0 与 2.000000000000000 比较
0046D34A   .C785 50FFFFFF 01000000mov   dword ptr , 1
0046D354   .DFE0                  fstsw   ax                                    ;FST -> ax
0046D356   .F6C4 40               test    ah, 40
0046D359      75 0A                   jnz   short a.0046D365                        ;跳
0046D35B   .C785 50FFFFFF 00000000mov   dword ptr , 0
0046D365   >8D45 B4               lea   eax, dword ptr
0046D368   .8D8D 74FFFFFF         lea   ecx, dword ptr
0046D36E   .50                      push    eax
0046D36F   .6A 0F                   push    0F
0046D371   .8D55 A4               lea   edx, dword ptr
0046D374   .51                      push    ecx
0046D375   .52                      push    edx
0046D376   .C745 BC 01000000      mov   dword ptr , 1
0046D37D   .C745 B4 02000000      mov   dword ptr , 2                   ;长度为2(因为是UNICODE)
0046D384   .89B5 7CFFFFFF         mov   dword ptr , esi
0046D38A   .C785 74FFFFFF 08400000mov   dword ptr , 4008
0046D394   .FFD7                  call    edi                                     ;取注册码的2/2=1个字符
0046D396   .8D45 A4               lea   eax, dword ptr
0046D399   .8D4D E4               lea   ecx, dword ptr
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                       ;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                       ;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,嘿嘿!
页: [1]
查看完整版本: 网络黑白棋(翻转棋)2.0注册算法分析