首页
社区
课程
招聘
[旧帖] [原创]游戏无法双机调试的解决办法 0.00雪花
2012-10-23 12:41 3054

[旧帖] [原创]游戏无法双机调试的解决办法 0.00雪花

2012-10-23 12:41
3054
游戏无法双机调试的解决办法
环境:VM虚拟机(win7 32位)
研究游戏:玄天之剑
作者:ノ淡淡的忧伤
一、需要解决的问题
在虚拟机双机调试的环境中运行游戏,出现如下提示:

这是由于游戏检测系统处于调试环境中,因为他要保护游戏,不然做外挂的对他进行分析。
二、问题分析
今天在一位前辈的帮助下,告诉了我KdDisableDebugger 这个函数,看这个函数名也知道,这个函数是禁止调试的函数。前辈让我看这个帖子
http://bbs.pediy.com/showthread.php?p=1098640
我看了几次,没怎么看懂,后来看了半天算是搞懂了个大概,这个例子给出的游戏检测的原理,和我们研究的这款游戏的原理不一样,我们这款游戏只是检测当前是否处于调试系统中,如果是就报错,如果不是那就正常运行。然而这个例子是游戏将系统的调试给进制了,然后游戏正常启动后你无法下断点。
了解了原理后我们开始工作:
首先游戏客户端要判断,肯定有个比较,有个跳转 汇编里面就是jmp  jnz  js 等命令
三、问题处理
首先,我们打开windbg,然后对KdDisableDebugger 下断点, bp KdDisableDebugger



F5运行,让虚拟机跑起来,重新打开游戏,点击进入游戏后,游戏开始加载驱动,然后就会断下



然后一直F10,知道虚拟机完全跑起来(在这之前需要载入符号表,不然你无法看到跟我一样的LOWGameShipping!CsvProvider+0x504aea)



程序只执行了这几个指令就弹出错误
LOWGameShipping!CsvProvider+0x50025f:
001b:01b98b3b 0f8885480000    js      LOWGameShipping!CsvProvider+0x504aea (01b9d3c6)这条显然是判断系统调试的。看到这里明白了把,我们把js改成jmp就行了。
强制跳转。
我们要修改01b98b3b这个地址处的代码,windbg好像只能写入硬编码(16进制数据),如果不知道怎么写,我们用OD写出来看看  jmp 01b9d3c6  js的编码是0f88,jmp的编码是e9  我们把0f88换成e9,e985480000,我们只写入前4个字节,就是e9854800
我们开始修改 ed  LOWGameShipping!CsvProvider+0x50025f: e9854800
PS:LOWGameShipping!CsvProvider+0x50025f:指向的地址就是JS那条地址的
写入后运行

,回到虚拟机重新开游戏


看到了把,游戏已经启动了,现在你可以邪恶了,开始研究驱动吧。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (5)
雪    币: 438
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
superyong 2012-10-23 17:34
2
0
谢谢分享!!
雪    币: 42
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
MDebug 2012-10-23 18:07
3
0
赞一个。。。。
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tbuffay 2012-10-24 11:33
4
0
KdDisableDebugger 只是万里长征的第一步。
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
stylezhou 2012-10-24 20:07
5
0
我也是初学者,大家一起研究
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
stylezhou 2012-10-24 20:08
6
0
谢谢支持,第一次在看雪发帖
游客
登录 | 注册 方可回帖
返回