巨无语,弄了两天

首先根据afl-dyninst的更新时间,选择到最近的一个commit - 332198e9abd581de1070f1010932067bcd2ed60b

https://github.com/dyninst/dyninst/tree/332198e9abd581de1070f1010932067bcd2ed60b

下载包,安装

1
sudo apt-get install libiberty-dev libboost-all-dev libtbb-dev libdwarf-dev

还需要下载elfutils-0.173版本,默认编译和安装目录即可,主要是apt里面的版本太老了。

解压dyninst,到文件夹下

1
2
3
4
5
mkdir build && cd build
cmake .. -DBOOST_LIBRARYDIR=/usr/lib/x86_64-linux-gnu -DCMAKE_INSTALL_PREFIX=../target -DLIBELF_LIBRARIES=/usr/local/lib/libelf.so -DLIBELF_INCLUDE_DIR=/usr/local/include
# 看电脑而定 j是线程数
make -j20
make install

这之后dyninst会被安装到target目录下,也可通过修改CMAKE_INSTALL_PREFIX参数来调整。

最后就是编译afl-dyninst了,找到afl-dyninst的git仓库,clone下来。

需要手动修改MakefileDYNINST_ROOT选择我们编译的target文件夹,AFL_ROOT选择一个afl的目录即可,安装目录我们放到target文件夹里。

image-20221208015706633

1
2
make
make install

但是此时,去运行target/bin中的afl-dyninst会报错

1
2
❯ ./afl-dyninst --help
./afl-dyninst: error while loading shared libraries: libdyninstAPI.so.9.3: cannot open shared object file: No such file or directory

使用时需要设定下库的路径

1
2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path to dyninst>/target/lib
export DYNINSTAPI_RT_LIB=<path to dyninst>/target/lib/libdyninstAPI_RT.so

最后成功。

image-20221208015934760


也可以安装在系统中

https://fansonfan.github.io/2018/10/07/AFL漫谈/

1
2
3
4
sudo cp afl-dyninst /usr/bin/
sudo cp libAflDyninst.so /usr/local/lib/
echo "/usr/local/lib" > /etc/ld.so.conf.d/dyninst.conf && ldconfig
echo "export DYNINSTAPI_RT_LIB=/usr/local/lib/libdyninstAPI_RT.so" >> ~/.bashrc