首页 IT技术 游戏问题 查看内容

魔兽争霸3斧王全图外挂无法启动问题排查

游戏问题 3447 0 2017-2-7 14:13

问题简述: 魔兽争霸3斧王全图外挂无法正常启动。 问题排查: 0x1: 先使用process monitor简要看下程序的行为 这样,我们就可以简要得出这个外挂的启动逻辑 挂起启动系统目录的svchost.exe,然后注入temp目录下的740 ...

问题简述:

魔兽争霸3斧王全图外挂无法正常启动。

问题排查:

0x1:

先使用process monitor简要看下程序的行为



这样,我们就可以简要得出这个外挂的启动逻辑

挂起启动系统目录的svchost.exe,然后注入temp目录下的74085475.dll,然后74085475.dll启动了2个线程,启动一个线程加载了temp目录的0.dll,然后引发异常,程序崩溃。

0x2:

使用OD调试器挂起启动一个svchost.exe,然后注入74085475.dll 找到引发异常的位置

在这个异常抛出之后,程序就崩溃了。根据上下文的意思,我先是认为是在对c:\0.ini文件进行打开的时候失败了引发的异常,找一个可以正常开启外挂的机器,在这里下断点,仍旧抛出了异常,但是程序没有崩溃。

我们查看一下seh链表中的地址

发现这个0.dll在加载后,其实是把自身给重载了的。我们知道重载的dll在异常处理上有天生的缺陷。我们在第一个seh中下断点,然后复现,然后发现并没有调用。

我们知道在异常处理中RtlDispatchException会检测seh的地址是否为safe-seh地址,是否是可执行内存,等等的检测。

其中关键的检测部分是在RtlIsValidHandler函数中。

这个函数先判断she地址是否在异常表中,如果不在,就判断dep是否开启,如果程序的dep没有开启,就去查询这个地址是否是一块可执行的image内存。

0x3:

那为什么这个seh的函数没有执行呢,我们在RtlIsValidHandler下断点跟踪一下

最后在判断是否image的时候,失败了,所以程序就没有调用异常处理函数了。

我们去这个重载的内存去看一下属性

是含有执行权限的,但是类型并不是 image类型。

我在上面说过了,程序会先判断是否是safe-seh,再判断程序dep是否开启了。

我们用process monitor可以看到svchost.exedep是打开的,我们去系统设置中观察

Svchost.exe是系统程序,默认打开了dep

我们再去正常环境下观察下dep的设置

在正常环境下,内存重载的dll发生异常了,RtlIsValidHandler检测到该程序的dep并没有开启,也就不会去查回调地址是否是image和可执行了。

解决方案:

1.       永久关闭系统中的dep

    在系统附件里面找到cmd右键"以管理员权限"执行cmd,在命令行下执行命令“bcdedit /set nx alwaysoff”,重启系统后Windows 7EDP就关闭了。

2

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (2 人)