终于搞定了围棋助手的自校验和全部Nag窗口,呼呼,真是难弄啊。想起来我第一次调试围棋助手这个软件的时候还是刚开始学破解,连什么是自校验都不知道呢,那个时候发现围棋助手是UPX-Scrambler加的壳,还跑到网上去找这个壳的专业脱壳工具,想起来真是有点可笑啊,不过那个时候把壳脱掉之后就发现程序不能启动,而且CPU一下子就到100%了,内存也瞬间就不够用了,当时还以为是脱壳脱的不好呢,因为以前围棋助手是用Armadillo加的壳,还傻傻地以为是脱Arm的壳脱的问题呢,hoho。后来知道了有自校验这回事,但是根本不知道怎么去除自校验,前段时间终于又下狠心研究一下,忽然发现还是很容易的啦。这个程序的自校验多的不可胜数,看来作者也是在防破解这方面下了很大的工夫的,不过就有一点不是很好,我以前购买过正版,但是好像每次新版本的正版验证程序都不一样,弄得我以前的正版Key都不好用,也懒得去再发邮件给作者换Key,就破解了先用着吧。
脱壳去自校验已经过了好几天了,估计都忘的差不多了,所以就简单说明一下吧。这个程序目前最近版本是8.76,保护方式还是UPX-Scrambler RC1.x -> ㎡nT畂L,脱壳不是很难,手脱和用工具都差不多。脱掉之后不能急着运行,否则电脑肯定崩溃。用OD载入,可以发现CPU一下子就到100%了,不要着急,马上点暂停键,这也是对付消耗系统资源类的自校验的一般方法。停下来之后按若干次Ctrl+F9,可以回到程序领空,来到第一处自校验点:
0041A886 84DB test bl, bl
0041A888 8BF8 mov edi, eax
0041A88A 75 0F jnz short 0041A89B
0041A88C 68 401F0000 push 1F40
0041A891 E8 601C0700 call <jmp.&MFC42.#823_operator new>
0041A896 83C4 04 add esp, 4
0041A899 ^ EB F1 jmp short 0041A88C
0041A89B 8BCE mov ecx, esi
从这里,我们知道消耗系统资源的办法就是不断调用new函数,做成一个死循环,那么很好办,把前面的jnz改成jmp强制跳转即可。同时记住这种消耗系统资源的关键代码:83 C4 04 EB F1,于是,我们可以在程序的整个空间搜索这样的关键代码,找到的都是这种自校验点,把前面的跳转都改成强制跳转即可消除这种自校验,而不是遇到了一个自校验点分析一个校验点,那样比较慢而且也找不全,如果我没记错的话,这种自校验消耗系统资源的方法程序中用了五次,具体在哪里用的我也不知道,以上称为自校验一。
第二种自校验,也是以消耗系统资源为目的的,我们搜索ASCII码"500",来到这里:
0042C16E 3C 08 cmp al, 8
0042C170 74 59 je short 0042C1CB
0042C172 3C 5D cmp al, 5D
0042C174 74 55 je short 0042C1CB
0042C176 3C ED cmp al, 0ED
0042C178 74 51 je short 0042C1CB
0042C17A C646 44 01 mov byte ptr [esi+44], 1
0042C17E C686 72DC0200 0>mov byte ptr [esi+2DC72], 1
0042C185 E8 80040600 call <jmp.&MFC42.#1168_AfxGetModuleSt>
0042C18A 8B40 04 mov eax, [eax+4]
0042C18D B3 0D mov bl, 0D
0042C18F C680 C4000000 0>mov byte ptr [eax+C4], 1
0042C196 68 A09A4B00 push 004B9AA0 ; 500
0042C19B 8D4C24 24 lea ecx, [esp+24]
0042C19F E8 82030600 call <jmp.&MFC42.#537_CString::CStrin>
0042C1A4 68 A00F0000 push 0FA0
0042C1A9 889C24 00010000 mov [esp+100], bl
0042C1B0 E8 41030600 call <jmp.&MFC42.#823_operator new>
0042C1B5 83C4 04 add esp, 4
0042C1B8 8D4C24 20 lea ecx, [esp+20]
0042C1BC C68424 FC000000>mov byte ptr [esp+FC], 0C
0042C1C4 E8 4B030600 call <jmp.&MFC42.#800_CString::~CStri>
0042C1C9 ^ EB CB jmp short 0042C196
0042C1CB 8D4C24 30 lea ecx, [esp+30]
这里在42C196~42C1C9之间也是一个死循环,只要把前面的三个跳转中任何一个改成强制跳转即可跳过这个自校验,程序中一共可以找到两处这种校验方式,以上称为自校验二。
第三种自校验,是以直接退出程序为目的的,当选择保存棋谱的时候会出现被调试的程序无法处理异常的问题而直接退出,我们下CreateFileA断点,当点击保存的时候程序断下,两次Ctrl+F9返回程序领空,来到这里:
0043E8CF E8 8EDC0400 call <jmp.&MFC42.#3318_CFile::GetLength>
0043E8D4 3D 007E0500 cmp eax, 57E00
0043E8D9 74 22 je short 0043E8FD
0043E8DB E8 2ADD0400 call <jmp.&MFC42.#1168_AfxGetModuleState>
0043E8E0 8B48 04 mov ecx, [eax+4]
0043E8E3 6A 00 push 0
0043E8E5 C681 C4000000 0>mov byte ptr [ecx+C4], 1
0043E8EC C646 44 01 mov byte ptr [esi+44], 1
0043E8F0 C686 72DC0200 0>mov byte ptr [esi+2DC72], 1
0043E8F7 FF15 38EB4900 call [<&msvcrt.exit>] ; MSVCRT.exit
0043E8FD 8D4C24 1C lea ecx, [esp+1C]这里又验证了一下程序的长度,不等于57E00就退出程序,因此把43E8D9这里的跳转也改成强制跳转即可,同时记住这个自校验的关键代码:3D 00 7E 05 00 74 22,在程序中找这样的关键代码,一共有三处,修改其前面的跳转即可,以上称为自校验三。
经过我的使用来看,程序好像一共就这三种自校验,一共有10处,可见作者在防破解这方面倒是颇下了一番工夫的。下面我们来去掉恼人的Nag窗口。Nag窗口一共有两处,一处是退出的时候会有提示问你是否要注册,一处是程序运行一段时间之后弹出窗口,要求注册,而且这种弹出窗口在刚运行的时候不会出现,当有弹出之后就会经常性弹出,在我最开始没注册的时候只好每次先退出程序再进入,后来给我逼的没办法了我就去注册了一份:P
先看第一处,这个比较容易,下MessageBoxA断点,关闭程序之后断下,几次Ctrl+F9之后回到这里:
004677FF 84C0 test al, al
00467801 75 4A jnz short 0046784D
00467803 8D4C24 08 lea ecx, [esp+8]
00467807 E8 144D0200 call <jmp.&MFC42.#540_CString::CString>
0046780C 68 E0F80000 push 0F8E0
00467811 8D4C24 0C lea ecx, [esp+C]
00467815 C68424 50030000>mov byte ptr [esp+350], 1
0046781D E8 164D0200 call <jmp.&MFC42.#4160_CString::LoadStringA>
00467822 8B5424 08 mov edx, [esp+8]
00467826 6A 00 push 0
00467828 6A 04 push 4
0046782A 52 push edx
0046782B E8 624D0200 call <jmp.&MFC42.#1200_AfxMessageBox>非常简单,把467801处的jnz修改为jmp即可,这样就可以去除退出程序时候的断点了。
第二处,程序运行时弹出的Nag窗口,找ASCII字符串参考"4444444",找到来到这里:
0042E123 E8 6AE70500 call <jmp.&MFC42.#2514_CDialog::DoModal> ; 这个就是弹出窗口
0042E128 8BD8 mov ebx, eax
0042E12A 83FB 01 cmp ebx, 1
0042E12D 75 11 jnz short 0042E140
0042E12F 8A86 A8DD0200 mov al, [esi+2DDA8]
0042E135 84C0 test al, al
0042E137 75 07 jnz short 0042E140
0042E139 8BCE mov ecx, esi
0042E13B E8 5090FFFF call 00427190
0042E140 68 189A4B00 push 004B9A18 ; 4444444往上翻,可以看到这里:
0042E059 84C0 test al, al
0042E05B 0F85 67010000 jnz 0042E1C8
0042E061 8A86 F6CC0200 mov al, [esi+2CCF6]
0042E067 84C0 test al, al
0042E069 75 0E jnz short 0042E079
0042E06B 8A86 F5CC0200 mov al, [esi+2CCF5]
0042E071 84C0 test al, al
0042E073 0F84 4F010000 je 0042E1C8修改42E05B处的跳转为jmp强制跳转即可,42E073处修不修改都可以了。
程序中还有一处"4444444"的字符串参考,找到后继续往上翻,来到这里:
0043D669 84C0 test al, al
0043D66B 74 0E je short 0043D67B
0043D66D 8A86 AADD0200 mov al, [esi+2DDAA]
0043D673 84C0 test al, al
0043D675 0F85 72010000 jnz 0043D7ED
0043D67B 8A86 F6CC0200 mov al, [esi+2CCF6]
0043D681 84C0 test al, al
0043D683 75 0E jnz short 0043D693
0043D685 8A86 F5CC0200 mov al, [esi+2CCF5]
0043D68B 84C0 test al, al
0043D68D 0F84 5A010000 je 0043D7ED
0043D693 8A46 5D mov al, [esi+5D]
0043D696 84C0 test al, al
0043D698 0F85 4F010000 jnz 0043D7ED把43D675、43D68D和43D698处的跳转都改成强制跳转就可以了,这样就可以去除程序运行之中的恼人的Nag窗口了。
至此,程序的自校验和Nag窗口已经全部去除,当初破解的时候也没想详细分析注册算法,所以就用了这样的方式破解了,不过自己越来越不喜欢用爆破的版本了,哪怕是自己爆破的也觉得不爽,看来还是要找作者要一份新的Key啊,hoho。
评论
兄弟,你是网络高手,我就没那本事了,你能把破解了的版本给我发一个吗?我让试试是真的还是假的?
呵呵,这和网络没啥关系,我连网络菜鸟都算不上。不过你要求破解就直说,何必拐弯抹角,欲盖弥彰?
老大真了不起 可以给我发一个破解的吗
呵呵,非常感谢。第一处自校验应该是六处。
我想请教一下,脱壳这个程序重建输入表时,ImportREC无法判断IAT的地址与大小,手动填上后,怎么无效指针那么多,应该那里出了问题。以前也没有破解过什么,从网上下了个教程就开始动手,现在还是一头雾水。
我填的IAT的地址是DFFC,大小是186C8,怎么好像太大了。
我修改的这个版本应该和你所修改的版本不太一样,尽管都是8.76,因为我前两天又重新试验过一次,和之前的很多地址都不一样了。所以自校验有几处我也说不清。
另外,这个壳就是UPX变形壳啊,用工具都能脱,我怀疑你是找错了OEP。
多谢了,我再试试看。
我又看了一下8.76E版本,估计就是你说的那个,OEP应该是48D4AC,直接获取输入表就可以了,你可以再试试
不知道能将破解版的围棋助手发给我一份。留下了电邮。非常感谢您。
非常喜欢这个软件,可惜购买后重装系统很不方便。为此研究了2天OD,还是没爆破成功。希望能给发一份修改后的文件,一是为了自己研究围棋,另外可以研究一下自己的OD脱壳错在哪了。
在此先谢谢了!!
可以直接~給我破解好的嗎??
拜託囉~
真心的佩服你是高手,谢谢您说了这么多,可是我们菜鸟看半天还是一头雾水,能不能直接发个注册码或者是注册机,或者破解版给大家,我相信天下所有与我一样的电脑菜鸟—围棋爱好者将感激不尽!!
你好,ssfighter,能给我发个破解吗?我看不懂网页里说的,我孩子在学围棋,所以想找些围棋方面的软件,非常感谢!
我也是啊
看不懂 啊 能不能直接发破解的给我啊
哥们我用FPE2001(XP破解版)就破解了他,强吧?
首先运行围棋助手,然后运行FPE2001
用FPE2001分别找到42E05B,43D675、43D68D和43D698处, 将指令74,75或0F85改成:
75>改成EB
74>改成EB
0F85>改成EB00
然后回到围棋助手界面,继续进行读谱这时会出现异常退出.然后退出FPE.再进围棋助手OK.
0F85改成0F84
游戏修改器修改只是修改内存中的程序每次只能同时运行好麻烦最新方法本人开发中
你用UltraEdit这样的16进制修改工具直接改exe文件不就得了?
真高手哦。
这里有个破解补丁.我早搞过这个东西.虽然保护很多.但只要不脱壳.就不用管很多检查的地方.
http://www.namipan.com/d/e0db8e82791b9440d3b1f3d5b7962f0f9c4873ca00200100
谢谢zpf大哥的指教
这个程序我后来也找到了爆破点,可以实现不脱壳破解,不过后来曾经想研究注册算法,可惜一直没搞定,不知道zpf大哥有没有什么办法?
ssfighter,您好,您这篇文章写的非常详细,想按照您文章所写再动手实践一遍,但是遇到一些问题,可能由于水平有限,问题过于菜。
1、使用工具脱完壳,用OD挂上后,显示程序是经过压缩,是否要继续.
2、找到您文章里所说的第一种自校验,修改完汇编代码后,想复制回二进制文件,但是出现错误,说在可执行程序中无法定位数据。
3、想根据机器码找到其他几个自校验的代码,但是无法找到。
问题可能过于简单,麻烦您了,谢谢!
@菜鸟:
我给您回邮件了,请注意查收
ssfighter,您好,能详细说一下是用什么软件脱壳吗?在哪里有下载?谢谢