Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-56426 — CVE-2024-56426 Exynos9830 Bootrom 익스플로잇 - SM-G985F | Kitploit
도구/GitHubGitHub/xcracker000/cve-2024-56426
Android SecurityEmbedded Systems SecurityExploitationReverse EngineeringHardware HackingMobile SecurityHardware SecurityPayload DevelopmentFirmware AnalysisBinary Exploitation
GitHubxcracker000/cve-2024-56426
3725일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-56426

CVE-2024-56426 Exynos9830 Bootrom 익스플로잇 - SM-G985F

저장소 보기

SM-G985F / Exynos9830 Bootrom 익스플로잇

[!CAUTION] 현재 키 번들 및 생성된 파일은 퓨징(fusing)이 가능합니다. 일단 디바이스가 퓨징되면 eFuse 변경은 되돌릴 수 없으며, 디바이스는 퓨징된 키와 일치하는 부트 이미지 및 키 자료를 계속 사용해야 합니다. 퓨징 동작으로 인해 이러한 파일이나 플로우를 사용하는 것은 사용자 자신의 책임입니다; 모든 결과에 대한 책임은 이를 실행하는 사용자에게 있습니다. 퓨징 플로우를 실행하기 전에 eFuse 파일, 개인 키, 서명된 FWBL1, LK / sboot.bin 이미지 및 대상 디바이스를 확인하십시오.

목차

  • 저장소 구조
  • 요구 사항
  • 이미지 준비
  • 페이로드 빌드
  • 서명된 SBoot 이미지 생성
  • 익스플로잇 모드
  • Exynos 9830 부트 체인
  • Exynos 9830 이미지 레이아웃
  • 로드 주소
  • 부트 소스 ID
  • /mem 페이로드 덤프
  • 업스트림 저작자 표시
  • 크레딧

저장소 구조

경로용도
bootLoaderFiles/부트로더 바이너리, 분할된 부트로더 파트, 원본 이미지, 복호화된 이미지 및 덤프 산출물.
bootromNotes/부트 ROM 메모, 플로우차트 및 USB 컨텍스트 오프셋.
exploit/Python 도구, 익스플로잇 러너, 분할/병합 스크립트, 페이로드 빌드 헬퍼 및 SoC 데이터.
exploit/extra/images/익스플로잇 플로우에서 사용하는 동작용 부트로더 이미지.
exploit/extra/payloads/external/payloads/에서 복사된 빌드된 페이로드 바이너리.
external/페이로드 소스, 빌드 Makefile, 디컴파일 노트, 공유 키 자료 및 헬퍼 도구.
external/keys/exynos9830_crecker/서명된 로더 플로우에서 사용하는 공유 Exynos9830 / Exynos990 커스텀 키 번들.
exynos990reverseEng/Exynos 990 리버스 엔지니어링 프로젝트 파일.

요구 사항

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이 포함됩니다.

Windows USB 드라이버

Windows에서 BootROM USB 디바이스 04e8:1234는 PyUSB가 열기 전에 WinUSB/libusb 호환 드라이버를 사용해야 합니다. exploit/windows/README.md를 참조하십시오.

저장소에는 exploit/windows/Exynos_USB_Device.inf에 WinUSB 드라이버 패키지가 포함되어 있으며, 동일한 디렉터리에 해당 카탈로그 및 인증서 가져오기 파일도 함께 있습니다.

이미지 준비

sboot.bin 분할

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

분할 스크립트는 이미지 파트와 split_manifest.json 파일을 출력 디렉터리에 기록합니다.

LK 커스텀 키 패치

LK 이미지는 커스텀 키 플로우를 위해 ROM 시큐어 부트 키 2 명령 ID를 사용해야 합니다:

Ghidra 프로젝트 내에서 LK 패치 TSV를 적용할 때 헬퍼는 다음과 같이 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 키를 기본 키 대신 오프셋 0x205008의 lk.bin에 임베드합니다:

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가 실행하는 사전 점검 단계는 각 서명 실행 전에 exploit/extra/images/의 SBoot 이미지 세트를 제자리에서 다시 서명합니다. 별도의 서명된 출력은 유지되지 않습니다. 서명 단계는 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 이미지 레이아웃

로드 주소

부트 소스 ID

원시 부트 소스 ID

부트 소스 값

/mem 페이로드 덤프

참고: mem.bin 덤프 페이로드는 동작하는 sboot가 설치되지 않은 경우에만 사용할 수 있습니다.

  1. Heimdall을 통해 uh.bin을 부트로더로 전송합니다:

    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를 참조하십시오.

external/payloads/exynos990_boot_custom_key/ 아래의 Exynos990 커스텀 키 페이로드는 frederic/exynos-usbdl의 포크인 VDavid003/exynos-usbdl의 부트 커스텀 키 페이로드 스켈레톤 및 제어 흐름 아이디어를 기반으로 합니다. 이는 Exynos9830 / Exynos990 GET_CONFIGURATION 체인에 맞게 상당히 재작성 및 적용되었으며, 업스트림 페이로드의 축어적 복사본이 아닙니다. 참조된 업스트림 프로젝트가 GNU GPL v3.0으로 라이선스되었기 때문에 이 페이로드는 GPL-3.0-only로 유지됩니다; external/payloads/exynos990_boot_custom_key/LICENSE를 참조하십시오.

크레딧

도구 다운로드
키 1 명령값키 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부트 ROM 메모리 덤프 페이로드.
loader.binexploit/extra/payloads/loader.bin--ufs에서 사용하는 UFS 경로 페이로드.
Exynos990_boot_custom_key.binexploit/extra/payloads/Exynos990_boot_custom_key.bin--signed에서 사용하는 커스텀 키 서명 로더 페이로드.
이미지사용된 키 자료롤백 리비전
fwbl1.imgBL1 개인 키 + Stage2 TEE/REE 공개 키23
epbl.imgStage2 TEE 개인 키23
bl2.imgStage2 REE 개인 키23
lk.binStage2 REE 개인 키23
el3_mon.imgStage2 TEE 개인 키23
ldfw.imgStage2 TEE 개인 키, 내부 + 외부23
tzsw.imgStage2 TEE 개인 키, 내부 + 외부23
명령모드기본 페이로드비고
python3 exploit/exploit.py --ufsUFS 경로loader.binUFS 페이로드 플로우를 시작합니다.
python3 exploit/exploit.py --signed서명된 부트 체인Exynos990_boot_custom_key.binSBoot 이미지 세트를 다시 서명하고 이미지를 전송합니다.
python3 exploit/exploit.py --dump부트 ROM 덤프mem.bin0x20000바이트를 exynos990.bootrom.bin으로 수신합니다.
단계참고 사항
1다운로드 모드에 진입합니다.
2필요 시 exploit/merge.py로 sboot.bin을 생성하거나 업데이트합니다.
3서명된 커스텀 키 플로우를 사용하여 대상 이미지 플로우를 수용하는 ODIN 스타일 모드인 Crecker 모드에 도달합니다.
4ODIN, Heimdall 또는 기타 호환 전송 도구를 통해 새 sboot.bin을 전송합니다.
5UFS 페이로드를 실행합니다.
6선택 사항: One UI 7 및 Strong Integrity 워크플로우를 위해 CreckerRom을 설치합니다.
7선택 사항: 대상 설정이 완료된 후 부트로더를 잠급니다.
단계스테이지참고 사항
1BootROM초기 ROM 실행.
2BL1BootROM으로부터의 전체 핸드오프.
3EPBLBL1으로부터의 전체 핸드오프.
4EPBL최소 SMC 핸들러를 설정합니다.
5BL2EPBL이 BL2를 로드합니다.
6BL2BL2로의 부분 핸드오프.
7LKBL2는 EPBL을 사용하여 LK를 로드하지만 LK는 즉시 실행되지 않습니다.
8EL3 MonitorBL2는 EPBL을 사용하여 EL3 Monitor를 로드합니다.
9EL3 MonitorEPBL이 EL3 Monitor를 복호화합니다.
10EL3 MonitorEL3 Monitor로의 전체 핸드오프.
11EL3 Monitor확장 SMC 핸들러를 초기화하고 설정합니다.
12LK실행이 LK로 점프합니다.
13LK / EL3 MonitorLK는 TrustZone 파트를 로드하기 위해 EL3 Monitor SMC 핸들러를 호출합니다.
14ODIN / 커스텀 대상부트가 ODIN 또는 구성된 대상으로 계속 진행됩니다.
파트시작끝
fwbl1.img0x00x3000
epbl.img0x30000x16000
bl2.img0x160000x82000
lk.bin0xDB0000x35B000
el3_mon.img0x35B0000x39B000
스테이지로드 주소
BL10x02022000
EPBL0x02026000
BL20x15600000
LK0xE8000000
EL3_MONITOR0xBFE80000
_boot_device 소스 ID부트 소스 경로
1UFS 경로, 공유 UFS 로드 플로우.
2eMMC/SDMMC 초기화 경로, mmc_card_detect_and_init 플로우.
3SDMMC/MMC 디바이스 0, mmc_read_blocks(0, ...).
4USB 로드 경로.
5SDMMC/MMC 디바이스 1, mmc_read_blocks(1, ...).
6UFS 대체 모드, 다른 모드 플래그를 가진 1과 동일한 핵심 UFS 플로우.
7MMC/UFS/USB가 아닌 원시 컨트롤러 읽기 경로.
0xB / 11USB 폴백 경로, 이후 4와 동일한 USB 핸들러.
소스 ID값의미
10x20UFS
20x14eMMC
30x00SDMMC_CH2
4 / 0xB0x40USB
크레딧기여
Chimera Tool약 2021-2022년경 이 익스플로잇을 최초로 발견. Chimera는 이 익스플로잇에 기반한 기능을 포함하여 많은 디바이스에서 고급 Exynos 서비스 기능을 제공합니다.
CVE-2024-56426이 프로젝트의 기반이 되는 CVE.
Christopher WadeCVE-2024-56426을 Samsung에 신고.
kethily-danielUSB 패킷 추적 및 샘플 추출에 사용된 도구에 대한 접근 권한 제공.
BotchedRPR초기 연구 및 carte2 제작에 도움.
VDavid003패킷 덤프를 통한 PoC 리버스 엔지니어링에 도움을 주고 디바이스에서 직접 테스트.
halal-beef / hubble연구 수명 주기 동안 PoC의 초기 USB 패킷 덤프 및 분석, 익스플로잇 스크립트가 사용하는 백엔드 코드, 분할 및 병합 스크립트가 사용하는 SoC 레이아웃 제공.
VDavid003 / exynos-usbdlExynos990 커스텀 키 페이로드의 기반으로 사용된 GPLv3 커스텀 키 페이로드 스켈레톤 및 Exynos USB 다운로드 참조 플로우 제공.
R0rt1z2페이로드 제작에 도움; 일부 작업은 그의 프로젝트인 kaeru를 기반으로 함.
AntiEngineerARM 지식, 힌트 및 연구 지원 공유.
AA취약점 영감 및 Chimera 외부에서의 첫 사용.