使用AFL++ Frida模式对Android二进制文件进行模糊测试

使用AFL++ Frida模式对Android二进制文件进行模糊测试

你可能会觉得这是我之前关于《在Android C/C++应用中创建和使用JVM实例》文章的合适序言...没错!这算是我通过展示最终目标来吸引你的方式。毕竟,我们常常会浏览各种文章却不清楚它们的具体目标。

如果你对模糊测试感兴趣或正考虑探索这个领域,本文将作为配置AFL++并使用它来测试Android二进制文件的逐步指南。我会尽量简洁,避免那些关于"如何搭建Android渗透测试环境"的无聊段落。如果你不知道什么是模糊测试或AFL,网上有成千上万的入门文章可供参考。

我在运行Sonoma 14.4.1系统的MacBook Pro M1上按照以下步骤设置了AFL++(Frida模式),但相信你在自己的系统上不会遇到太多问题。

设置AFL++

  1. 从以下地址下载最新版本:https://github.com/AFLplusplus/AFLplusplus/releases/ 并解压文件。

  2. 使用brew安装Android-ndk:

$ brew install --cask android-ndk
$ export ANDROID_NDK_HOME="/opt/homebrew/share/android-ndk"

将ANDROID_NDK_HOME设置为永久环境变量,这样就不必每次启动shell会话时重新定义。根据你的操作系统和shell,可以将export ANDROID_NDK_HOME='/opt/homebrew/share/android-ndk'添加到shell配置文件(如使用zsh则是~/.zshrc)。

  1. 下载以下CMAKE文件并保存到AFL解压目录(第一步):
    https://github.com/Ch0pin/android-fuzzing/blob/main/AFLplusplus/CMakeLists.txt

如果遇到问题,可能需要修改这部分:

execute_process(
  COMMAND
  bash -c "echo 'unsigned char api_js[] = {' > ${API_C}; \
  xxd -p -c 12 ${API_JS} | sed -e \"s/\\([0-9a-f]\\{2\\}\\)/0x\\1, /g\" \
                         | sed -e \"s/^/  /\" >> ${API_C}; \
  echo '};' >> ${API_C}; \
  echo \"unsigned int api_js_len = $(stat --printf='%s' ${API_JS});\" \
     >> ${API_C}"
)

修改为:

execute_process(
  COMMAND
  bash -c "echo 'unsigned char api_js[] = {' > ${API_C}; \
  xxd -p -c 12 ${API_JS} | sed -e \"s/\\([0-9a-f]\\{2\\}\\)/0x\\1, /g\" \
                         | sed -e \"s/^/  /\" >> ${API_C}; \
  echo '};' >> ${API_C}; \
  echo \"unsigned int api_js_len = $(stat ${API_JS} | cut -d ' ' -f 8);\" \
     >> ${API_C}"
)
  1. 将以下脚本保存到AFL下载目录并运行,以编译afl-fuzz和afl-frida-trace.so:
mkdir build && cd build
cmake -DANDROID_PLATFORM=31 \
      -DCMAKE_TOOLCHAIN_FILE=/opt/android-ndk-r25c/build/cmake/android.toolchain.cmake \
      -DANDROID_ABI=arm64-v8a ..
make

如果使用Brew安装,可能需要将DCMAKE_TOOLCHAIN_FILE值改为ndk的位置,通常在/opt/homebrew/Cascroom/android-ndk下。

如果一切顺利

你可以在./build路径下找到afl-fuzz和afl-frida-trace.so。使用adb将这些二进制文件推送到/data/local/tmp:

$ adb push afl* /data/local/tmp

给afl-fuzz赋予执行权限。如果你按照我的指南操作,可能已经知道要测试什么。假设要测试的二进制文件名为'fuzz',可以这样开始:

./afl-fuzz -O -G 256 -i in -o out ./fuzz

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

posted @ 2025-07-04 16:01  qife  阅读(18)  评论(0)    收藏  举报