首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模糊没有源代码的arm二进制文件时出现"Fork server握手失败“错误

模糊没有源代码的arm二进制文件时出现"Fork server握手失败“错误
EN

Stack Overflow用户
提问于 2021-02-08 11:25:05
回答 1查看 493关注 0票数 0

这里有人吗?我一直致力于使用afl-qemu模式模糊IoT二进制文件。但在开始运行二进制文件时,我遇到了"Fork服务器握手失败“的问题。我已经阅读了之前的相关会话,但这些都不能解决我的问题。

二进制文件的信息如下:

代码语言:javascript
复制
./bin/busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped

通过我的测试,只有4.1.0以上的qemu版本才能成功处理'-L‘参数。因此,我通过编辑build_qemu_support.sh来升级qemu版本。需要提到的是,我注释掉了几行代码,以便处理运行时出现的错误。

代码语言:javascript
复制
#patch -p1 <../patches/elfload.diff || exit 1
#patch -p1 <../patches/cpu-exec.diff || exit 1
#patch -p1 <../patches/syscall.diff || exit 1

在设置了QEMU_LD_PREFIX和AFL_PATH之后,我尝试了类似于“afl-showmap -m none be _ out /out.txt busybox -Q ./bin/busybox cat”的建议,结果很好。

代码语言:javascript
复制
root@ubuntu:squashfs-root# afl-showmap -m none -o fuzz_out/out.txt -Q ./bin/busybox cat
afl-showmap 2.52b by <lcamtuf@google.com>
[*] Executing './bin/busybox'...

-- Program output begins --

但是当我尝试命令'afl-fuzz -m none But _in/ -o fuzz_out/ -Q ./bin/busybox cat @@‘时,它报告如下所示的错误。

代码语言:javascript
复制
root@ubuntu:squashfs-root# afl-fuzz -m none -i fuzz_in/ -o fuzz_out/ -Q ./bin/busybox cat @@
afl-fuzz 2.52b by <lcamtuf@google.com>
[+] You have 4 CPU cores and 2 runnable tasks (utilization: 50%).
[+] Try parallel jobs - see /usr/local/share/doc/afl/parallel_fuzzing.txt.
[*] Checking CPU core loadout...
[+] Found a free CPU core, binding to #0.
[*] Checking core_pattern...
[*] Setting up output directories...
[+] Output directory exists but deemed OK to reuse.
[*] Deleting old session data...
[+] Output dir cleanup successful.
[*] Scanning 'fuzz_in/'...
[+] No auto-generated dictionary tokens to reuse.
[*] Creating hard links for all input files...
[*] Validating target binary...
[*] Attempting dry run with 'id:000000,orig:testcase'...
[*] Spinning up the fork server...

[-] Hmm, looks like the target binary terminated before we could complete a
    handshake with the injected code. Perhaps there is a horrible bug in the
    fuzzer. Poke <lcamtuf@coredump.cx> for troubleshooting tips.

[-] PROGRAM ABORT : Fork server handshake failed
         Location : init_forkserver(), afl-fuzz.c:2253

谁能告诉我问题出在哪里?我升级qemu有什么关系吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 19:42:48

您已尝试升级afl-qemu使用的QEMU版本。因为afl-qemu会修改QEMU的源代码,所以这不是一件容易的事情。特别是,您注释掉的这些命令:

代码语言:javascript
复制
#patch -p1 <../patches/elfload.diff || exit 1
#patch -p1 <../patches/cpu-exec.diff || exit 1
#patch -p1 <../patches/syscall.diff || exit 1

都是写着“对.diff文件指定的QEMU源代码进行精确修改”的命令。注释掉补丁命令意味着不会进行修改。因此,生成的QEMU二进制文件不能以应有的方式与afl-qemu框架交互也就不足为奇了。

如果您需要使afl-qemu与较新的QEMU一起工作,则必须查看所有补丁文件,并确定较新的QEMU版本上的等效更改。除非您熟悉(或愿意花时间熟悉) QEMU和afl-qemu的内部结构,否则这将是一件棘手的事情。(您可以环顾四周,看看是否有人已经这样做了。)

如果您尝试此升级的唯一原因是为了避免在早期QEMU版本中使用'-L‘选项的QEMU错误,那么如果您使用标准的afl- QEMU,并将您指向的'-L’目录更改为更简单,以便旧的QEMU可以使用它,可能会更容易。特别是,不要指向整个chroot,而是只指向具有来宾共享库的目录结构,并且目录之间没有任何符号链接。(特别是符号链接结构导致旧的QEMU挂起。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66095549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档