【文章标题】: 神州数码的简单调试
【文章作者】: 阿呆
【软件名称】: 神州数码客户端 3.5版本
【软件大小】: 5M
【下载地址】: 自备
【加壳方式】: 未知
【使用工具】: OD,PEID
【操作平台】: win7
【软件介绍】: 一般用于校园网和小区联网客户端
【作者声明】: 并非感兴趣,只因被限制。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
3.5.11.XXX 版本是我校目前最新的版本,可以说较完美,我之所以学习破解,也是因为这款软件给我带来的束缚实在太多,比如说晚上11点断网,限制使用代理软件(如:ccproxy)等等。
那么这次我和大家交流如何解除使用代理软件的限制,如果你们学校的服务器没有完善,你还有可能尝试不断网。
我写这篇文章,意味着我要放弃我的破解之路,因为这条路对我来说,太长,太坎坷,我不是信息系的学生,对汇编也没有基础,琢磨一个星期都无法解决的问题,只需大侠一句话就能解决,但是,没有人是有义务来帮我的,大家都有自己的事情要做,所以我无法坚持下去,只好选择放弃了。
好了,进入主题,用PEID查壳,显示“Microsoft Visual C++ 8.0 *”,改核心扫描“ASPack 2.x (without poly) -> Alexey Solodovnikov”。无需脱壳,可直接调试。
先解除禁用代理软件:
在浏览器进入ccproxy的官网,或者有这个字样的网站,客户端过一会就会断开连接(每个单位不同,有的可能没有此限制)。我们开始第一步吧。
OD加载神州数码客户端,F9启动并登录,下断点:“bp EnumWindows”(这很重要)。
下断后,由于软件会每隔一段时间进行检测,一会就来到:
76BFD1CF > 8BFF mov edi,edi ; user32.PostMessageA
76BFD1D1 55 push ebp
76BFD1D2 8BEC mov ebp,esp
76BFD1D4 33C0 xor eax,eax ; DigitalC.0041AD80
76BFD1D6 50 push eax ; DigitalC.0041AD80
76BFD1D7 50 push eax ; DigitalC.0041AD80
76BFD1D8 FF75 0C push dword ptr ss:[ebp+0xC]
76BFD1DB FF75 08 push dword ptr ss:[ebp+0x8]
76BFD1DE 50 push eax ; DigitalC.0041AD80
76BFD1DF 50 push eax ; DigitalC.0041AD80
76BFD1E0 E8 31C2FFFF call user32.76BF9416
76BFD1E5 5D pop ebp ; DigitalC.0041AD8D
76BFD1E6 C2 0800 retn 0x8
一直F8单步走,走到76BFD1E0处就会卡住,此时别慌,按“暂停”就会跳到76BF72B9
76BF72B9 83C4 04 add esp,0x4
76BF72BC C2 1C00 retn 0x1C
来到76BF72B9后按 F9 来到76BFD1E5
76BFD1E5 5D pop ebp ; 02C58728
76BFD1E6 C2 0800 retn 0x8
继续F8单步,回到程序领口了!
0041AD8D |. F7D8 neg eax
0041AD8F |. 1BC0 sbb eax,eax
0041AD91 |. 25 C8000000 and eax,0xC8
0041AD96 |. 05 38FFFFFF add eax,-0xC8
0041AD9B \. C3 retn
继续F8单步到返回,来到00418DDC。这里就是重要的地方!
00418DC9 |. /74 1F je short DigitalC.00418DEA
00418DCB |. |EB 03 jmp short DigitalC.00418DD0
00418DCD | |8D49 00 lea ecx,dword ptr ds:[ecx]
00418DD0 |> |8B06 /mov eax,dword ptr ds:[esi] ; DigitalC.0041AD80
00418DD2 |. |85C0 |test eax,eax
00418DD4 |. |74 0D |je short DigitalC.00418DE3
00418DD6 |. |8B4E 08 |mov ecx,dword ptr ds:[esi+0x8]
00418DD9 |. |51 |push ecx ; user32.76C60718
00418DDA |FFD0 |call eax
00418DDC |. |83C4 04 |add esp,0x4
00418DDF |. |85C0 |test eax,eax
00418DE1 |75 09 jnz short DigitalC.00418DEC
00418DE3 |> |8B76 04 |mov esi,dword ptr ds:[esi+0x4]
00418DE6 |. |85F6 |test esi,esi
00418DE8 |.^|75 E6 \jnz short DigitalC.00418DD0
00418DEA |> \33C0 xor eax,eax
00418DEC |> 5E pop esi
00418DED \. C3 retn
往上拉一下,00418DDA是关键!但我们不能nop掉这个call,我试过了,程序会死掉。正确的办法应该是把00418DE1 的jnz 改为 jmp。好了,到此为止客户端自动检测代理就被去掉了。
第二步,如果你们学校的服务器没有更新,可以尝试此办法不断网,不保证每个学校有效,很可惜我们服务器升级了,后来的破解工作并不顺利,加上我已无破解的动力了,所以没有最新的破解办法。
OD载入客户端,反汇编窗口右键 “中文搜索引擎”--“搜索ASCII”
找到这么一行:004098ED push DigitalC.0045F9A4 用户名不能使用除"_@.(+){=}-"以外的特殊字符
回车健跟踪,来到:004098ED
004098E6 |. 85C0 test eax,eax ;
kernel32.BaseThreadInitThunk
004098E8 75 12 jnz short DigitalC.004098FC
004098EA |. 53 push ebx
004098EB |. 6A 40 push 0x40
004098ED |. 68 A4F94500 push DigitalC.0045F9A4 ; 用户名不能使用除"_@.(+){=}-"以外的特殊字符
004098F2 E8 13690200 call DigitalC.0043020A
004098F7 |. E9 E3030000 jmp DigitalC.00409CDF
004098FC |> 8D4C24 14 lea ecx,dword ptr ss:[esp+0x14]
来到004098ED后,往上拉一下,把004098E8的 jnz 改为jmp,这样就能够输入特殊字符了。运行时在账号之间加入“\”,(比如帐号是123456,那么输入帐号12345\6)就可以不被断网了,不过断网后就无法重新连接了。
看完上面两步,或许对你有所帮助,学校网管也可以根据此来尽快修复漏洞。如果你有更好的想法,请在下方告知,谢谢。此次调试仅为学习,并无恶意,如果侵犯到了公司及学校利益,请及时指出,方便我做出修改,并在此道歉。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于阿呆,给予我指点 的有很多,由于此文的特殊性,原谅我不便在此举出,转载请注明作者并保持文章的完整, 谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)