Contiki Re-hosting 小记
本文记录如何用 Unicorn 模拟执行操作系统 Contiki-NG,并在上面复现并利用 CVE-2023-23609 的故事。
本文记录如何用 Unicorn 模拟执行操作系统 Contiki-NG,并在上面复现并利用 CVE-2023-23609 的故事。
年初 SECCON CTF 22 final 上第二天出了一道 KoH 题:给定 binary 要求写出源码,判定标准为编译后与目标 binary 的 diff,越小则分数越高。每一小时更换一门语言,从 c,c++ 到 d, go, web assembly 等等。我读完题目就放弃了因为我知道我的逆向水平就是依托答辩,而队友也不负众望基本一整天都在爆杀全场。我在崇拜之余不由得思考起一个问题,逆向应该怎么学?
感谢 Nu1L 和 AAA 的几位师傅分享思路。
本文将细致阐述 AFL 变异方式,包括各阶段的变异算子与次数等细节。变异模式是固定的,所以变异细节看上去繁琐又无趣。但正如白皮书中提到,“它被认为是一个被实践证实有效的 hack 行为集合,把这些行为以最简单、最健壮的形式实现便得到了 AFL”,经验主义的产物是不可小觑的。
AFL 源源不断地将变异得到的测试用例喂给待测试程序,这个过程中少不了 fork 与 execve. 为提高效率、减少开销,它实现了一套 forkserver 机制来反复运行并测试程序。
紧接上一部分,本文将更进一步探讨 AFL 如何在运行时保存和分析路径覆盖信息,以及队列优胜者的选取思路。前者为启发式变异提供导向,后者为 culling the corpus 的基础。
afl-fuzz.c 概览,后续重点将放在 forkserver 和启发式变异细节上。