
AFL + DynamoRIO = اختبار التشويش للثنائيات بدون كود مصدري على لينكس
يدعم AFL الأصلي التوجيه بالتغطية للصناديق السوداء باستخدام وضع QEMU. أوصي بشدة بتجربته أولاً، وإذا لم يعمل، يمكنك تجربة هذه الأداة. بالإضافة إلى ذلك، قد ترغب في تجربة Manul الذي يدعم توجيه الصناديق السوداء على ويندوز ولينكس.
تحتاج إلى تحديد DRRUN_PATH للإشارة إلى مشغل drrun وLIBCOV_PATH للإشارة إلى مكتبة التغطية libbinafl.so. تحتاج أيضًا إلى إيقاف تشغيل خادم fork الخاص بـ AFL (AFL_NO_FORKSRV=1) وربما AFL_SKIP_BIN_CHECK=1. راجع الخطوة 5 في قسم البناء أدناه لمزيد من التفاصيل.
ملاحظة: لا تنسَ أنه يجب عليك استخدام DynamoRIO 64 بت للثنائيات 64 بت وDynamoRIO 32 بت للثنائيات 32 بت، وإلا فلن يعمل. للتأكد من أن هدفك يعمل تحت DynamoRIO، يمكنك تشغيله باستخدام الأمر التالي:
drrun -- <path/to/your/app/> <app_args>
مكتبة الأدوات هي نسخة معدلة من مكتبة التغطية الخاصة بـ winAFL التي أنشأها Ivan Fratric.
git clone https://github.com/mxmssh/drAFL.git /home/max/drAFL
cd /home/max/drAFL
git clone https://github.com/DynamoRIO/dynamorio
mkdir build_dr
cd build_dr/
cmake ../dynamorio/
make -j
cd ..
إذا واجهت أي مشاكل في ترجمة DynamoRIO، تحقق من هذه الصفحة
mkdir build
cd build
cmake ../bin_cov/ -DDynamoRIO_DIR=../build_dr/cmake
make -j
cd ..
cd afl/
make
cd ..
cd build
mkdir in
mkdir out
echo "AAAA" > in/seed
export DRRUN_PATH=/home/max/drAFL/build_dr/bin64/drrun
export LIBCOV_PATH=/home/max/drAFL/build/libbinafl.so
export AFL_NO_FORKSRV=1
export AFL_SKIP_BIN_CHECK=1
../afl/afl-fuzz -m none -i in -o out -- ./afl_test @@
في حالة afl_test، يجب أن تتوقع 25-30 عملية تنفيذ في الثانية وتعطل فريد واحد في 2-3 دقائق.