我正在尝试使用 AFL (Qemu-mode) --一个不断等待数据的二进制应用程序,而且由于我没有源代码来修改二进制文件,以便在解析数据后使其exit(0),所以我决定对二进制文件编写一个包装器,以便在经过一段时间之后能够退出,记住这一点。
STDIN或作为一个二进制应用程序通过测试输入,我希望输入在STDIN中,然后继续等待输入。我的策略基于父/子样式(分支),这样子应用将是二进制应用程序,而父程序将监视它。
父程序使子级(二进制-app)以0状态退出,如果5秒内没有发生崩溃(在子process).
stdin
AFL就会注意到这一点,并保存负责崩溃的测试文件。
我的问题是:
如何使状态为0的parent
E 242 exec()
is运行二进制应用程序之后,从父E 240进程<代码>E 141发送数据到子进程,这是一个很好的方法,因为E 247
>是基于E 148>退出状态的。
发布于 2020-03-27 03:04:17
不完全是你要问的问题的答案,但是.
,因为我没有源代码来修改二进制文件,以便在解析数据之后退出(0),
上述前提是错误的。
--我决定为二进制文件编写一个包装器,以便在经过一定时间后退出,
这种方法虽然可行,但会浪费大量时间:您不知道解析需要多长时间,所以您必须等待一些最大的时间。如果你等待的时间不够长,你就会错过测试覆盖范围。您还忽略了对解析器进入无限循环的介绍。
那么,如何在解析后使程序exit(0)呢?通过二进制补丁。这是一个example。
您需要在二进制文件中找到一个位置,在其中ParseInput() (或任何称为syscall(SYS_exit, 0) )例程返回,并修补几条指令以执行等效的syscall(SYS_exit, 0)。
在此之后,您的模糊处理将进行得更快(在解析完成时不会浪费时间),并且您将能够检测解析器何时进入无限循环。
https://stackoverflow.com/questions/60878332
复制相似问题