winAFL

DynamoRIO
DynamoRIO是一个运行时代码操作系统,支持在程序的任何部分执行代码转换。DynamoRIO导出了一个用于构建动态工具的接口,用于各种用途:程序分析和理解,分析,检测,优化,翻译等。与许多动态工具系统不同,DynamoRIO不限于插入标注/蹦床,并允许任意修改通过一个功能强大的IA-32 / AMD64 / ARM / AArch64指令操作库来应用指令。DynamoRIO可以对在股票操作系统(Windows,Linux或Android)以及商品IA-32,AMD64,ARM和AArch64硬件上运行的未经修改的应用程序提供高效,透明和全面的操作。
http://blog.csdn.net/gengzhikui1992/article/details/50790553
http://www.dynamorio.org/
winAFL
关于这个东西,网上资料很多很多了。我是只是把看过的整理下~
http://lcamtuf.coredump.cx/afl/
https://paper.seebug.org/323/
AFL(American Fuzzy Lop)由于其代码设计的原因,它并不支持 Windows 平台,而 WinAFL 项目正是在 Windows 平台下的移植。
AFL 借助编译时插桩和遗传算法实现其功能,由于平台支持的关系,在 WinAFL 中该编译时插桩被替换成了 DynamoRIO 动态插桩,此外还基于 Windows API 对相关函数进行了重写。
最近一直在跟着Boss学习fuzz,,hah boss人挺好的,果然还是自家学长人好阿~
主要看下面这个文章~ 老外们真是厉害。
https://symeonp.github.io/2017/09/17/fuzzing-winafl.html
然后自己也复现他的过程。就是我自己的笔记本不行,跑的速度慢~~
“”

然后看看winAFL的文档,原文档是英文的,通过谷歌再结合自己的理解,对屏幕上的各个模块进行简单的描述。错了的话- - 我不负责哦。

1) Process timing

+—————————————————-+
| run time : 0 days, 8 hrs, 32 min, 43 sec |
| last new path : 0 days, 0 hrs, 6 min, 40 sec |
| last uniq crash : none seen yet |
| last uniq hang : 0 days, 1 hrs, 24 min, 32 sec |
+—————————————————-+
运行时间,路径,最近的一次崩溃和挂起

If there are no new paths showing up for a while, you will eventually see a big red warning in this section, too :-)

2) Overall results

+———————–+
| cycles done : 0 |
| total paths : 2095 |
| uniq crashes : 0 |
| uniq hangs : 19 |
+———————–+
完成的周期,总路径,崩溃数,挂起数

3) Cycle progress

+————————————-+
| now processing : 1296 (61.86%) |
| paths timed out : 0 (0.00%) |
+————————————-+
当前周期执行的进度,由于执行时间过长而丢弃的路径。

4) Map coverage

+————————————–+
| map density : 6.92% / 15.72% |
| count coverage : 4.03 bits/tuple |
+————————————–+
The section provides some trivia about the coverage observed by the instrumentation embedded in the target binary.
The first line in the box tells you how many branch tuples we have already hit, in proportion to how much the bitmap can hold.
我还是没看懂这个模块~~~我的理解就是:
这个是模块是说,我们这个winAFL工具对我们要fuzz文件的覆盖范围–15.72%。
6.92% 是说已经有多少个分支(占的百分比)。
4.03 应该是每个分支中,尝试执行的数据速度。

5) Stage progress

+————————————-+
| now trying : interest 32/8 |
| stage execs : 3996/34.4k (11.62%) |
| total execs : 27.4M |
| exec speed : 891.7/sec |
+————————————-+
there’s the exec count progress indicator for the current stage, a global exec counter, and a benchmark for the current program execution speed. This may fluctuate from one test case to another, but the benchmark should be ideally over 500 execs/sec most of the time - and if it stays below 100, the job will probably take very long.
正在尝试的路径还是什么的~第一行不是很明白
已经尝试的exec(以及所占的这个分支里的百分比 11.62%)
总共执行的exec的大小, 执行的速度~

6) Findings in depth

+————————————–+
| favored paths : 879 (41.96%) |
| new edges on : 423 (20.19%) |
| total crashes : 0 (0 unique) |
| total hangs : 24 (19 unique) |
+————————————–+
模糊器所喜欢的路径数量【The section includes the number of paths that the fuzzer likes the most based on a minimization algorithm baked into the code (these will get considerably more air time)】
更好的边缘覆盖的测试用例的数量【he number of test cases that actually resulted in better edge coverage (versus just pushing the branch hit counters up)】
总的crashes
总挂起数

7) Fuzzing strategy yields

+—————————————————–+
| bit flips : 57/289k, 18/289k, 18/288k |
| byte flips : 0/36.2k, 4/35.7k, 7/34.6k |
| arithmetics : 53/2.54M, 0/537k, 0/55.2k |
| known ints : 8/322k, 12/1.32M, 10/1.70M |
| dictionary : 9/52k, 1/53k, 1/24k |
| havoc : 1903/20.0M, 0/0 |
| trim : 20.31%/9201, 17.05% |
+—————————————————–+
这一块还不懂,明天起来再来看看。贴上官方说明:
The trim strategy stats in this section are a bit different than the rest.
The first number in this line shows the ratio of bytes removed from the input
files; the second one corresponds to the number of execs needed to achieve this
goal. Finally, the third number shows the proportion of bytes that, although
not possible to remove, were deemed to have no effect and were excluded from
some of the more expensive deterministic fuzzing steps.
第一行显示的是从输入文件删除的字节的比例,第二行是为了实现这个目标而需要执行的程序数量。
第三行表示不能被删除的字节比例,虽然对很多重要的fuzz步骤没有影响。

8) Path geometry

+———————+
| levels : 5 |
| pending : 1570 |
| pend fav : 583 |
| own finds : 0 |
| imported : 0 |
| variable : 0 |
+———————+

本节中的第一个字段跟踪通过引导模糊过程达到的路径深度。 实质上:用户提供的初始测试用例被认为是“1级”。
通过传统的模糊测试可以得出的测试用例被认为是“2级”;
将这些数据作为后续模糊轮次的输入而导出的是“第3级”。 等等。

pending:没有经过任何fuzz的输入数量,

未完。。先睡了~~~明天还得继续去跟Boss学习。

  • -哇,看了下时间,尽然是12号的。好吧,现在26号了。
    说好的明天起来看,这个明天有点长啊。

好,说点其他的。跟boss一起fuzz了没多久,应该跑不出什么东西了。我提供的样本,有时候会蹦掉。emm,是把winAFL跑蹦了。
一般跑到6-7个小时的时候,就出错了。我也不知道为啥。

上面那个外国大佬的文章,给的精简xml文件的命令,老是出错。也就是他文章中的那个错误。
我的解决办法有点飘 ^ ^ 大家不要笑:
1.先给个错误的路径,让他报出其他错误,让后再改回来,执行一下,发现成功了。(这是黄师傅发现的~~)
2.- -我就什么都没做,反复执行了几次命令,还是报错。然后,我等了几分钟,执行相同的命令。成功了(果然有玄学),具体原因还是不知道。

后面~ ~,对,也就是12号到今天的这2周。
啥都没干。。。。 还被点名了,只能乖乖去上课。在学业不落下的情况下,去实习才是正确的。
让自己忙吧。忙点好阿~~ 休息下来的时候,才会感到很惬意。

不知道写什么了~~好吧。实习前三周,差不多就这样。 给张图,出自魔法师的新娘。
“”