Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2024-56426 — CVE-2024-56426 Exploit do Bootrom Exynos9830 - SM-G985F | Kitploit
Ferramentas/GitHubGitHub/xcracker000/cve-2024-56426
Segurança AndroidSegurança de Sistemas EmbarcadosExploraçãoEngenharia ReversaHacking de HardwareSegurança MóvelSegurança de HardwareDesenvolvimento de PayloadsAnálise de FirmwareExploração de Binários
GitHubxcracker000/cve-2024-56426
37há 25 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2024-56426

CVE-2024-56426 Exploit do Bootrom Exynos9830 - SM-G985F

Ver Repositório

Exploit da BootROM do SM-G985F / Exynos9830

[!CAUTION] O pacote de chaves atual e os arquivos gerados são capazes de fusing. Depois que um dispositivo é submetido ao fusing, a alteração do eFuse é irreversível e o dispositivo deve continuar a usar imagens de boot e material de chaves que correspondam à chave gravada. O uso desses arquivos ou fluxos é por sua conta e risco por causa do comportamento de fusing; todas as consequências permanecem sob responsabilidade do usuário que os executa. Verifique o arquivo eFuse, as chaves privadas, o FWBL1 assinado, as imagens LK / sboot.bin e o dispositivo de destino antes de executar qualquer fluxo de fusing.

Conteúdo

  • Estrutura do Repositório
  • Requisitos
  • Preparação das Imagens
  • Compilação do Payload
  • Geração da Imagem SBoot Assinada
  • Modos de Exploit
  • Cadeia de Boot do Exynos 9830
  • Layout da Imagem do Exynos 9830
  • Endereços de Carga
  • IDs de Fonte de Boot
  • Payload de Dump /mem
  • Atribuição Upstream
  • Créditos

Estrutura do Repositório

Requisitos

Toolchain Linux

root@kitploit:~
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu

Toolchain macOS

root@kitploit:~
brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu

Dependências Python

root@kitploit:~
python3 -m pip install -r requirements.txt

requirements.txt inclui coloredlogs, cryptography, hexdump, libusb, pyusb e pycryptodome.

Driver USB no Windows

No Windows, o dispositivo 04e8:1234 da BootROM deve usar um driver compatível com WinUSB/libusb antes que o PyUSB possa abri-lo. Consulte exploit/windows/README.md.

O repositório inclui um pacote de driver WinUSB em exploit/windows/Exynos_USB_Device.inf, com seu catálogo correspondente e o arquivo de importação de certificado no mesmo diretório.

Preparação das Imagens

Dividir sboot.bin

root@kitploit:~
python3 exploit/split.py bootLoaderFiles/originalSboot_K/sboot.bin -o exploit/extra/images

O script de divisão grava as partes da imagem e um arquivo split_manifest.json no diretório de saída.

Aplicar patch de chave personalizada no LK

A imagem do LK deve usar os IDs de comando da chave 2 de boot seguro da ROM para o fluxo de chave personalizada:

Ao aplicar o TSV de patch do LK dentro do projeto Ghidra, o auxiliar foi chamado por meio do Ghidra headless da seguinte forma:

root@kitploit:~
GHIDRA=/path/to/ghidra_12.0.4_PUBLIC
REPO=$(pwd)
"$GHIDRA/support/analyzeHeadless" "$REPO/exynos990reverseEng" exynos990 \
  -process lk.bin \
  -noanalysis \
  -scriptPath "$REPO/external/ghidra" \
  -postScript ApplyLkPatches.java "$REPO/external/ghidra/lk_985_selected_patches.tsv"

Insira a chave eFuse de 32 bytes em lk.bin no offset 0x205008, substituindo a chave original:

root@kitploit:~
dd if=external/keys/exynos9830_crecker/crecker.efuse of=exploit/extra/images/lk.bin bs=1 seek=$((0x205008)) count=32 conv=notrunc
xxd -g1 -s $((0x205008)) -l 32 exploit/extra/images/lk.bin

