问题简述: 魔兽争霸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.exe的dep是打开的,我们去系统设置中观察 Svchost.exe是系统程序,默认打开了dep。 我们再去正常环境下观察下dep的设置 在正常环境下,内存重载的dll发生异常了,RtlIsValidHandler检测到该程序的dep并没有开启,也就不会去查回调地址是否是image和可执行了。 解决方案: 1.
永久关闭系统中的dep。 在系统附件里面找到cmd右键"以管理员权限"执行cmd,在命令行下执行命令“bcdedit /set nx alwaysoff”,重启系统后Windows 7的EDP就关闭了。 |