我正在尝试在 Ubuntu 中将 afl-fuzz 与 openssl 一起使用。 afl-fuzz 的正常用法是:
afl-gcc test.c //-- this will produce a.out
mkdir testcases
echo "Test case here." > testcases/case1
afl-fuzz -i testcases -o findings ./a.out
现在对于 openssl 来说,它会是这样的:
afl-gcc ./config
make //-- not sure of this :)
afl-fuzz -i test -o findings <exe_name>
其中“test”是包含 openssl 测试用例的文件夹
我的问题是 openssl 的“exe_name”参数是什么?如果我对其余代码的理解有误,请纠正我。谢谢
答案1
我完全确定“openssl 的“exe_name”参数”是什么意思,但是:
afl-fuzz -i test -o findings ~/path/to/binary/to/fuzz @@
将对 处的二进制文件进行模糊测试~/path/to/binary/to/fuzz
,并替换@@
为从 中的种子文件生成的变异测试用例的路径test
。
答案2
您不能按原样使用 openssl 二进制文件。您需要编写一个单独的程序,该程序将使用 openssl 库,然后使用 afl-fuzz 对其 exe 进行模糊测试。
整个过程就是这样
下载openssl
1. ./config // If you disable something here like no-comp then you have to run`make depend`.
2. Replace gcc with afl-gcc in Makefile
3. make && make install
此过程将使用 afl-gcc 编译 openssl,您可以查看如何将检测添加到目标文件中。最后你会得到openssl 目录中的文件libssl.a
。libcrypto.a
成功编译 openssl 后,在示例应用程序(例如 example.c)中使用它,然后编译此文件
4. afl-gcc sample.c -o sample libssl.a libcrypto.a -ldl
然后最后执行模糊测试 5. afl-fuzz -i testcases -o discovery -m none -- ./sample