Mesclar Partes Divididas

root@kitploit:~
python3 exploit/merge.py exploit/extra/images Exynos9830

O script de mesclagem grava sboot.bin no diretório de trabalho atual.

Compilação do Payload

Compile os projetos de payload em external/payloads/ e copie os binários resultantes em exploit/extra/payloads/:

root@kitploit:~
./exploit/build_payloads.sh

O carregador UFS e o payload de chave personalizada incorporam um arquivo efuse de 32 bytes no momento da compilação. Por padrão, o Makefile lê external/keys/exynos9830_crecker/crecker.efuse; substitua isso por CUSTOM_KEY_EFUSE=/path/to/crecker.efuse quando necessário.

Geração da Imagem SBoot Assinada

A etapa de pré-verificação executada por exploit/exploit.py reassina o conjunto de imagens SBoot em exploit/extra/images/ no próprio local antes de cada execução assinada. Nenhuma saída assinada separada é mantida. A etapa de assinatura usa o pacote de chaves compartilhado intencionalmente rastreado em external/keys/exynos9830_crecker/.

Comando equivalente na raiz do repositório para o conjunto completo de imagens:

root@kitploit:~
python3 external/tools/sign_sboot_images.py \
  --images-dir exploit/extra/images \
  --keys-dir external/keys/exynos9830_crecker

Isto assina:

O assinador em lote passa o decimal 23 para cada imagem e não reutiliza um valor de rollback mais antigo já presente em um rodapé existente.

epbl.img é primeiro criptografado novamente quando necessário e depois assinado sobre os bytes finais. ldfw.img e tzsw.img ainda precisam do fluxo AVB externo se o conteúdo AVB deles precisar ser atualizado.

O comando apenas para FWBL1 é:

root@kitploit:~
python3 external/tools/sign_tool.py \
  -i exploit/extra/images/fwbl1.img \
  -o exploit/extra/images/fwbl1.img \
  -k external/keys/exynos9830_crecker/crecker_private.pem \
  -H external/keys/exynos9830_crecker/crecker.hmac \
  -s 0x3000 \
  -r 23 \
  -ma 0x9830 \
  -m 0x142 \
  -e 11 \
  -t external/keys/exynos9830_crecker/crecker_stage2_tee_pubkey.bin \
  -re external/keys/exynos9830_crecker/crecker_stage2_ree_pubkey.bin

Forma abreviada quando sign_tool.py, fwbl1.img e os arquivos crecker_* estão no diretório atual:

root@kitploit:~
python3 sign_tool.py -i fwbl1.img -o fwbl1.img -k crecker_private.pem -H crecker.hmac -s 0x3000 -r 23 -ma 0x9830 -m 0x142 -e 11 -t crecker_stage2_tee_pubkey.bin -re crecker_stage2_ree_pubkey.bin

Modos de Exploit

Execute os comandos a partir da raiz do repositório, salvo indicação em contrário.

Observações sobre o Fluxo no Dispositivo

Cadeia de Boot do Exynos 9830

O procedimento de boot observado do Exynos 9830 é:

Layout da Imagem do Exynos 9830

Endereços de Carga

IDs de Fonte de Boot

IDs Brutos de Fonte de Boot

Valores da Fonte de Boot

Payload de Dump /mem

Observação: o payload de dump mem.bin só pode ser usado quando nenhum sboot funcional está instalado.

  1. Envie uh.bin via Heimdall para o bootloader:

    root@kitploit:~
    heimdall flash --BOOTLOADER uh.bin
    
  2. Execute o fluxo de dump:

    root@kitploit:~
    python3 exploit/exploit.py --dump
    
  3. Revise o dump exynos990.bootrom.bin gerado.

Atribuição Upstream

Partes das ferramentas de recuperação em Python deste repositório foram adaptadas de halal-beef/hubble.

