发新话题
打印

[转载]TOM对弈围棋客户端的去“形势判断”功能限制

[转载]TOM对弈围棋客户端的去“形势判断”功能限制

文章作者: laoqian

【软件名称】:TOMweiqi.exe
【下载地址】:http://weiqi.tom.com/down/TomWeiqi.exe
【加壳方式】:无
【编写语言】:VC
【工具】:OllyDbg1.10fly,W32DSM
【操作平台】:windows系列
【软件介绍】:TOM对弈围棋客户端
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
狗年就不打狗了,我们来一个简单的爆破吧!
本文只适合初学者,高手略过!
前两天在这里看到一篇【XX围棋客户端的去功能限制】的文章,搞的是新浪围棋,看了有些启发。但是我不用新浪围棋,主要是里面的

人比较赖,我发现TOM对弈围棋里面的人都比较君子!
遂想到TOM围棋也有限制,不妨拿来看看。
TOM对弈围棋其他也没什么,只有其中的“形势判断”极为有用,可以省去你自己数目判断的麻烦(——不过对于高手有些多余甚至降

低水平之嫌了)!
但他有限制,主要是下面2个:

1.在押分对局中使用加倍卡或者在对局中进行最多押分时(比如,一般的9段对局为5000万)押分时,可以使用形势分析功能。
此限制,就是在观看高手对弈和棋谱时,无法在试下情况下使用“形势判断”。
2.根据双方协议,本局不能使用形势分析功能。此限制,就是在对弈时,双方比赛前协议不能使用“形势判断”,无法使用“形势判断”



由于分析得知,客户端是有代码的,但是他的出错提示都是加过密的,反汇编是看不到关键点的。那我们就来爆破他实现,工作很简单,

我只是说一下如何入手。其实对于新手破解时最困难的是如何入手,如何最恰当的下断点!

用OllyDbg1.10打开LiveBaduk.exe,中断在入口,因为没有加壳,因此直接调试,忽略所有异常,取消所有断点。

F9运行,登录帐号,进入大厅!
由于是联网调试,如果我们选择和其他人对弈时调试,肯定会有调试中断甚至掉线,会影响他人的,还连累自己的分数!那我们就选择观

看棋局进入,再调试,即使被踢出来也无所谓。
进入某对弈房间观棋,此时切换到od,下断点bpMessageBoxA,再切换回程序来(btw,od对函数的大小写敏感,开始没注意老是断点设

置不成功,唉)
点击“形势判断”按钮,假设房主的协议是“本局不能使用形势分析功能”,此时会中断,出现提示窗口的,但是我当时进的房间是可以

使用,没有中断!不要紧,那我们点击“试下”按钮,进入试下窗口,此时再点击“形势判断”按钮,中断!如下:


77D504EAU>8BFFmovedi,edi;我们的bpMessageBoxA断点,停在这
77D504EC55pushebp;F8一路走
77D504ED8BECmovebp,esp
77D504EF833DBC04D77700cmpdwordptrds:[77D704BC],0
77D504F67424jeshortUSER32.77D5051C
77D504F864:A118000000moveax,dwordptrfs:[18]
77D504FE6A00push0
77D50500FF7024pushdwordptrds:[eax+24]
77D5050368240BD777pushUSER32.77D70B24
77D50508FF15C812D177calldwordptrds:[<&KERNEL32.InterlockedCompa>
77D5050E85C0testeax,eax
77D50510750AjnzshortUSER32.77D5051C
77D50512C705200BD777010000>movdwordptrds:[77D70B20],1
77D5051C6A00push0
77D5051EFF7514pushdwordptrss:[ebp+14]
77D50521FF7510pushdwordptrss:[ebp+10]
77D50524FF750Cpushdwordptrss:[ebp+C]
77D50527FF7508pushdwordptrss:[ebp+8]
77D5052AE82D000000callUSER32.MessageBoxExA;F8一路走
77D5052F5Dpopebp
77D50530C21000retn10;返回到下面


.......
6C14C8D7FF742410pushdwordptrss:[esp+10]
6C14C8DB50pusheax
6C14C8DCFF742410pushdwordptrss:[esp+10]
6C14C8E051pushecx;F8一路走到这,看堆栈窗口如下提示
6C14C8E1FF15D0B5186Ccalldwordptrds:[<&USER32.MessageBoxA>];返回到这里
6C14C8E75Epopesi
6C14C8E8C20C00retn0C;返回到jmp.&MFC42.#4224
6C14C8EB8B4E20movecx,dwordptrds:[esi+20]
6C14C8EE^EBE7jmpshortMFC42.6C14C8D7
6C14C8F0E84F49FAFFcallMFC42.#2864
6C14C8F5^E9EE8AFAFFjmpMFC42.6C0F53E8

0012CD94000A09FE|hOwner=000A09FE('摆718房间的棋',class='#32770')
0012CD98016157F0|Text="在押分对局中使用加倍卡

或者在对局中进行最多押分时(比如,一般的9段对局为5000万)押分时,

可以使用形势分析功能。"
0012CD9C00D04F50|Title="Tom对弈"
0012CDA000000030\Style=MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0012CDA40483A2D0
0012CDA800438FC4返回到LiveBadu.00438FC4来自


00438F608B4E74movecx,dwordptrds:[esi+74]
00438F638D442408leaeax,dwordptrss:[esp+8]
00438F6750pusheax
00438F6881C114050000addecx,514
00438F6EE88D7AFDFFcallLiveBadu.00410A00
00438F738B0D08065600movecx,dwordptrds:[560608]
00438F798B81E0060000moveax,dwordptrds:[ecx+6E0]
00438F7F85C0testeax,eax
00438F817552jnzshortLiveBadu.00438FD5;jmp,这里就是爆破点
00438F838B4668moveax,dwordptrds:[esi+68]
00438F8685C0testeax,eax
00438F88754BjnzshortLiveBadu.00438FD5;jmp,这里也是爆破点
00438F8A8D4C2410leaecx,dwordptrss:[esp+10]
00438F8EE805270D00call
00438F936804030000push304
00438F988D4C2414leaecx,dwordptrss:[esp+14]
00438F9CC744243801000000movdwordptrss:[esp+38],1
00438FA4E8A5280D00call
00438FA98B1500065600movedx,dwordptrds:[560600];LiveBadu.0055FB78
00438FAF6A30push30
00438FB18BCEmovecx,esi
00438FB38B8234020000moveax,dwordptrds:[edx+234]
00438FB950pusheax
00438FBA8B442418moveax,dwordptrss:[esp+18]
00438FBE50pusheax
00438FBFE87A290D00call;从bpMessageBoxA断点返回到这里程序领空,出现提示窗口!
00438FC4C7442434FFFFFFFFmovdwordptrss:[esp+34],-1
00438FCC8D4C2410leaecx,dwordptrss:[esp+10]
00438FD0E937010000jmpLiveBadu.0043910C
00438FD58DBEE8060000leaedi,dwordptrds:[esi+6E8];这里,飞向光明!
00438FDB8BCFmovecx,edi
00438FDDE8EE89FDFFcallLiveBadu.004119D0
00438FE28D4C2414leaecx,dwordptrss:[esp+14]
00438FE68D542418leaedx,dwordptrss:[esp+18]
00438FEA85C0testeax,eax
00438FEC51pushecx
00438FED8D442420leaeax,dwordptrss:[esp+20]
00438FF152pushedx
00438FF28D4C2428leaecx,dwordptrss:[esp+28]
.......

来到了程序领空,出现了出错窗口!我们往上看,怎样才能避开这里呢,我们发现了00438F81jnzshortLiveBadu.00438FD5,取消所有

断点,下断点在00438F7F,重复点击试下窗口的“形势判断”按钮,中断后,我们发现走到这里不跳,我们试着改为jmp,然后F9,“形势判

断”出现了!爆破他吧!

再来看第二个,此时需要进入一个禁用“形势判断”的房间,如果没有,只好自己开房了!
进入房间后同样重复上面的工作,取消所有断点,下断点bpMessageBoxA,点击“形势判断”按钮,假设房主的协议是“本局不能使用形势

分析功能”,此时会中断,出现提示窗口的,中断点同上,只是堆栈窗口换了下面:

0012CE64001E04DE|hOwner=001E04DE(class='AfxWnd42',parent=00130698)
0012CE6804618710|Text="根据双方协议,本局不能使用形势分析功能。"
0012CE6C00D04F50|Title="Tom对弈"
0012CE7000000030\Style=MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0012CE740465DCC8
0012CE78004F5420返回到LiveBadu.004F5420来自

F8一路返回到LiveBadu程序领空,如下
004F539D90nop
004F539E90nop
004F539F90nop
004F53A064:A100000000moveax,dwordptrfs:[0]
004F53A66AFFpush-1
004F53A868A25C5200pushLiveBadu.00525CA2
004F53AD50pusheax
004F53AEA108065600moveax,dwordptrds:[560608]
004F53B364:892500000000movdwordptrfs:[0],esp
004F53BA83EC40subesp,40
004F53BD55pushebp
004F53BE56pushesi
004F53BF8BF1movesi,ecx
004F53C157pushedi
004F53C28B88E0060000movecx,dwordptrds:[eax+6E0]
004F53C885C9testecx,ecx
004F53CA7565jnzshortLiveBadu.004F5431;jmp,这里就是爆破点
004F53CC8B869C000000moveax,dwordptrds:[esi+9C]
004F53D285C0testeax,eax
004F53D4755BjnzshortLiveBadu.004F5431;jmp,这里就是爆破点
004F53D68B0D00065600movecx,dwordptrds:[560600]
004F53DC8B814C040000moveax,dwordptrds:[ecx+44C]
004F53E285C0testeax,eax
004F53E4754BjnzshortLiveBadu.004F5431;jmp,这里就是爆破点
004F53E68D4C2410leaecx,dwordptrss:[esp+10]
004F53EAE8A9620100call
004F53EF6826030000push326
004F53F48D4C2414leaecx,dwordptrss:[esp+14]
004F53F8C744245800000000movdwordptrss:[esp+58],0
004F5400E849640100call
004F54058B1500065600movedx,dwordptrds:[560600]
004F540B6A30push30
004F540D8BCEmovecx,esi
004F540F8B8234020000moveax,dwordptrds:[edx+234]
004F541550pusheax
004F54168B442418moveax,dwordptrss:[esp+18]
004F541A50pusheax
004F541BE81E650100call;从bpMessageBoxA断点返回到这里程序领空,出现提示窗口!
004F5420C7442454FFFFFFFFmovdwordptrss:[esp+54],-1
004F54288D4C2410leaecx,dwordptrss:[esp+10]
004F542CE93A020000jmpLiveBadu.004F566B
004F54318D4C2428leaecx,dwordptrss:[esp+28];这里,飞向光明!
004F54358DAEAC040000leaebp,dwordptrds:[esi+4AC]
004F543B51pushecx
004F543C8BCDmovecx,ebp
004F543EE8BDB5F1FFcallLiveBadu.00410A00
004F54438B86C0000000moveax,dwordptrds:[esi+C0]
004F544985C0testeax,eax
004F544B7452jeshortLiveBadu.004F549F
004F544D8B8624020000moveax,dwordptrds:[esi+224]
004F545385C0testeax,eax
004F54557448jeshortLiveBadu.004F549F
004F54578B1500065600movedx,dwordptrds:[560600];LiveBadu.0055FB78
004F545D8B8698040000moveax,dwordptrds:[esi+498]
004F54638B3DA88A5200movedi,dwordptrds:[<&MSVCRT._mbscmp>];MSVCRT._mbscmp

来到了程序领空,出现了出错窗口!我们往上看,怎样才能避开这里呢,我们发现了004F53CAjnzshortLiveBadu.004F5431,取消所有

断点,下断点在004F53C8,重复点击“形势判断”按钮,中断后,我们发现走到这里不跳,我们试着改为jmp,然后F9,“形势判断”出现了

!爆破他吧!

--------------------------------------------------------------------------------
【总结】
没什么可总结的,找好api函数断点,跟踪,爆破!主要是给大家一个过程,一个思路!
他是经常升级的,每次要改有些麻烦的!

TOP

发新话题