
CVE-2024-56426 취약점의 PoC입니다.
Exynos 990 Galaxy S20, S20 FE 및 Note20 제품군을 위한 통합 CVE-2024-56426 도구입니다. 이 익스플로잇은 10개 모델명을 모두 수용하며, 이를 검증된 6개 스톡 부트로더 제품군에 매핑합니다.
[!CAUTION] 추적된 키 번들 및 생성된 이미지는 퓨징(fusing)이 가능합니다. 퓨징은 되돌릴 수 없습니다. 특정 키에 퓨징된 휴대폰은 해당 키와 호환되는 이미지만 부팅할 수 있습니다. 잘못된 모델, 롤백 리비전, 패치 세트 또는 키 번들은 기기를 퓨징된 부팅 루프 상태로 만들 수 있습니다. 반복 작업 중에는 개발 키와 UFS 페이로드를 사용하십시오. 커스텀 키 퓨징을 명시적으로 의도하지 않는 한 모든 준비/서명 명령에
--no-fuse를 추가하십시오.
선택된 모델은 BL1 모델 ID와 정확한 모델 LK 패치 TSV를 모두 제어합니다. 런타임 아티팩트는 preflight에서
어떤 스톡 펌웨어 및 암호화된 분할 이미지를 사용할지 결정합니다. 페어링된 5G 런타임 아티팩트를 사용하는
4개의 비-5G 플래그는 LK의 모델 ID 검사 및 모델 ID 프로그래밍 경로도 패치합니다.
| 모델 플래그 | 런타임 아티팩트 | 런타임 펌웨어 | 모델 ID | EVT | 롤백 | 테스트됨 |
|---|---|---|---|---|---|---|
G780F | G780F | G780FXXSOFYJ1 | 0x154 | 11 | 24 | ❌ |
G980F | G981B | G981BXXSNHYB1 | 0x143 | 11 | 23 | ✅ |
G981B | G981B | G981BXXSNHYB1 | 0x13D | 11 | 23 | ❌ |
G985F | G986B | G986BXXSNHYB1 | 0x142 | 11 | 23 | ✅ |
G986B | G986B | G986BXXSNHYB1 | 0x13C | 11 | 23 | ✅ |
G988B | G988B | G988BXXSNHYB1 | 0x13E | 11 | 23 | ❌ |
N980F | N981B | N981BXXSIHYH3 | 0x153 | 11 |
지원되는 10개 Galaxy S20, S20 FE 및 Note20 모델 플래그 모두 선택적
CLI 전용 KVM 부팅 프로필을 갖습니다. 이름에 kvm이 포함된
Exynos 990 커널의
브랜치를 빌드하고, 정확한 모델 명령에 --kvm을 추가하십시오. 예를 들어:```bash
python3 exploit/exploit.py --build-sboot --model G985F --no-fuse --kvm
이 프로필은 LK H-Arx/UH 경로를 제거하고, EL3가 EL2에서 커널에 진입하도록 요청하며, 일치하는
복호화/재암호화된 EL3 모니터 패치 테이블을 적용합니다. 스톡/변조된 부트로더 플래시 모드에서는 계속 사용할 수 없습니다.
웹 제어 센터에는 의도적으로 KVM 제어 기능이 없습니다. 일치하는 커널과
[WindowsInQemu](https://github.com/Creeeeger/WindowsInQemu)를 사용하면 Windows를 KVM을 통해
전체 속도로 휴대폰의 QEMU에서 실행할 수 있습니다.
## 빠른 시작
모든 모드를 하나의 번호가 매겨진 설치 순서로 취급하지 마십시오. 목표를 선택하십시오:
| 목표 | 경로 |
|-----------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| 서명된 커스텀 ROM 설치 | 정확한 모델/설정 → EUB → 임시 `--signed --no-fuse` 체인 → ROM의 완전한 서명 출력 플래시 → UFS 첫 부팅 |
| 익스플로잇 테스트 | 선택 사항 `--prepare --no-fuse` → EUB → `--signed --no-fuse` → 중지 |
| 부트 체인 개발(CLI 전용) | 임시 no-fuse 테스트 → 빌드 → 생성된 SBoot/TZSW/LDFW 플래시 → UFS |
| 덤프 / 복구 | 별도의 워크플로우와 퓨즈 상태 확인 사용 |
`--prepare`는 필수 선행 단계가 아닌 권장 드라이런입니다. `--signed`는
사전 점검을 반복합니다. 생성된 3부분 Heimdall 명령은 부트 체인 개발 도구이며, 커스텀 ROM
플래시가 아닙니다.
기기에 손대기 전에 [USER_GUIDE.md](https://github.com/creeeeger/cve-2024-56426/blob/exynos990/USER_GUIDE.md)를 읽고 일치하는 워크플로우를 선택하십시오. 이 문서에는
전체 ROM 인계와 함께 퓨즈 미적용, 퓨즈 적용, 불확실한 상태의 복구 규칙이 포함되어 있습니다.
## 선택적 로컬 UI
브라우저 UI는 Python 표준 라이브러리만 사용하며 기존의
`exploit/exploit.py` CLI를 호출합니다. 부트 체인 개발과 생성된 3부분 Heimdall 명령은 터미널 전용
도구로 유지됩니다.
저장소 루트에서 시작하십시오:```bash
python3 exynos990_control_center.py
런처는 127.0.0.1에 바인딩되고, 새 액세스 토큰을 생성하며, 전체 로컬 URL을 출력한 다음 기본 브라우저에서 엽니다. 브라우저를 자동으로 열지 않아야 하는 경우 --no-browser를 사용하세요:```bash
python3 exynos990_control_center.py --no-browser
UI는 다음을 제공합니다:
- 빨간색/녹색 종속성 및 저장소-에셋 검사;
- 하나의 전역 대상-모델 선택과 정확히 두 개의 퓨즈 결정: Stay unfused 또는 Fuse;
- 선택된 워크플로의 단계만 번호와 함께 표시하는 워크플로 선택기;
- install-ROM, exploit-test, BootROM-dump 및 stock-recovery 워크플로;
- UH를 검증하고 Heimdall로 BOOTLOADER 슬롯에 플래시하여 EUB에 진입하는 정확한-모델 변조-로더 작업;
- 영구 퓨즈 경고 및 구성된 키/eFuse SHA-256 지문;
- Fuse를 선택한 후에는 사용할 수 없는 unfused 전용 stock 부트-체인 복원 카드;
- 실시간 프로세스 출력, 취소 및 단계별 검증 마커.
또한 CLI 전용 Exynos 990 KVM 공지를 표시하지만, 의도적으로 KVM 옵션을 노출하지 않으며 `--kvm`을 어떤 웹 작업에도
전달하지 않습니다.
USB 접근은 제어 센터를 실행한 프로세스의 권한을 따릅니다. 시작하기 전에 제공된 udev/driver
권한을 구성하십시오. UI는 권한 자격 증명을 요청, 보관 또는 전달하지 않습니다. 인쇄된
토큰 URL을 비공개로 유지하고 사용 후 즉시 서버를 중지하십시오.
터미널 사용자는 `exynos990_control_center.py`를 무시할 수 있습니다. 아래에 문서화된 모든 CLI 명령은 변경 없이 그대로 유지되며 완전히
지원됩니다.
## 요구 사항
Python 3.10 이상이 필요합니다.
Windows 10/11(네이티브 PowerShell):```powershell
.\windows\setup.ps1
. .\windows\activate.ps1
python .\exploit\exploit.py --prepare --model G985F --no-fuse
설정은 고정된 네이티브 AArch64 툴체인, LZ4, Heimdall, 그리고 저장소 가상 환경을 설치한 다음 모든 페이로드를 빌드합니다. BootROM WinUSB 드라이버는 상위 자체 서명 인증서가 시스템 신뢰 저장소를 변경하기 때문에 명시적인 관리자 옵트인입니다. 전체 설정, 드라이버 설치, Download Mode 구분, 검증 및 문제 해결 절차는 WINDOWS.md를 참조하세요.
Windows 활성화 후에는 나머지 크로스 플랫폼 예제에서 python3이 표시되는 곳에 python을 사용하세요.
Linux:```bash sudo apt-get update sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu lz4
macOS:```bash
brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu lz4
준비, 서명 및 페이로드 모드는 동일한 모델 인식 사전 점검을 실행합니다:
exploit/extra/images/<model>/를 손대지 않은 암호화 분할 이미지의 깨끗한 복사본으로 교체합니다.--no-fuse 사용 시, 먼저 다섯 개의 퓨즈 행을 비활성화한 유효 TSV 복사본을 생성합니다. --kvm 사용 시, kvm으로 표시된 LK 행도 활성화하고, 일치하는 EL3 모니터 TSV를 복호화 및 패치한 후 보호 영역을 다시 암호화합니다.mem.bin, loader.bin 및 Exynos990_boot_custom_key.bin을 빌드합니다.프로세스는 첫 번째 펌웨어, 패치, 메타데이터 또는 서명 불일치 시 중지됩니다. 변경 불가능한 소스 디렉터리를 제자리에서 패치하지 않습니다.
모든 명령에는 --model이 필요합니다.
--no-fuse는 독립 모드가 아닌 수정자입니다. 작업 LK를 재빌드하는 동안 다섯 개의 식별된 사용자 지정 키 OTP 행을 비활성화합니다. 준비, 전송 또는 퓨즈되지 않은 개발 체인 빌드를 수행하는 모든 명령에 사용하십시오. 기존 퓨즈를 되돌리지 않습니다.
CLI는 UFS 및 덤프 모드에서도 수정자를 허용합니다. 해당 명령도 사전 점검을 실행하지만 USB 작업은 재빌드된 LK를 전송하지 않기 때문입니다. 휴대폰에 이미 플래시된 LK가 UFS 퓨즈 동작을 결정합니다. 결과적으로 UI는 UFS 또는 BootROM 덤프 모드에 대해 의도적으로 no-fuse 제어를 제공하지 않습니다. 두 부트로더 플래시 모드는 LK 패칭이나 서명을 수행하지 않으므로 --no-fuse를 거부합니다.
--kvm도 수정자입니다. 사전 점검을 실행하는 모든 정확 모델 워크플로에서 허용됩니다. TSV의 KVM 행은 이 플래그가 없으면 무시되며, 브라우저 UI는 이를 제공하지 않습니다.
예시:```bash python3 exploit/exploit.py --signed --model N986B --no-fuse
부팅 로더를 USB를 열지 않고 해당 서명된 부팅 로더를 생성합니다:```bash
python3 exploit/exploit.py --build-sboot --model N986B --no-fuse
The command rebuilds the model image directory from clean stock inputs, applies the LK patch, signs and verifies every
component, merges sboot.bin, checks the embedded components and tail, and prints its size, SHA-256, and a Heimdall
command that sends sboot.bin, signed tzsw.img, and signed ldfw.img.
Only on a device known to be unfused, restore the exact stock boot chain from the selected model's original BL tar:```bash python3 exploit/exploit.py --flash-stock --model N986B --wait
이 명령은 `sboot.bin.lz4`, `tzsw.img.lz4`, `ldfw.img.lz4`만 추출하여 임시 디렉터리에서 압축을 풀고, 세 출력 파일이 모두 존재하고 비어 있지 않은지 확인한 후 Heimdall 플래시 작업 하나를 실행합니다. 임시 파일은 이후 제거됩니다. `--no-reboot` 및 `--verbose`도 지원됩니다. 휴대폰은 이미 Heimdall 호환 다운로드 모드에 있어야 하며, 선택한 모델이 실제 기기와 정확히 일치해야 합니다.
이 작업은 Android, AP, 모뎀, CSC, 사용자 데이터 또는 완전한 스톡 ROM을 복원하지 않습니다. 커스텀 키 퓨즈(custom-key-fused)된 기기에서는 절대 실행하지 마십시오. 이러한 휴대폰은 정확한 퓨즈 키로 재서명된 스톡 기반 소프트웨어가 필요하며, 커스텀 신뢰 루트는 영구적으로 유지됩니다. 퓨즈 상태가 알 수 없으면 중지하십시오.
## FRP / PERSISTENT 복구 참고 사항
> [!CAUTION]
> 이 절차는 본인이 소유하고 서비스할 권한이 있는 기기에만 해당합니다.
> 다른 사람의 기기에 사용하는 것은 엄격히 금지됩니다. 잘못된 파티션 경로는 영구적인 데이터 손실을 초래하거나
> 기기를 부팅할 수 없게 만들 수 있습니다. 쓰기 전에 대상 파티션을 백업하고 해석된
> 블록 디바이스 경로와 크기를 확인하십시오.
이 저장소는 공장 초기화 보호(FRP)를 자동으로 제거하지 않습니다. Android의
`PersistentDataBlockService`를 사용하는 기기에서는 FRP 상태가 일반적으로 `PERSISTENT`라는 이름의 파티션에 저장됩니다.
[AOSP 구현](https://android.googlesource.com/platform/frameworks/base/+/bc56632da95b/services/core/java/com/android/server/PersistentDataBlockService.java)을 참조하십시오.
익스플로잇 체인이 `adb` 및 `dd`를 제공하는 커스텀 복구를 부팅한 후, 파티션을 식별하고 백업하십시오. 추측한 숫자 블록 디바이스 경로를 대체하지 마십시오:```bash
adb shell ls -l /dev/block/by-name/PERSISTENT
adb shell dd if=/dev/block/by-name/PERSISTENT of=/tmp/PERSISTENT.backup.img bs=4096
adb pull /tmp/PERSISTENT.backup.img
백업이 완료된 후에만 파티션을 제로화하고 Android가 새로운 persistent-data-block 구조를 초기화하도록 하세요:```bash adb shell dd if=/dev/zero of=/dev/block/by-name/persistent reboot
이 방법은 테스트되었으며 작동합니다. FRP가 제거되었고 기기가 잠금 해제되었습니다.
## LK 패치
패치 선택은 아티팩트 매핑을 따릅니다:```text
G780F -> lk_g780f_selected_patches.tsv
G980F -> lk_g980f_selected_patches.tsv (applied to G981B LK)
G981B -> lk_g981b_selected_patches.tsv
G985F -> lk_g985f_selected_patches.tsv (applied to G986B LK)
G986B -> lk_g986b_selected_patches.tsv
G988B -> lk_g988b_selected_patches.tsv
N980F -> lk_n980f_selected_patches.tsv (applied to N981B LK)
N981B -> lk_n981b_selected_patches.tsv
N985F -> lk_n985f_selected_patches.tsv (applied to N986B LK)
N986B -> lk_n986b_selected_patches.tsv
LK를 변경하지 않고 TSV를 스톡 LK에 대해 검증하세요:```bash
python3 external/tools/apply_lk_patches.py
bootLoaderFiles/sbootSplitParts_original/G986B/lk.bin
external/ghidra/lk_g986b_selected_patches.tsv
--check
`external/ghidra/ApplyLkPatches.java`는 동일한 6열 TSV 형식을 허용하며, 이제 이전 바이트 불일치 시 패치를 무작정 적용하는 대신 오류를 발생시킵니다. 첫 번째 열이 `kvm`인 행에는 추가 `--kvm` 스크립트 인수가 필요합니다. 레거시 `check_signature` 및 `check_ext4_signature` 반환-0 행은 프로필 `0`을 사용합니다. 이는 이전 우회 위치를 문서화하지만 의도적으로 적용되지 않으므로, 빌드된 이미지는 LK의 실제 Samsung 서명 검사를 충족해야 합니다.
## 서명
`external/tools/sign_sboot_images.py`는 모델을 요구하며 [model_data.py](https://github.com/creeeeger/cve-2024-56426/blob/exynos990/external/tools/model_data.py)에서 모델 ID, EVT 및 롤백 리비전을 파생합니다:```bash
python3 external/tools/sign_sboot_images.py \
--images-dir exploit/extra/images/G986B \
--keys-dir external/keys/exynos9830_crecker \
--model G986B
Stage2 서명은 서명 후 검증됩니다. 이 도구는 ldfw.img 또는 tzsw.img에 대한 Samsung AVB 메타데이터를 재생성하지 않습니다. 해당 래퍼 내부의 보안 부팅 바이트를 변경하려면 여전히 대상 부팅 흐름에서 사용되는 별도의 AVB 정책이 필요합니다. 완전한 서명 ROM은 정확한 AVB 모델과 동일한 키 번들을 사용한 다음, 완전히 생성된 패키지로 플래시되어야 합니다. CreckerROM 저장소 및 USER_GUIDE.md의 설치 워크플로를 참조하세요.
포함된 변조 패키지는 sboot.bin.lz4를 제외한 모든 기본 BL 구성 요소를 보존합니다. 해당 구성 요소는 제거되고 패키지의 압축 해제된 uh.bin이 sboot.bin으로 저장되어 EUB 트리거 레이아웃과 일치합니다.
UI는 해당 Heimdall 흐름을 직접 수행할 수 있습니다. 정확한 물리적 모델의 변조 아카이브를 선택하고, sboot.bin이 압축 해제된 uh.bin.lz4와 바이트 단위로 동일한지 확인한 다음, 검증된 UH 페이로드를 BOOTLOADER 슬롯에 플래시합니다.```bash
python3 exploit/exploit.py --flash-tampered --model G986B --wait
이 의도적으로 정상 부팅을 방지하고 다음 부팅을 EUB로 강제합니다. BL tar의 나머지 구성 요소는 플래시하지 않습니다.
다음 명령으로 하나의 패키지를 다시 생성합니다:```bash
python3 external/tools/build_tampered_loader.py \
bootLoaderFiles/originalBl/G986B/BL_G986BXXSNHYB1.tar \
bootLoaderFiles/tamperedLoader/G986B/BL_G986BXXSNHYB1_tampered.tar
물리적 모델의 변조된 로더를 해당 디렉터리가 존재할 때 사용하십시오. 결합된 런타임 매핑은 익스플로잇 사전 점검 및 서명에 적용되며, 보관된 정품/변조 BL 패키지 선택에는 적용되지 않습니다.
기기를 퓨즈(fuse)한 경우, 정품 uh가 현재 잘못된 키로 서명되어 있으므로 서명된 uh.bin을 BOOTLOADER 슬롯에 플래시해야 한다는 점을 명심하십시오.
분할 및 병합:```bash python3 exploit/split.py sboot.bin -o /tmp/G986B-splits python3 exploit/merge.py /tmp/G986B-splits
독립 실행형 병합 도구는 parts 디렉터리에 `tzsw.img`와 `ldfw.img`가 필요하며, 해당하는 세 부분으로 나뉜
Heimdall 명령을 출력합니다. 이 명령은 두 이미지가 선택한 모델에 대해 이미 서명된 경우에만 사용하세요.
`--build-sboot`는 해당 서명을 자동으로 수행하고 검증합니다.
개별 LDFW 레코드 추출:```bash
python3 external/tools/extract_ldfw.py ldfw.img -o LDFWs
제공된 분할 레이아웃은 모든 표준 sboot.bin을 바이트 단위로 그대로 재구성합니다. EPBL 헤더를 변경하지 않으면 EPBL 및 EL3 모니터 복호화/재암호화도 모든 펌웨어 제품군에서 바이트 단위로 왕복됩니다.
지원되는 모든 휴대폰은 동일한 Exynos 990 BootROM을 공유합니다. 페이로드는 모델별 LK 오프셋이 아닌 공통 BootROM 진입점과 IRAM 주소를 사용합니다. 생성된 바이너리는 다음 진입점으로 연결됩니다:
모델별 동작은 LK TSV, FWBL1 모델 ID 및 표준 롤백 리비전으로 제한됩니다.
halal-beef), halal-beef/hubble을 통해:
exploit/exploit.py에서 사용하는 백엔드 코드; exploit/split.py 및
exploit/merge.py에서 사용하는 SoC 레이아웃; 주소/덮어쓰기 작업을 구현하는
run_exploit().VDavid003/exynos-usbdl을 통해:
Exynos990 사용자 지정 키 페이로드가 파생된 페이로드 스켈레톤.18 |
| ❌ |
N981B | N981B | N981BXXSIHYH3 | 0x14E | 11 | 18 | ❌ |
N985F | N986B | N986BXXSIHYH3 | 0x152 | 11 | 18 | ❌ |
N986B | N986B | N986BXXSIHYH3 | 0x14D | 11 | 18 | ❌ |
| 경로 | 용도 |
|---|
bootLoaderFiles/originalBl/<model>/ | 10개 모델 전체에 대한 원본 정확 모델 BL_<firmware>.tar 패키지. |
bootLoaderFiles/sbootSplitParts_original/<model>/ | 손대지 않은 정확 모델 암호화 SBoot 분할 파일, ldfw.img, tzsw.img, 매니페스트 및 테일. |
bootLoaderFiles/exynos9830Decrypted/<model>/ | 정확 모델 복호화 EPBL, EL3, TZSW 및 LDFW 분석 파일. |
bootLoaderFiles/tamperedLoader/<model>/ | 정확 모델 EUB 트리거 BL 패키지. |
bootLoaderFiles/MODEL_COMPARISON.md | 정확 모델 대 결합 펌웨어 비교 및 패치 호환성 메모. |
bootLoaderFiles/exynos990Bootrom/ | 공용 Exynos 990 BootROM 덤프. |
bootromNotes/ | 공용 BootROM 흐름 및 USB 컨텍스트 메모. |
drivers/windows/winusb/ | BootROM/EUB 04e8:1234용 고정 Houston WinUSB 패키지. |
windows/ | 네이티브 Windows 설정, 환경 활성화 및 해시 검사 드라이버 설치 프로그램. |
exploit/extra/images/<model>/ | 일회용 모델별 사전 점검 출력. |
external/ghidra/ | 정확 모델 LK 및 KVM EL3 TSV와 Ghidra 패치 스크립트. |
external/decompiled_G985F/ | G985F 전용 디컴파일 참조 파일. |
exynos990reverseEng_G985F/ | G985F 전용 Ghidra 프로젝트. |
external/keys/exynos9830_crecker/ | 공용 사용자 지정 키 번들. |
exploit/exploit.py | 안정적인 CLI 진입점 및 워크플로 조정자. |
exploit/build_payloads.py | Windows, Linux 및 macOS에서 사전 점검에 사용되는 크로스 플랫폼 네이티브 페이로드 빌더. |
exploit/preflight.py | 작업 이미지 준비, LK 패치, 서명 및 병합 검증. |
exploit/usb_transport.py | PyUSB 프레이밍, 장치 검색, 덮어쓰기 및 덤프 전송. |
exploit/tampered_loader.py | 정확 모델 UH 추출, 변조 로더 검증 및 Heimdall EUB 플래시. |
exploit/stock_restore.py | 정확 모델 스톡 아카이브 추출 및 Heimdall 명령 구성. |
control_center/ | 브라우저 백엔드 작업, 종속성 검사, 작업 및 HTTP API. |
external/tools/*_crypto.py | 공용 EPBL/EL3 AES 및 ECDSA 인코딩/서명 기본 요소. |
| 모드 | 용도 |
|---|
--prepare | USB를 열지 않고 사전 점검을 실행합니다. |
--build-sboot | 사전 점검을 실행하고 모델 이미지 디렉터리에 검증된 서명 sboot.bin을 빌드합니다. |
--signed | EUB에서 사용자 지정 키 페이로드와 서명된 부팅 체인을 전송합니다. |
--ufs | loader.bin으로 UFS 부팅 경로를 시작합니다. |
--dump | mem.bin을 실행하고 BootROM의 0x20000 바이트를 덤프합니다. |
--flash-tampered | 정확 모델 UH를 검증하고 BOOTLOADER에 플래시하여 EUB를 강제합니다. |
--flash-stock | 원본 BL tar에서 정확 모델 스톡 SBoot, TZSW 및 LDFW를 추출하고 플래시합니다. |
| 이미지 | 사용자 지정 서명 키 |
|---|
fwbl1.img | BL1 개인 키 + Stage2 TEE/REE 공개 blob |
epbl.img, el3_mon.img | Stage2 TEE |
bl2.img, lk.bin | Stage2 REE |
ldfw.img, tzsw.img | Stage2 TEE, 내부 및 외부 Stage2 푸터 |
| 페이로드 | 익스플로잇 점프 | 연결된 진입점 |
|---|
mem.bin | 0x02022010 | 0x02022010 |
loader.bin | 0x02022010 | 0x02022010 |
Exynos990_boot_custom_key.bin | 0x02022000 | 위치 독립적 스테이지 1 |
| 파트 | 시작 | 끝 |
|---|
fwbl1.img | 0x000000 | 0x003000 |
epbl.img | 0x003000 | 0x016000 |
bl2.img | 0x016000 | 0x082000 |
lk.bin | 0x0DB000 | 0x35B000 |
el3_mon.img | 0x35B000 | 0x39B000 |
| 스테이지 | 로드 주소 |
|---|
| BL1 | 0x02022000 |
| EPBL | 0x02026000 |
| BL2 | 0x15600000 |
| LK | 0xE8000000 |
| EL3 모니터 | 0xBFE80000 |