哟哟哟,这不是err坑吗?踩!都给我狠狠地踩!
上链接!VirtFuzz
先改个目录名吧,下载(或git)下来的目录改成 virtfuzz且小写,不然后面的命令都是跑的小写还得自己改
那仨要求
先说我认为的结论,以下仨文件夹放哪都行,自己记住路径就好,对应改改就行
Patched QEMU(可以先看第二种方法
如下图,就这玩意
问题是什么呢?
就是红框的那个变量压根不知道,当然是可以根据自己下载的地方改改路径的,但没必要
在virtfuzz/setup-scripts下有个 .sh 脚本,里面就有这个变量,而且命令内容完全一样
so,先确保自己有根目录权限,因为这个变量的值其实是 /bin,然后这个脚本是到 /opt里操作
cd virtfuzz/setup-scripts
chmod +x setup-qemu.sh
sudo ./setup-qemu.sh
当然也可以自己改命令(第二种方法
在virtfuzz目录下执行这些命令
curl https://download.qemu.org/qemu-8.2.2.tar.xz -o qemu.tar.xz
tar xvJf qemu.tar.xz
mv qemu-8.2.2 qemu
cd qemu
patch -p1 < ../qemu-patch.patch
mkdir build
cd build
../configure --target-list=x86_64-softmmu
make -j$(nproc)
其实就是把红框中的那个变量去掉了
这样的好处是在最后运行的时候路径是自己知道的(配路径在后文
构建镜像
命令./create-image.sh -d stretch,报
I: Keyring file not available at /usr/share/keyrings/debian-archive-keyring.gpg; switching to https mirror https://deb.debian.org/debian
ls查看/usr/share/keyrings/
发现确实只有一个对应的.bak备份文件debian-archive-keyring.gpg.bak
sudo apt-get install debian-archive-keyring
好,为什么要解决这个呢?因为好看……吗?当然不是,不然后面的换版本也不会有效(我也不知道为啥
再试
还会报E: Failed release file https://deb.debian.org/debian/dists/stretch/release(大概是这样的,忘了截图,反正就是找不到的意思)
网站点进去也是not found,但是返回到https://deb.debian.org/debian/dists/就还是有的,不过只有buster及之后的Debian发行版本,其实旧版本都被搬到了https://archive.debian.org/debian/dists/
所以
要么找到换网址的配置文件(我没找到,各位大神发发力让我蹭蹭
要么就把stretch换成buster(写这个文章的时候buster还在https://deb.debian.org/debian/dists/里,所以可用,后面再更新之后就只能往后写更新的发行版本)
./create-image.sh -d buster
顺便
把virtfuzz/fuzz/src/main.rs的93行(没改的话,也差不多这个地方)的stretch.img改成buster.img(按发行版本改),然后改成绝对路径(相对路径也可以,不过好像每次运行挺麻烦的);
如果上面配qemu的时候用的是第一种方法,那就把qemu的路径改成/opt/qemu/build/qemu-system-x86_64(最好还是看看有没有这个文件
Patched Kernel
如下图,这是最后一个条件了(记得目录名改小写
看这点点杠(. ./)的意思……就是把linux放在virtfuzz外面呗,就它俩是同级目录
那么到这里,仨环境就配完了……吗?对……对吗?(官方快看看我,改改readme吧
运行?
试图开跑
先分别到virtfuzz下的三个目录(对应三个命令,fuzz、proxy、replay)下cargo build一下,然后这仨生成的二进制程序都在virtfuzz/target/debug里
算跑通了?
这俩命令一样的,请复制第二条并修改成自己的再运行,第一条用来看的(格式?
virtfuzz-fuzz --kernel /home/某某/linux/arch/x86/boot/bzImage \
--stages standard \
--device-definition /home/某某/virtfuzz/device-definitions/bluetooth.json
virtfuzz-fuzz --kernel /home/某某/linux/arch/x86/boot/bzImage --stages standard --device-definition /home/某某/virtfuzz/device-definitions/bluetooth.json
运行效果如图
声明一点哈,第一次跑全是0,而且跑出来之后终端会抽搐,打进去的命令都不见了,多运行几次(不杀进程的前提下,同一条命令,可以自信按上然后回车),就有点信息了,不过都是嗖的一下就过去了(至少我是这样,为啥跟我想象中的不一样啊,不是应该都仿一个AFL的界面吗
到这我也不知道是不是算成功了,emmm……再看看吧
官方的使用方法(跑不了一点,我崩了,来个神99
运行以下命令
报呗,跟谁没报过错似的
export KERNEL=你的那个跟virtfuzz同级的linux路径/arch/x86/boot/bzImage
export IMAGE=virtfuzz下的guestimages/buster.img的绝对路径(图有问题
或者直接把guestimages目录复制到virtfuzz/target/debug里
export QEMU=/opt/qemu/build/qemu-system-x86_64
用用tab补全,我纯手打的不一定对主要是记录找不到了
还得再摸索摸索