打不开英雄联盟 显示异常代码:c0000005 异常偏移:000a95b1?

我不太确定,但我认为 winafl-cmin.py 脚本期望初始 seed 文件指向相同的代码路径,也就是我们必须一次有效的测试用例,和一次无效的测试用例。可能是我错了,也可能是有一个 bug。

我们使用下面的 bash 脚本来确定一下“好的”和“坏的”XML 测试用例。

下面的截图显示了我的运行结果:

随意尝试一下,看看是哪些文件导致了这个问题(你的可能会有所不同)。一旦确定,再次运行上面的命令,希望你能得到下面的结果:

你看,初始用例包含 76 个文件,最小化后缩减至 26 个。感谢 Axel!

使用最小化后的测试用例,我们来编写一个可以自动化执行所有代码覆盖的 python 脚本:import sys

上面的脚本在我使用的用例里生成了下面的输出:

有趣的是,请注意存在多少个 parse 函数,如果你在覆盖范围内徘徊,将会看到我们已经设法得到了大量有趣的代码。

由于我们确实得到了不错的代码覆盖率,让我们继续前进,最终 fuzz 它!

运行上面的命令后得到下面的输出:

正如你看到的,初始代码就是做这个工作,但速度非常慢。每三秒执行一次将消耗大量的时间才能得到正确的结果。有趣的是,我曾经就是在这种速度下(在 afl/winafl 时代之前,使用 python 和 radamsa),在三天的测试中发现了 bug!

让我们尽可能地从拖慢 fuzz 速度的部分解脱出来。如果你曾经做过 Windows 编程,就会知道下面一行初始化了一个 COM 对象,这可能就是速度的瓶颈:

这一行确实是一个主要的问题,因此我们来重构代码,我们将创建一个 fuzzme 方法,该方法将在 COM 初始化调用之后接受文件名作为一个参数。重构的代码如下:

你可以从得到重构后的版本。使用重构的二进制文件我们来再一次运行 fuzzer,看看是否正确。这一次,我们将传递 fuzzme 作为 target_method,而不是 main,并且只使用一个参数,即文件名。这里,我们使用 lcamtuf 的 xml.dic,来自

一旦你运行脚本,在 VMWare 中几秒钟就出现了下面的输出:

好多了,现在我们让它运行起来然后等待崩溃吧!

结果 – 崩溃分类和分析

通常,我会尝试用不同的测试用例来 fuzz 这个二进制文件,但幸运的是我不断得到 NULL pointer dereference 的 bug。下面的截图显示了大约 12 天后的结果:

请注意,总共执行了 33 万次,并发现了 26 次不同的崩溃!

为了给结果分类,我使用了 SkyLined 的  工具,这是一个很棒的工具,能为你提供关于崩溃和崩溃利用的详细报告。

运行上面的脚本得到了下面的输出:

一旦我为所有得到的崩溃运行了它,可以很清楚的看到,我们命中的是相同的 bug。为了确认这一点,让我们打开 windbg:

让我们来看一个造成崩溃的 xml:

正如你看到的,如果我们在 xml 或者其编码后提供了一些 garbage,就会得到上面的崩溃。Mitja 还将测试用例减到最小,如下所示:

对该库进行模糊测试的整个思想,是基于在 IE 上下文中找到一个漏洞并以某种方法触发它。经过一番搜索,让我们使用下面的 Poc(crashme.html),看看它是否会使 IE11 崩溃:

Bingo!正如预期的那样,至少在启用了 PageHeap 的情况下,我们能够触发与我们在测试框架中相同的崩溃。小心不要在 Microsoft Outlook 中包含该 xml,因为它也会崩溃!此外,由于它基于库本身,如果产生一个更 sexy 的崩溃,则会增加攻击面!

在与 Mitja 通过电子邮件交流后,他向我提供了可以在完全更新的 x64 系统上使用的补丁:

我们来调试和测试下这个补丁程序,我已经创建了一个账户,并未开发者安装了 0patch 代理,右击上述的 .0pp 文件:

一旦在测试框架中使用了可以导致崩溃的 xml,我立即设置断点:

太棒了!接下来我在修复后的版本上再次启动 winafl,但是不幸失败了。由于 0patch(钩子函数?)的性质,它与 WinAFL 不兼容,于是崩溃了。

然而,这是一种“DoS 0day”,正如我之前提到的,我在2017年6月向微软提出报告,二十天后收到一下邮件:

我完全同意这一决定,但我最感兴趣的还是修补掉这个烦人的 bug,以便我可以继续前进。在调试器上花了几个小时之后,我发现唯一可控制的用户输入是编码字符串的长度:

如你所见,花一些时间在微软的 API 和文档上是非常值得的!另外,重构一些基本函数并精确定位影响性能的问题也可能对我们的工作有很大的改进!

我必须感谢 lvan 将 afl 移植到 Windows 并创建了这个令人吃惊的项目。也感谢 Axel 和其他一直积极做贡献的人。

我的同事 Javier 激励我写了这篇博客,Richard 一直在回答我愚蠢的问题,并给我所有的帮助,来自 0patch 的 Mitja 建立了这个补丁,最后 Patroklo 几年前教了我一些模糊测试的技巧!

程序的 编译没有问题。。但是 出错误。。

求问题原因?!!!没有找到空指针项。。。
或者怎么看是不是空指针??

我要回帖

更多关于 异常代码c0000005 的文章

 

随机推荐