Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
spd_dump-macos — Flasher UNISOC BootROM/FDL para macOS: spd_dump parcheado con CVE-2022-38694 exec_addr2, referencia del protocolo, reglas de partición, verificación de copia de seguridad (UMS9621) | Kitploit
Herramientas/GitHubGitHub/xun404/spd_dump-macos
Seguridad AndroidSeguridad de Sistemas EmbebidosExplotaciónHacking de HardwareSeguridad MóvilAnálisis de Firmware
GitHubxun404/spd_dump-macos

spd_dump-macos

Flasher UNISOC BootROM/FDL para macOS: spd_dump parcheado con CVE-2022-38694 exec_addr2, referencia del protocolo, reglas de partición, verificación de copia de seguridad (UMS9621)

Ver Repositorio
49hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

spd_dump for macOS

English | 简体中文

Puerto para macOS de la herramienta de flasheo BootROM/FDL de UNISOC (Spreadtrum). Basado en ilyakurdyukov/spreadtrum_flash (MIT), implementa el exec_addr2 (bypass de verificación de firma CVE-2022-38694) que falta en el spd_dump de código cerrado y completa toda la cadena en macOS (arm64 + libusb):

BootROM → escritura fuera de límites (CVE) → FDL1 → FDL2 → análisis de GPT → lectura/escritura de particiones → reset

Plataforma de verificación: UMS9621 (T158), Android 13, kernel 5.15, arquitectura GKI (init_boot). Las direcciones de la familia UMS9620 son compatibles; para otros SoC, ver Adaptación.

Compilación

Dependencias: Xcode CLT, brew install libusb.

./scripts/build-macos.sh   # genera ./spd_dump

Uso

Entrar en modo de descarga

Con el dispositivo apagado y sin alimentación, mantenga pulsado Reset (o la combinación de teclas correspondiente al modelo) y conecte el USB; el dispositivo se enumera como 1782:4d00. El BootROM solo responde durante unos 20 segundos tras la enumeración y luego queda en silencio (el USB sigue presente); la automatización debe activarse por el flanco "ausente → presente" del dispositivo (ver scripts/runner.sh).

Cargar FDL2 y leer la tabla de particiones

./spd_dump --wait 3 exec_addr2 0x65017f08 verbose 1 \
    fdl fdl1-dl.bin 0x65000800 \
    fdl fdl2-dl.bin 0xbefffe00 \
    disable_transcode partition_list gpt.xml
ParámetroDescripción
exec_addr2 <addr>Bypass del CVE; carga automáticamente custom_exec_no_verify_<addr>.bin; implementación
fdl <file> <addr>Imagen FDL y dirección de carga SRAM correspondiente al SoC
disable_transcodeDebe enviarse una vez al inicio de cada proceso nuevo (el estado persiste entre procesos)

Copia de seguridad

python3 scripts/backup_gen.py gpt.xml backup/ --img-dir data/
./spd_dump --wait 3 verbose 0 disable_transcode $(cat backup_args.txt)

backup_gen.py genera la secuencia de read_part según el GPT (con reanudación; la unidad de size del GPT es MB) y establece AVB flags=3 sin conexión para vbmeta* (equivalente a verity 0).

Flasheo

python3 scripts/flash_gen.py gpt.xml data/ flash_ops.txt
N=$(grep -c 'write_part\|erase_part' flash_ops.txt)
{ yes yes | head -n $N; sleep 3600; } | ./spd_dump --wait 3 verbose 0 \
    disable_transcode $(cat flash_ops.txt | tr '\n' ' ')

flash_gen.py incorpora reglas de partición integradas (runtimenv convertido en borrado, fixnv/calinv omitidos, alias sin ranura deduplicados por mtime) y añade erase_part userdata + reset al final.

Puntos clave del protocolo

Ver docs/protocol-notes.md para más detalles:

  • Los comandos personalizados deben consumirse en el bucle de análisis de opciones; verbose 1 termina ese bucle antes de tiempo
  • La sesión FDL2 sobrevive entre procesos: salir del proceso no termina FDL2, por lo que los comandos de partición pueden ejecutarse por lotes
  • 0x8A (DOWN_SIZE_ERROR) se usa también para: descarga independiente de direcciones protegidas, escritura de runtimenv y bloques de lectura demasiado grandes
  • El tamaño máximo del bloque de lectura es inferior a 0xffff; por defecto 4096
  • Leer la familia de particiones NV (nr_fixnv1) por direccionamiento por nombre cuelga la sesión; ver las reglas en docs/partition-rules.md

Verificación de la copia de seguridad

Elemento de verificaciónValor
TamañoComparado uno a uno con el GPT (precisión de bytes)
boot / init_bootANDROID! @0
vendor_bootVNDRBOOT @0
Familia vbmetaAVB0 @0, flags @0x78
splloader/trustos/uboot/fdlDHTB @0
supergDla @4096 y @8192 (doble copia geométrica), los primeros 4K se conservan en cero
NVNV (0x4E56) @0 o @0x200

Las particiones estáticas (dtb, etc.) se contrastan por md5 con imágenes conocidas del mismo modelo, lo que permite verificar la corrección de la cadena de lectura.

Adaptación a otros SoC

ElementoFuente
Direcciones de carga de fdl1/fdl2XML del firmware PAC del modelo (desempaquetado con SPD Research Tool)
Blob del CVE y dirección de pilaTomKing062/CVE-2022-38694 soc/<chip>/
Imágenes fdlExtraídas del firmware oficial del modelo (cabecera con firma DHTB)

Referencias

  • ilyakurdyukov/spreadtrum_flash — upstream (MIT), src/ contiene el código fuente con los parches
  • TomKing062/CVE-2022-38694_unlock_bootloader — principio del CVE y materiales para cada SoC
  • YC-nw/SPRDClientCore — referencia de constantes de protocolo y reglas de partición
  • NCC Group — UNISOC ROM Vulnerabilities

Preautorización de Magisk su en dispositivos sin pantalla: docs/headless-magisk-su.md.

Las operaciones a nivel de BootROM conllevan riesgo de brick; haga una copia de seguridad primero. Úselo bajo su propio riesgo (AS IS).

Descargar herramienta