首页
论坛
专栏
课程

[调试逆向] [原创]VMware虚拟机上如何调试运行DNF

2011-2-23 20:41 60569

[调试逆向] [原创]VMware虚拟机上如何调试运行DNF

2011-2-23 20:41
60569
以前调试游戏都是在实体机调试的,没有用虚拟机,因为看了它HOOK了三个函数,无法再虚拟机上使用,曾经看到有人更改KdDisableDebugger让其直接返回,能在虚拟机上使用,今天测试了一下,游戏一旦加载驱动直接蓝屏,今天就想办法让它不蓝屏,并可以调试(据听说有的人的虚拟机可以正常运行,不知道为啥!!!!!!难道我人品问题)。

不做任何处理直接在虚拟机中运行,系统蓝了如图:
 

然后咱开始处理了,这东西不难,难的是思路,这里来讲一下,系统蓝屏,调试器又收不到信号,同时用工具检测到,游戏的驱动挂钩了
KDCOM.dll:KdReceivePacket  //这两个是COM串口的接受和发送数据
KDCOM.dll:KdSendPacket      //主要用来方式别人双机调试 
这两个函数
同时用IDA检测到使用了KdDisableDebugger来禁用双机调试
因此正常的思路是把他们全部恢复过来,禁用KdDisableDebugger十分简单,我不赞同直接修改KdDisableDebugger的代码,反而喜欢直接把调用KdDisableDebugger的代码给NOP掉,至于如何NOP,看完下面的估计你就会的差不多了。
首先找到对:KdReceivePacket和KdSendPacket   HOOK的代码,这个我是在实体机上找到的,因为在实体机上一挂系统调试器就没法截屏,没有图十分遗憾,抽个空找个照相机照下来,这个以后补上。
一下是对这两个函数进行HOOK的代码:

 

找到这两个就好办了,然后挂上双机调试,开启游戏,但是别点登陆,否则系统又蓝了!
 

回到WINDBG,然后下断点,bp          nt!IopLoadDriver+0x66a
系统不同,下的地址也不同,以前我说过,不在重复
最后在给个贴图

 

然后g 运行
回到虚拟机,登陆游戏吧!
一会就中断到调试器中了,
 
进入这个CALL


 
算出它的驱动的基地址
这里算出基地址是EE276000
然后找到它HOOK的地址
输入命令
s -b EE276000 L5000 89 19 0F 20 C0 0D 00 00 01
得到如下图

 

然后反汇编uf ee27837c
得到如下
 

还等什么,把HOOK的位置直接NOP掉就行了



 
然后输入G
得到如下所示
 


啊!咋从新启动计算机了,呵呵别着急,因为咱只处理了两个地方,还有个KdDisableDebugger
没有处理,即使处理了,游戏也可能检测到系统运行在虚拟机环境中,至于如何不让他重启,且听下回分解!这里先给个思路,驱动中的重启代码


 
根据它就能找到了
休息会,找重启代码的就不贴了,下次再贴
搞掉重启后 系统还是蓝屏,但蓝屏后断下来了,调试器也能收到调试信息,游戏的驱动加载完毕了


,VMX_FB出错,
初步排除是虚拟机显卡的事情,然后我从网上找了个虚拟机显卡,比较早的,还是VM5的,我这个是是VM7的,没办法,试试呗,
 

进去了,有声音,就是黑屏,100%是虚拟机显卡的事情了,下次再找个合适的虚拟机显卡驱动吧。(我的操作系统是W7)。这里还有一个KdDisableDebugger还没处理,下次再说。

[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

上传的附件:
  • 1.jpg (52.50kb,2657次下载)
  • 2.jpg (50.33kb,2662次下载)
  • 3.jpg (31.06kb,2650次下载)
  • 4.jpg (52.78kb,2654次下载)
  • 5.jpg (111.24kb,2658次下载)
  • 6.jpg (98.53kb,2653次下载)
  • 7.jpg (56.39kb,2639次下载)
  • 8.jpg (129.79kb,2661次下载)
  • 9.jpg (112.44kb,2645次下载)
  • 10.jpg (30.78kb,2623次下载)
  • 11.jpg (44.94kb,2645次下载)
  • 12.jpg (176.90kb,2640次下载)
  • 13.jpg (28.91kb,2635次下载)
最新回复 (31)
邋遢鬼 2011-2-23 21:25
2
0
强贴呐,顶了。
kissoks 2011-2-24 12:59
3
0
厉害,学习了~~~~~~~~~~~:)
lmhmylsq 2011-2-24 22:39
4
0
楼主太给力了!!!
晓欣 3 2011-2-24 22:52
5
0
弱弱的问一下蓝屏是虚拟机里面蓝屏了还是主机蓝屏了?
foxabu 13 2011-2-25 06:12
6
0
其实我一直在想DNF是如何在我的Win7 64位上面跑起来的。
jerrynpc 2011-2-25 08:49
7
0
[QUOTE=foxabu;929406]其实我一直在想DNF是如何在我的Win7 64位上面跑起来的。[/QUOTE]

这要问韩国程序员了~

无泪现在越来越xxoo了~
zhouws 2 2011-2-25 08:57
8
0
[QUOTE=foxabu;929406]其实我一直在想DNF是如何在我的Win7 64位上面跑起来的。[/QUOTE]

