五子棋终结者1.0正式版 功能暴破
- 这个下五子棋的软件比较NB,比之前那个美卡五子棋强N倍。拿到软件后,先想到的是注册,结果注册部分只比较一部分,剩下的那部分在哪比较我没找到,与是就开始了爆破之旅,感谢酷子(梅川酷子)、KuNgBiM、playboyjin(果果)、冷血书生这些朋友的帮助。
这个下五子棋的软件比较NB,比之前那个美卡五子棋强N倍。拿到软件后,先想到的是注册,结果注册部分只比较一部分,
剩下的那部分在哪比较我没找到,与是就开始了爆破之旅,
感谢酷子(梅川酷子)、KuNgBiM、playboyjin(果果)、冷血书生这些朋友的帮助。
PS:
谁那有黑石3.82汉化版的朋友能送我一份吗?我找到的最高版本是3.7的,告诉我Black Stone 官方也行。
黑石也是一个很厉害的五子棋软件。
注册部分:
004069EB . 6A 12 PUSH 12 ; /Count = 12 (18.)
004069ED . 56 PUSH ESI ; Buffer => 五子棋终.00410A3A
004069EE . 53 PUSH EBX ; hWnd
004069EF . FF15 28D14000 CALL DWORDPTRDS:[<&USER32.GetWindowT>; \取注册码位数
004069F5 . 56 PUSH ESI
004069F6 . E8 3F0D0000 CALL 五子棋终.0040773A ; 算法CALL 跟进
004069FB . 59 POP ECX
004069FC . 85C0 TEST EAX,EAX
004069FE . 6A 00 PUSH 0
00406A00 . 74 0C JE SHORT 五子棋终.00406A0E
00406A02 . 68 78E74000 PUSH 五子棋终.0040E778 ; SUCCEED
00406A07 . 68 6CE74000 PUSH 五子棋终.0040E76C ; 注册成功!
00406A0C . EB 0A JMP SHORT 五子棋终.00406A18
00406A0E > 68 64E74000 PUSH 五子棋终.0040E764 ; FAILED
00406A13 . 68 58E74000 PUSH 五子棋终.0040E758 ; 注册失败!
跟进算法CALL 0040773A
0040773A /$Content$nbsp; 55 PUSH EBP
0040773B . 8BEC MOV EBP,ESP
0040773D . 51 PUSH ECX
0040773E . 53 PUSH EBX
0040773F . 56 PUSH ESI
00407740 . 57 PUSH EDI
00407741 . FF75 08 PUSH DWORD PTR SS:[EBP+8]
00407744 . E8 37040000 CALL 五子棋终.00407B80 ; 取KEY位数
00407749 . 83F8 10 CMP EAX,10 ; KEY位16位
0040774C . 59 POP ECX
0040774D . 74 04 JE SHORT 五子棋终.00407753
0040774F . 33C0 XOR EAX,EAX
00407751 . EB 62 JMP SHORT 五子棋终.004077B5
00407753 > 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00407756 . BB B8EC4000 MOV EBX,五子棋终.0040ECB8 ; %8lX
0040775B . 50 PUSH EAX
0040775C . 53 PUSH EBX
0040775D . FF75 08 PUSH DWORD PTR SS:[EBP+8]
00407760 . E8 F9090000 CALL 五子棋终.0040815E
00407765 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 取KEY前8位
00407768 . BF 888888F8 MOV EDI,F8888888
0040776D . F7D0 NOT EAX ; 前八位取反
0040776F . 33C7 XOR EAX,EDI ; 取反后 异或 F8888888
00407771 . BE 000000F0 MOV ESI,F0000000
00407776 . 0BC6 OR EAX,ESI ; 其结果在再做与运算 OR F000000
00407778 . 83C4 0C ADD ESP,0C
0040777B . 3B05 500A4100 CMP EAX,DWORD PTR DS:[410A50];与机器码前8位做比较
00407781 . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00407784 . 75 05 JNZ SHORT 五子棋终.0040778B ;不等则跳(不相等则执行第二种验证方式)
00407786 . 6A 01 PUSH 1 ; 相等则压栈01
00407788 . 58 POP EAX
00407789 . EB 2A JMP SHORT 五子棋终.004077B5
0040778B > 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0040778E . 50 PUSH EAX
0040778F . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00407792 . 83C0 08 ADD EAX,8
00407795 . 53 PUSH EBX
00407796 . 50 PUSH EAX
00407797 . E8 C2090000 CALL 五子棋终.0040815E
0040779C . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 取KEY后8位
0040779F . 83C4 0C ADD ESP,0C
004077A2 . F7D0 NOT EAX ; 取反
004077A4 . 33C7 XOR EAX,EDI ; 取反后 异或 F8888888
004077A6 . 33C9 XOR ECX,ECX
004077A8 . 0BC6 OR EAX,ESI ; 其结果在再做与运算 OR F000000
004077AA . 3B05 540A4100 CMP EAX,DWORD PTR DS:[410A54];与机器码后8位做比较
004077B0 . 0F94C1 SETE CL ; 相等则设置CL为1
004077B3 . 8BC1 MOV EAX,ECX ; ECX数值送EAX
004077B5 > 5F POP EDI
004077B6 . 5E POP ESI
004077B7 . 5B POP EBX
004077B8 . C9 LEAVE
004077B9 \. C3 RETN
[/code]
算法部分似貌不难,算法如下(其中K为注册码前8位后或后8位):
not(K)XOR(F8888888)OR(F0000000)=F9CF7331 ;
not(K)XOR(F8888888)OR(F0000000)=F5812533 。
两种情况满足其一即可。
我的机器码:F9CF7331F5812533。我们逆退一下:
F9CF7331二进制:11111001110011110111001100110001
F8888888二进制:11111000100010001000100010001000
注册码前8位数值 00000001010001111111101110111001
0147FBB9在取反:FEB80446
F5812533二进制:11110101100000010010010100110011
F8888888二进制:11111000100010001000100010001000
注册码前8位数值 00001101000010011010110110111011
0D09ADBB在取反:F2F65244
把两组KEY联系起来:FEB80446F2F65244。注册后软件功能仍旧无法使用。看来其他地方仍旧存在验证,那就从暴破入手好了。
正好酷子兄弟提醒使用EnableMenuItem函数来去灰钮。于是BP EnableMenuItem
堆栈提示:
0012F754 004053BB /CALL 到 EnableMenuItem 来自 五子棋终.004053B9
0012F758 00CB0901 hMenu = 00CB0901
0012F75C 000000D0 ItemID = D0 (208.)
0012F760 00000001 \Flags = MF_BYCOMMANDMF_GRAYEDMF_STRING
返回到数据窗口:
004053AF 6A 01 PUSH 1 ; 酷子兄弟提醒 将此处修改为PUSH 0即可去灰钮
004053B1 . 5B POP EBX
004053B2 . 53 PUSH EBX ; /Flags=>MF_BYCOMMANDMF_GRAYEDMF_STRING
004053B3 . 68 D0000000 PUSH 0D0 ; ItemID = D0 (208.)
004053B8 . 57 PUSH EDI ; hMenu
004053B9 . FFD6 CALL ESI ; \EnableMenuItem
004053BB 53 PUSH EBX ; 返回到这里 注意此时EAX数值为0,若不采用第一方案,我们可修改为PUSHEAX去灰钮
004053BC 68 CF000000 PUSH 0CF
004053C1 . 57 PUSH EDI ; hMenu
004053C2 . FFD6 CALL ESI ; \EnableMenuItem
004053C4 53 PUSH EBX
将此处修改为 004053AF PUSH 0 保存后软件弹出NAG,我们下BP MessageBoxA找到关键点修改:
00405514 . FF15 60D14000 CALL DWORDPTRDS:[<&USER32.SetTimer>] ; \SetTimer
0040551A . E8 4D230000 CALL 五子棋终.0040786C
0040551F . 3B05 F8F74000 CMP EAX,DWORD PTR DS:[40F7F8]
00405525 . A3 580A4100 MOV DWORD PTR DS:[410A58],EAX
0040552A 74 28 JE SHORT 五子棋终.00405554 ; 不跳则自效查出错谈出错误窗口,修改为JMP
0040552C . 50 PUSH EAX
0040552D . BE 780A4100 MOV ESI,五子棋终.00410A78
00405532 . 68 34E54000 PUSH 五子棋终.0040E534 ; no %lu \n
00405537 . 56 PUSH ESI
00405538 . E8 82240000 CALL 五子棋终.004079BF
0040553D . 83C4 0C ADD ESP,0C
00405540 . 55 PUSH EBP ; /Style
00405541 . 68 24E54000 PUSH 五子棋终.0040E524 ; fatal error
00405546 . 56 PUSH ESI ; Text
00405547 . 55 PUSH EBP ; hOwner
00405548 . FF15 68D14000 CALL DWORDPTRDS:[<&USER32.MessageBox>; \MessageBoxA
0040554E . 55 PUSH EBP
0040554F . E8 EA240000 CALL 五子棋终.00407A3E
00405554 > E8 19190000 CALL 五子棋终.00406E72
00405559 . 6A 43 PUSH 43
过NAG之后,我们在选择其他功能时候,弹出“未 注 册 版 本 不 提 供 此 功 能!”对话框,我们BPMessageBoxA来找到关键点。
堆栈提示:
0012FDB4 004077FD /CALL 到 MessageBoxA 来自 五子棋终.004077F7
0012FDB8 025C03E6 hOwner =025C03E6("五子棋终结者,机器执黑必胜",class="FIVE")
0012FDBC 0040ECC0 Text = "未 注 册 版 本 不 提 供 此 功 能 !"
0012FDC0 0040ECE8 Title = "unregisted version don"t providethisn"
0012FDC4 00000000 \Style = MB_OKMB_APPLMODAL
0012FDC8 004048B5 返回到 五子棋终.004048B5 来自 五子棋终.004077E5
返回到数据窗口:
004077E5 /$Content$nbsp; 6A 00 PUSH 0 ; /Style=MB_OKMB_APPLMODAL
004077E7 . 68 E8EC4000 PUSH 五子棋终.0040ECE8 ; Title ="unregistedversion don"t provide this n"
004077EC . 68 C0EC4000 PUSH 五子棋终.0040ECC0 ; Text = "未 注 册 版 本 不提供 此 功 能 !"
004077F1 . FF35 2C1E4100 PUSH DWORD PTR DS:[411E2C] ; hOwner=025C03E6 ("五子棋终结者,机器执黑必胜",class="FIVE")
004077F7 . FF15 68D14000 CALL DWORDPTRDS:[<&USER32.MessageBoxA>>; \MessageBoxA
004077FD \. C3 RETN
004047C6 . 391D F0F74000 CMP DWORD PTR DS:[40F7F0],EBX
004047CC . 0F84 DE000000 JE 五子棋终.004048B0 ; 这里绝对不能跳 NOP掉
004047D2 . 8B35 7CD14000 MOV ESI,DWORDPTRDS:[<&USER32.CheckMenu>; USER32.CheckMenuItem
004047D8 . 53 PUSH EBX ; /Flags=>MF_BYCOMMANDMF_ENABLEDMF_STRING
004047D9 . 68 CE000000 PUSH 0CE ; ItemId = CE (206.)
004047DE . 50 PUSH EAX ; hMenu
004047DF . FFD6 CALL ESI ; \CheckMenuItem
004047E1 . 6A 08 PUSH 8 ; /Flags=MF_BYCOMMANDMF_ENABLEDMF_CHECKEDMF_STRING
004047E3 . 57 PUSH EDI ; ItemId
004047E4 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; hMenu
004047E7 . FFD6 CALL ESI ; \CheckMenuItem
004047E9 . 53 PUSH EBX ; /Flags=>MF_BYCOMMANDMF_ENABLEDMF_STRING
004047EA . 68 D0000000 PUSH 0D0 ; ItemId = D0 (208.)
004047EF . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; hMenu
004047F2 . FFD6 CALL ESI ; \CheckMenuItem
004047F4 . 53 PUSH EBX ; /Flags=>MF_BYCOMMANDMF_ENABLEDMF_STRING
004047F5 . 68 D1000000 PUSH 0D1 ; ItemId = D1 (209.)
004047FA . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; hMenu
004047FD . FFD6 CALL ESI ; \CheckMenuItem
004047FF . C705 34F84000>MOV DWORD PTR DS:[40F834],43
00404809 . E9 E3000000 JMP 五子棋终.004048F1
0040480E > BA D7000000 MOV EDX,0D7
00404813 . 3BCA CMP ECX,EDX
00404815 . 0F8F 58010000 JG 五子棋终.00404973
0040481B . 0F84 23010000 JE 五子棋终.00404944
00404821 . 81E9 D0000000 SUB ECX,0D0 ; Switch (cases D0..D6)
00404827 . 0F84 D3000000 JE 五子棋终.00404900
0040482D . 49 DEC ECX
0040482E . 74 76 JE SHORT 五子棋终.004048A6
00404830 . 49 DEC ECX
00404831 . 74 43 JE SHORT 五子棋终.00404876
00404833 . 83E9 04 SUB ECX,4
00404836 .^ 0F85 E3FDFFFF JNZ 五子棋终.0040461F
0040483C . 8A0D 380A4100 MOV CL,BYTE PTR DS:[410A38] ; CaseD6(EM_POSFROMCHAR) of switch
00404842 . 80F9 01 CMP CL,1
00404845 . 75 0B JNZ SHORT 五子棋终.00404852
00404847 . 33DB XOR EBX,EBX
00404849 . 881D 380A4100 MOV BYTE PTR DS:[410A38],BL
0040484F . 53 PUSH EBX
00404850 . EB 13 JMP SHORT 五子棋终.00404865
00404852 > 33DB XOR EBX,EBX
00404854 . 3ACB CMP CL,BL
00404856 . 0F85 AB010000 JNZ 五子棋终.00404A07
0040485C . C605 380A4100>MOV BYTE PTR DS:[410A38],1
00404863 . 6A 08 PUSH 8
00404865 > 68 D6000000 PUSH 0D6
0040486A > 50 PUSH EAX ; hMenu
0040486B . FF15 7CD14000 CALL DWORDPTRDS:[<&USER32.CheckMenuIte>; \CheckMenuItem
00404871 . E9 91010000 JMP 五子棋终.00404A07
00404876 > 33DB XOR EBX,EBX ; Case D2 (EM_GETPASSWORDCHAR)ofswitch 00404821
00404878 . 391D 3CF84000 CMP DWORD PTR DS:[40F83C],EBX
0040487E . 75 1D JNZ SHORT 五子棋终.0040489D
00404880 . C705 3CF84000>MOV DWORD PTR DS:[40F83C],1
0040488A . 6A 08 PUSH 8
0040488C > 68 D2000000 PUSH 0D2 ; ItemId = D2 (210.)
00404891 . 50 PUSH EAX ; hMenu
00404892 . FF15 7CD14000 CALL DWORDPTRDS:[<&USER32.CheckMenuIte>; \CheckMenuItem
00404898 . E9 5C060000 JMP 五子棋终.00404EF9
0040489D > 891D 3CF84000 MOV DWORD PTR DS:[40F83C],EBX
004048A3 . 53 PUSH EBX
004048A4 .^ EB E6 JMP SHORT 五子棋终.0040488C
004048A6 > 33DB XOR EBX,EBX ; Case D1 (EM_GETWORDBREAKPROC)ofswitch 00404821
004048A8 . 391D F0F74000 CMP DWORD PTR DS:[40F7F0],EBX
004048AE . 75 0A JNZ SHORT 五子棋终.004048BA ; 我们把这里JMP掉
004048B0 > E8 302F0000 CALL 五子棋终.004077E5;注意该CALL跳转来自4047CC
004048B5 . E9 3F060000 JMP 五子棋终.00404EF9
修改后我们点,当我们选择“玩家先”时,点开始,软件则自动关闭,我们下BP ExitProcess断点
-
TAGS:
- 作者:管理员 时间:2009-6-21 来源:网络 人气: