Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2024-56426 — Эксплойт-кит для bootROM Exynos 9830, который обеспечивает обход подписанной загрузки, инъекцию пользовательских ключей и дамп памяти на устройствах Samsung SM-G985F. | Kitploit
Инструменты/GitHubGitHub/xcracker000/cve-2024-56426
Безопасность AndroidБезопасность встроенных системЭксплуатацияОбратная инженерияАппаратный ХакингМобильная безопасностьАппаратная БезопасностьРазработка Полезной НагрузкиАнализ ПрошивокЭксплуатация Бинарных Файлов
GitHubxcracker000/cve-2024-56426
16 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2024-56426

Эксплойт-кит для bootROM Exynos 9830, который обеспечивает обход подписанной загрузки, инъекцию пользовательских ключей и дамп памяти на устройствах Samsung SM-G985F.

Репозиторий

SM-G985F / Exynos9830 Эксплойт Bootrom

[!CAUTION] Текущий набор ключей и сгенерированные файлы поддерживают операцию fusing. После того как устройство прошло fusing, изменение eFuse необратимо, и устройство должно продолжать использовать загрузочные образы и ключевой материал, соответствующие запрограммированному ключу. Использование этих файлов или процедур осуществляется на ваш собственный риск из-за особенностей fusing; все последствия остаются на ответственности пользователя, выполняющего их. Проверьте файл eFuse, закрытые ключи, подписанный FWBL1, образы LK / sboot.bin и целевое устройство перед запуском любой процедуры fusing.

Содержание

  • Структура репозитория
  • Требования
  • Подготовка образов
  • Сборка полезной нагрузки
  • Генерация подписанного образа SBoot
  • Режимы эксплойта
  • Цепочка загрузки Exynos 9830
  • Структура образа Exynos 9830
  • Адреса загрузки
  • Идентификаторы источника загрузки
  • Полезная нагрузка дампа /mem
  • Атрибуция первоисточников
  • Благодарности

Структура репозитория

Требования

Тулчейн Linux

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

Тулчейн macOS

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

Зависимости Python

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

Файл requirements.txt включает coloredlogs, cryptography, hexdump, libusb, pyusb и pycryptodome.

USB-драйвер Windows

В Windows USB-устройство BootROM 04e8:1234 должно использовать драйвер, совместимый с WinUSB/libusb, прежде чем PyUSB сможет открыть его. См. exploit/windows/README.md.

Репозиторий включает пакет драйвера WinUSB в exploit/windows/Exynos_USB_Device.inf вместе с соответствующим каталогом и файлом импорта сертификата в том же каталоге.

Подготовка образов

Разделение sboot.bin

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

Скрипт разделения записывает части образа и файл split_manifest.json в выходной каталог.

Патч кастомного ключа LK

Образ LK должен использовать идентификаторы команд ROM secure boot key 2 для процедуры кастомного ключа:

При применении TSV-патча LK внутри проекта Ghidra вспомогательная функция вызывалась через Ghidra headless следующим образом:

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"

Встройте 32-байтовый ключ eFuse в lk.bin по смещению 0x205008, заменив штатный ключ:

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

Объединение разделённых частей

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

Скрипт объединения записывает sboot.bin в текущий рабочий каталог.

Сборка полезной нагрузки

Соберите проекты полезной нагрузки в external/payloads/ и скопируйте полученные бинарные файлы в exploit/extra/payloads/:

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

UFS-загрузчик и полезная нагрузка с кастомным ключом встраивают 32-байтовый файл efuse во время сборки. По умолчанию Makefile читает external/keys/exynos9830_crecker/crecker.efuse; при необходимости переопределите это значение с помощью CUSTOM_KEY_EFUSE=/path/to/crecker.efuse.

Генерация подписанного образа SBoot

Предварительный этап, выполняемый exploit/exploit.py, повторно подписывает набор образов SBoot в exploit/extra/images/ на месте перед каждым подписанным запуском. Отдельный подписанный выходной файл не сохраняется. Этап подписи использует общий набор ключей в external/keys/exynos9830_crecker/, который намеренно хранится в репозитории.

Эквивалентная команда из корня репозитория для полного набора образов:

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

При этом подписываются:

Пакетный подписант передаёт десятичное значение 23 для каждого образа и не использует повторно более старое значение отката, уже присутствующее в существующем футере.

epbl.img при необходимости сначала повторно шифруется, а затем подписывается по финальным байтам. Для ldfw.img и tzsw.img по-прежнему требуется внешняя процедура AVB, если их содержимое AVB должно быть обновлено.

Команда только для 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

Краткая форма, когда sign_tool.py, fwbl1.img и файлы crecker_* находятся в текущем каталоге:

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

Режимы эксплойта

Выполняйте команды из корня репозитория, если не указано иное.

Заметки о процедуре на устройстве

Цепочка загрузки Exynos 9830

Наблюдаемая процедура загрузки Exynos 9830:

Структура образа Exynos 9830

Адреса загрузки

Идентификаторы источника загрузки

Сырые идентификаторы источника загрузки

Значения источника загрузки

Полезная нагрузка дампа /mem

Примечание: полезную нагрузку дампа mem.bin можно использовать только в том случае, если рабочий sboot не установлен.

  1. Отправьте uh.bin в загрузчик через Heimdall:

    root@kitploit:~
    heimdall flash --BOOTLOADER uh.bin
    
  2. Запустите процедуру дампа:

    root@kitploit:~
    python3 exploit/exploit.py --dump
    
  3. Просмотрите сгенерированный дамп exynos990.bootrom.bin.

Атрибуция первоисточников

Части инструментов восстановления на Python в этом репозитории были адаптированы из halal-beef/hubble.

Этот первоисточник опубликован под лицензией GNU GPL v2.0, и данный репозиторий сохраняет лицензию GPL-2.0 для совместимости. См. LICENSE и NOTICE.md.

Полезная нагрузка с кастомным ключом Exynos990 в external/payloads/exynos990_boot_custom_key/ основана на скелете полезной нагрузки boot-custom-key и идее управления потоком из VDavid003/exynos-usbdl, форка frederic/exynos-usbdl. Она была существенно переписана и адаптирована для цепочки GET_CONFIGURATION Exynos9830 / Exynos990 и не является дословной копией исходной полезной нагрузки. Поскольку упомянутый первоисточник лицензирован под GNU GPL v3.0, эта полезная нагрузка распространяется только под GPL-3.0; см. external/payloads/exynos990_boot_custom_key/LICENSE.

Благодарности