是不是64位直接不保护了?哈。是的话,可以trick下
大狸子 2011-2-25 09:08
9
0
现在的虚拟机太强大了
gxmhack 2011-2-25 09:32
10
0
看到此贴,太感激了。无泪兄是为了俺才这么努力。。。。。。加油!
JWPL 2011-2-26 13:08
11
0
win7 64位上 有pageguard功能,  不能hook内核函数。
嘿嘿 所以 dnf的驱动保护在win7 64上无效。
PEBOSS 2011-2-26 21:15
12
0
图文并茂 , 技术人,非常赞赏!
foxabu 13 2011-2-27 01:17
13
0
关键是怎么拿到微软的驱动签名,或者说没有签名又是如何不重启加载驱动,或者如何在用户态defeat,kernel mode debugger?
广海混沌 2011-2-27 01:20
14
0
哈哈,我得支持一下无泪。
zijunby 2011-2-28 20:34
15
0
win7+vmware6.5.3 xpsp3ghost版能玩,不过键盘控制有点迟钝。
owcall 2011-3-1 03:58
16
0
winXP SP3+vmware7.1.3 xpsp3 运行没任何问题 很流畅
whitehack 2011-3-1 08:13
17
0
貌似我win7 + vm7.01 直接就能跑起来dnf 不过我没调试

http://blog.csdn.net/whitehack/archive/2010/12/17/6081247.aspx

不知道这个对你是否有用
长风傲天 1 2011-3-8 14:39
18
0
要是nop掉,和直接ret没啥区别啊……它会陷入死循环,虚拟机会很卡 = =
Dvsz 2011-3-9 09:27
19
0
太强大了,学习。。
peterchen 2011-3-14 17:34
20
0
希望楼主可以继续更新!多谢!
V仔 2011-3-19 13:06
21
0
强贴。多谢楼主的思路
achillis 15 2011-3-19 23:23
22
0
我的虚拟机可以DNF啊,不用改啥啥设置~~当然想要调试还得动点手脚
ylwb 2011-3-21 16:21
23
0
希望你能把它解决了。
wuxiaoxin 2011-5-21 20:15
24
0
DNF蓝屏也有可能是Direct3D加速没开
安达腾龙 2011-5-22 08:49
25
0
楼主强大!学习中
Music小冷 2011-5-28 03:22
26
0
先把KdDisableDebugger改为ret
ba2b2064 ffd7            call    edi//KdDisableDebugger
ba2b2066 803e00          cmp     byte ptr [esi],0         //KdDebuggerEnabled,cmp改为1让它跳过
ba2b2069 75dc            jne     TesSafe+0x5047 (ba2b2047)
ba2b206b 5f              pop     edi
ba2b206c 5e              pop     esi
ba2b206d c3              ret

然后
ba0aa6ff 7406            je      TesSafe+0x2707 (ba0aa707)
ba0aa701 3901            cmp     dword ptr [ecx],eax
ba0aa703 7402            je      TesSafe+0x2707 (ba0aa707)
ba0aa705 8901            mov     dword ptr [ecx],eax//KdpTrap,nop掉
ba0aa707 c3              ret


ba324371 0f20c0          mov     eax,cr0
ba324374 25fffffeff      and     eax,0FFFEFFFFh
ba324379 0f22c0          mov     cr0,eax
ba32437c 8919            mov     dword ptr [ecx],ebx//nop
ba32437e 0f20c0          mov     eax,cr0
ba324381 0d00000100      or      eax,10000h
ba324386 0f22c0          mov     cr0,eax
ba324389 fb              sti
ba32438a b001            mov     al,1

ba3243a1 0f20c0          mov     eax,cr0
ba3243a4 25fffffeff      and     eax,0FFFEFFFFh
ba3243a9 0f22c0          mov     cr0,eax
ba3243ac 8939            mov     dword ptr [ecx],edi//nop
ba3243ae 0f20c0          mov     eax,cr0
ba3243b1 0d00000100      or      eax,10000h
ba3243b6 0f22c0          mov     cr0,eax
ba3243b9 fb              sti
ba3243ba b001            mov     al,1

接着...重启了
lixupeng 2011-5-28 20:48
27
0
mark!!!
Music小冷 2011-6-29 12:31
28
0
难道只有我自己出现这个情况了?
无泪城 2011-7-1 11:26
29
0
只要虚拟机TOOL装正确了,是可以在虚拟机上运行的。
首先解释下
KDCOM.dll:KdReceivePacket  //这两个是COM串口的接受和发送数据
KDCOM.dll:KdSendPacket      //主要用来方式别人双机调试
解决这两个HOOK保证能进行通讯。上次做的匆忙,对这两个函数挂钩的地方是不能NOP掉了,只要NOP就从新启动计算机,解决办法有两个,一是找到监控这个位置的函数,然后处理掉,另外一个是往上找找,我记得有一个跳转,直接跳出保证不执行HOOK。
对于禁止双机调试比较麻烦,也是有监控的,抽个空做个完整的。
mumaren 2011-7-1 20:43
30
0
期待完整代码

3q
cvcvxk 10 2011-7-2 01:17
31
0
Windbg功能很强大,但是被anti也很强大~
chhhxj 2012-5-11 18:30
32
0
没玩过虚拟机
游客
登录 | 注册 方可回帖
返回