- UID
- 3526
注册时间2005-10-6
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
网络黑白棋(翻转棋)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,嘿嘿! |
|