Скачать инструмент
ПутьНазначение
bootLoaderFiles/Бинарные файлы загрузчика, разделённые части загрузчика, исходные образы, расшифрованные образы и артефакты дампа.
bootromNotes/Заметки о Boot ROM, блок-схемы и смещения USB-контекста.
exploit/Инструменты на Python, исполнитель эксплойта, скрипты разделения/объединения, помощник сборки полезной нагрузки и данные SoC.
exploit/extra/images/Рабочие образы загрузчика, используемые процедурами эксплойта.
exploit/extra/payloads/Собранные бинарные файлы полезной нагрузки, скопированные из external/payloads/.
external/Исходные коды полезной нагрузки, Makefile для сборки, заметки по декомпиляции, общий ключевой материал и вспомогательные инструменты.
external/keys/exynos9830_crecker/Общий набор кастомных ключей Exynos9830 / Exynos990, используемый процедурой подписанного загрузчика.
exynos990reverseEng/Файлы проекта по обратной разработке Exynos 990.
Команда Key 1ЗначениеКоманда Key 2Значение
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
Полезная нагрузкаПуть выводаНазначение
mem.binexploit/extra/payloads/mem.binПолезная нагрузка для дампа памяти Boot ROM.
loader.binexploit/extra/payloads/loader.binПолезная нагрузка для пути UFS, используемая --ufs.
Exynos990_boot_custom_key.binexploit/extra/payloads/Exynos990_boot_custom_key.binПолезная нагрузка подписанного загрузчика с кастомным ключом, используемая --signed.
ОбразИспользуемый ключевой материалВерсия отката
fwbl1.imgЗакрытый ключ BL1 + открытые ключи Stage2 TEE/REE23
epbl.imgЗакрытый ключ Stage2 TEE23
bl2.imgЗакрытый ключ Stage2 REE23
lk.binЗакрытый ключ Stage2 REE23
el3_mon.imgЗакрытый ключ Stage2 TEE23
ldfw.imgЗакрытый ключ Stage2 TEE, внутренний + внешний23
tzsw.imgЗакрытый ключ Stage2 TEE, внутренний + внешний23
КомандаРежимПолезная нагрузка по умолчаниюПримечания
python3 exploit/exploit.py --ufsПуть UFSloader.binЗапускает процедуру с полезной нагрузкой UFS.
python3 exploit/exploit.py --signedПодписанная цепочка загрузкиExynos990_boot_custom_key.binПовторно подписывает набор образов SBoot и отправляет образы.
python3 exploit/exploit.py --dumpДамп Boot ROMmem.binПринимает 0x20000 байт в exynos990.bootrom.bin.
ШагПримечание
1Войдите в режим загрузки (download mode).
2При необходимости создайте или обновите sboot.bin с помощью exploit/merge.py.
3Используйте подписанную процедуру кастомного ключа, чтобы попасть в режим Crecker — режим в стиле ODIN, принимающий процедуру целевого образа.
4Отправьте новый sboot.bin через ODIN, Heimdall или другой совместимый отправитель.
5Запустите полезную нагрузку UFS.
6Необязательно: установите CreckerRom для рабочих процессов One UI 7 и Strong Integrity.
7Необязательно: заблокируйте загрузчик после завершения настройки целевого устройства.
ШагСтадияПримечания
1BootROMНачальное выполнение ROM.
2BL1Полная передача управления от BootROM.
3EPBLПолная передача управления от BL1.
4EPBLНастраивает минимальный обработчик SMC.
5BL2EPBL загружает BL2.
6BL2Частичная передача управления BL2.
7LKBL2 использует EPBL для загрузки LK, но LK не выполняется сразу.
8EL3 MonitorBL2 использует EPBL для загрузки EL3 Monitor.
9EL3 MonitorEPBL расшифровывает EL3 Monitor.
10EL3 MonitorПолная передача управления EL3 Monitor.
11EL3 MonitorИнициализирует и настраивает расширенный обработчик SMC.
12LKВыполнение переходит к LK.
13LK / EL3 MonitorLK вызывает обработчик SMC EL3 Monitor для загрузки частей TrustZone.
14ODIN / пользовательская цельЗагрузка продолжается до ODIN или настроенной цели.
ЧастьНачалоКонец
fwbl1.img0x00x3000
epbl.img0x30000x16000
bl2.img0x160000x82000
lk.bin0xDB0000x35B000
el3_mon.img0x35B0000x39B000
СтадияАдрес загрузки
BL10x02022000
EPBL0x02026000
BL20x15600000
LK0xE8000000
EL3_MONITOR0xBFE80000
Идентификатор источника _boot_deviceПуть источника загрузки
1Путь UFS, общая процедура загрузки UFS.
2Путь инициализации eMMC/SDMMC, процедура mmc_card_detect_and_init.
3Устройство SDMMC/MMC 0, mmc_read_blocks(0, ...).
4Путь загрузки USB.
5Устройство SDMMC/MMC 1, mmc_read_blocks(1, ...).
6Альтернативный режим UFS, та же базовая процедура UFS, что и 1, но с другим флагом режима.
7Путь чтения через сырой контроллер, отличный от MMC/UFS/USB.
0xB / 11Резервный путь USB, затем тот же обработчик USB, что и 4.
Идентификатор источникаЗначениеСмысл
10x20UFS
20x14eMMC
30x00SDMMC_CH2
4 / 0xB0x40USB
АвторВклад
Chimera ToolПервое обнаружение эксплойта примерно в 2021–2022 годах. Chimera предоставляет расширенные возможности обслуживания Exynos на многих устройствах, включая возможности, основанные на этом эксплойте.
CVE-2024-56426CVE, на котором основан этот проект.
Christopher WadeСообщил о CVE-2024-56426 в Samsung.
kethily-danielПредоставил доступ к инструменту, использовавшемуся для трассировки USB-пакетов и извлечения образцов.
BotchedRPRПомог с первоначальными исследованиями и созданием carte2.
VDavid003Помог с обратной разработкой PoC по дампам пакетов и лично тестировал на устройствах.
halal-beef / hubbleПредоставил первоначальные дампы USB-пакетов и анализ PoC в ходе исследовательского цикла, внутренний код, используемый скриптом эксплойта, и компоновки SoC, используемые скриптами разделения и объединения.
VDavid003 / exynos-usbdlПредоставил скелет полезной нагрузки с кастомным ключом под лицензией GPLv3 и эталонную процедуру загрузки Exynos через USB, использовавшиеся как основа для полезной нагрузки с кастомным ключом Exynos990.
R0rt1z2Помог с созданием полезной нагрузки; часть работы была основана на его проекте kaeru.
AntiEngineerДелился знаниями об ARM, подсказками и оказывал исследовательскую поддержку.
AAВдохновение для уязвимости и первое использование за пределами Chimera.