---
# System prepended metadata

title: AFL QEMU_MODE (二)
tags: [afl]

---

###### tags: `afl`
# AFL QEMU_MODE (二)
繼上次成功對x86-64的`busybox`fuzzing之後，我把目標轉到MIPS架構的`busybox`，但是卻遇到`/etc/ld.so.cache`corrupt的問題，在那之後我有在想會不會是cpu_target其實沒有指定好，但是我在指定了cpu_target之後，對x86的`busybox`下`afl-showmap -m none -o /dev/null -Q /bin/busybox`這個指令的時候，他的output顯示這個：
![](https://i.imgur.com/L9JmWvU.png)
他說`Invalid ELF image for the architecture`，所以代表當下qemu要虛擬的架構是`MIPS`的，x86對他來說是不行的。

接下來我想要驗證的是，如果我可以找到一個static(沒有dynamic link)的binary(MIPS)，然後成功的用`afl qemu_mode(cpu_target=mips)`對他進行fuzzing，那就可以驗證說，afl-fuzz本身是沒有問題的，有問題的是我本來想要拿來test的busybox因為有dynamic link library的關係，導致qemu想要虛擬化他的時候失敗了。
所以我在網路上找了一下看有沒有人提供compile好的mips binary，可以讓我來試試看。後來就找到了[這個](https://github.com/darkerego/mips-binaries)
![](https://i.imgur.com/6fDcv9s.png)
就決定來試試看，一開始就有看到他有靜態的`busybox-mips`這個binary，所以就決定先用他來試試看，結果好像顯示我的cpu不夠跑，所以導致他的test case的reponse time太長了，然後他就自己shut down了。
`afl-fuzz -i fuzz_in -o fuzz_out -m none -Q ./busybox-mips`
![](https://i.imgur.com/SvzugMH.png)

我就想說那我就來試試看一個比較輕量的binary(一樣是mips架構的)，所以我就找到mips的python來試試看，結果又出現不一樣的問題，後來查了一下，發現他是因為python他會一直在一個無窮迴圈裡面，然後出不來，導致afl沒辦法正常的對他做fuzzing，所以我就再來試試看下一個。
`afl-fuzz -i fuzz_in -o fuzz_out -m none -Q ./python`
![](https://i.imgur.com/PM7CbpO.png)

下一個我選了一個也是比較小的binary，然後不是interactive的，就選`tcpdump`來試試看，後來就成功了！！
`afl-fuzz -i fuzz_in -o fuzz_out -m none -Q ./tcpdump`
![](https://i.imgur.com/B08Ie5x.png)

到這裡我們就可以知道說，`afl qemu_mode`是真的可以對不同架構下的binary做fuzzing的，可是在沒有加任何參數的情況下，我們只能對static的binary做fuzzing，有dynamic link的binary，就需要去解決link的問題(當然就是qemu在虛擬化的時候不會成功有關係)。