Esse projeto upstream é publicado sob a GNU GPL v2.0, e este repositório mantém uma licença GPL-2.0 por compatibilidade. Consulte LICENSE e NOTICE.md.

O payload de chave personalizada do Exynos990 em external/payloads/exynos990_boot_custom_key/ é baseado no esqueleto de payload de chave de boot personalizada e na ideia de fluxo de controle de VDavid003/exynos-usbdl, um fork de frederic/exynos-usbdl. Ele foi substancialmente reescrito e adaptado para a cadeia GET_CONFIGURATION do Exynos9830 / Exynos990 e não é uma cópia literal do payload upstream. Como o projeto upstream referenciado é licenciado sob a GNU GPL v3.0, este payload é mantido sob GPL-3.0-only; consulte external/payloads/exynos990_boot_custom_key/LICENSE.

Créditos

Baixar ferramenta
CaminhoFinalidade
bootLoaderFiles/Binários do bootloader, partes do bootloader divididas, imagens originais, imagens descriptografadas e artefatos de dump.
bootromNotes/Notas da ROM de boot, fluxogramas e offsets de contexto USB.
exploit/Ferramentas Python, executor de exploit, scripts de divisão/mesclagem, auxiliar de compilação de payload e dados do SoC.
exploit/extra/images/Imagens de bootloader funcionais consumidas pelos fluxos de exploit.
exploit/extra/payloads/Binários de payload compilados copiados de external/payloads/.
external/Fontes do payload, Makefile de compilação, notas decompiladas, material de chaves compartilhado e ferramentas auxiliares.
external/keys/exynos9830_crecker/Pacote de chave personalizada compartilhado do Exynos9830 / Exynos990 usado pelo fluxo de carregador assinado.
exynos990reverseEng/Arquivos do projeto de engenharia reversa do Exynos 990.
Comando da chave 1ValorComando da chave 2Valor
CMD_W_ROM_SEC_BOOT_KEY10x001CMD_W_ROM_SEC_BOOT_KEY20x016
CMD_W_USE_ROM_SEC_BOOT_KEY10x002CMD_W_USE_ROM_SEC_BOOT_KEY20x017
CMD_C_ROM_SEC_BOOT_KEY10x100CMD_C_ROM_SEC_BOOT_KEY20x114
CMD_R_USE_ROM_SEC_BOOT_KEY10x101CMD_R_USE_ROM_SEC_BOOT_KEY20x115
PayloadCaminho de saídaFinalidade
mem.binexploit/extra/payloads/mem.binPayload de dump de memória da ROM de boot.
loader.binexploit/extra/payloads/loader.binPayload do caminho UFS usado por --ufs.
Exynos990_boot_custom_key.binexploit/extra/payloads/Exynos990_boot_custom_key.binPayload de carregador assinado com chave personalizada usado por --signed.
ImagemMaterial de chave usadoRevisão de rollback
fwbl1.imgChave privada do BL1 + chaves públicas TEE/REE do Stage223
epbl.imgChave privada TEE do Stage223
bl2.imgChave privada REE do Stage223
lk.binChave privada REE do Stage223
el3_mon.imgChave privada TEE do Stage223
ldfw.imgChave privada TEE do Stage2, interna + externa23
tzsw.imgChave privada TEE do Stage2, interna + externa23
ComandoModoPayload padrãoObservações
python3 exploit/exploit.py --ufsCaminho UFSloader.binInicia o fluxo do payload UFS.
python3 exploit/exploit.py --signedCadeia de Boot AssinadaExynos990_boot_custom_key.binReassina o conjunto de imagens SBoot e envia as imagens.
python3 exploit/exploit.py --dumpDump da ROM de bootmem.binRecebe 0x20000 bytes em exynos990.bootrom.bin.
EtapaObservação
1Entre no modo de download.
2Crie ou atualize sboot.bin com exploit/merge.py quando necessário.
3Use o fluxo assinado de chave personalizada para alcançar o modo Crecker, um modo no estilo ODIN que aceita o fluxo de imagem de destino.
4Envie o novo sboot.bin por meio do ODIN, Heimdall ou outro remetente compatível.
5Execute o payload UFS.
6Opcional: instale o CreckerRom para fluxos de One UI 7 e Strong Integrity.
7Opcional: bloqueie o bootloader depois que a configuração de destino for concluída.
EtapaEstágioObservações
1BootROMExecução inicial da ROM.
2BL1Transferência completa da BootROM.
3EPBLTransferência completa do BL1.
4EPBLConfigura um manipulador SMC mínimo.
5BL2O EPBL carrega o BL2.
6BL2Transferência parcial para o BL2.
7LKO BL2 usa o EPBL para carregar o LK, mas o LK não é executado imediatamente.
8Monitor EL3O BL2 usa o EPBL para carregar o Monitor EL3.
9Monitor EL3O EPBL descriptografa o Monitor EL3.
10Monitor EL3Transferência completa para o Monitor EL3.
11Monitor EL3Inicializa e configura o manipulador SMC estendido.
12LKA execução salta para o LK.
13LK / Monitor EL3O LK chama o manipulador SMC do Monitor EL3 para carregar as partes TrustZone.
14ODIN / destino personalizadoO boot continua para o ODIN ou o destino configurado.
ParteInícioFim
fwbl1.img0x00x3000
epbl.img0x30000x16000
bl2.img0x160000x82000
lk.bin0xDB0000x35B000
el3_mon.img0x35B0000x39B000
EstágioEndereço de carga
BL10x02022000
EPBL0x02026000
BL20x15600000
LK0xE8000000
EL3_MONITOR0xBFE80000
ID da fonte _boot_deviceCaminho da fonte de boot
1Caminho UFS, fluxo de carga UFS compartilhado.
2Caminho de inicialização eMMC/SDMMC, fluxo mmc_card_detect_and_init.
3Dispositivo SDMMC/MMC 0, mmc_read_blocks(0, ...).
4Caminho de carga USB.
5Dispositivo SDMMC/MMC 1, mmc_read_blocks(1, ...).
6Modo alternativo UFS, mesmo fluxo UFS principal que 1 com um sinalizador de modo diferente.
7Caminho de leitura bruta do controlador que não é MMC/UFS/USB.
0xB / 11Caminho de fallback USB e depois o mesmo manipulador USB que 4.
ID da fonteValorSignificado
10x20UFS
20x14eMMC
30x00SDMMC_CH2
4 / 0xB0x40USB
CréditoContribuição
Chimera ToolPrimeira descoberta do exploit por volta de 2021-2022. A Chimera fornece capacidades avançadas de manutenção de Exynos em muitos dispositivos, incluindo capacidades baseadas neste exploit.
CVE-2024-56426A CVE na qual este projeto é baseado.
Christopher WadeRelatou a CVE-2024-56426 à Samsung.
kethily-danielForneceu acesso à ferramenta usada para rastreamento de pacotes USB e extração de amostras.
BotchedRPRAjudou na pesquisa inicial e na criação do carte2.
VDavid003Ajudou na engenharia reversa do PoC por meio de dumps de pacotes e testou pessoalmente em dispositivos.
halal-beef / hubbleForneceu os dumps iniciais de pacotes USB e a análise do PoC durante o ciclo de pesquisa, o código de backend usado pelo script de exploit e os layouts de SoC usados pelos scripts de divisão e mesclagem.
VDavid003 / exynos-usbdlForneceu o esqueleto do payload de chave personalizada GPLv3 e o fluxo de referência de download USB Exynos usado como base para o payload de chave personalizada do Exynos990.
R0rt1z2Ajudou com a criação do payload; parte do trabalho foi baseada no projeto dele, kaeru.
AntiEngineerCompartilhou conhecimento sobre ARM, dicas e suporte à pesquisa.
AAInspiração para a vulnerabilidade e primeiro uso fora da Chimera.