我爱学电脑
首页 | TAGS | 关于我们 | 广告联系
  • 五子棋终结者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 来源:网络 人气:

热门TAGS


相关推荐

热门新闻

版权所有:我爱学电脑 www.408o.cn 2004-2009 All Rights Reserved.
站长QQ: 951969697 粤ICP备05096685号