
RedMi K80pro miro OS 3.0.304.0용 디바이스 바인딩 CVE-2026-64560 적용
Redmi K80 Pro(miro)의 CVE-2026-64560 사용자 영역 로컬 권한 상승 이식 프로젝트.
🚀 이렇게 많은 문서를 보고 싶지 않으신가요?
깊이 파고들고 싶지 않거나, 이 잔뜩 쌓인 AI 생성
.md파일들을 읽고 싶지 않다면, 바로dyc.md를 보세요 —— 사람 말로 쓴 빠른 시작 가이드: 처음부터 탈옥까지(KernelSU 포함), 무슨 명령을 입력해야 하는지만 알려주고, 왜 그런지는 설명하지 않습니다.
업스트림 취약점 익스플로잇 및 Xiaomi 15(dada) 적응은
quyicheng03-boop에서 가져왔으며,
이 저장소는 그 기반 위에서 K80 Pro를 위해 주소와 상수를 다시 도출한 이식 결과물입니다.
이 프로젝트는 이식만 수행하며, 취약점 발견은 포함하지 않습니다. 취약점 원리와 익스플로잇 체인 설계는 전부 업스트림 작성자의 것입니다. 자세한 내용은
docs/UPSTREAM.md와NOTICE를 참조하세요.
이 저장소의 소스 코드와 바이너리는 아래 이 하나의 펌웨어 버전에만 유효합니다:
다른 OTA 버전으로 바꾸면 전부 무효화됩니다. 커널 내부의 구조체 오프셋, 심볼 주소, KASLR 구간은
전부 이 하나의 Image를 대상으로 도출된 것이며, 한 글자만 달라도 실행되지 않습니다.
지문이 일치하지 않으면 프로그램은 입구에서 종료됩니다:
TARGET_PROFILE_GATE_FAIL fingerprint=...
이것은 안전 실패이며, 커널을 건드리지 않습니다. 펌웨어가 위 표의 버전이 아니라면
docs/05-technical.md에 따라 직접 다시 이식하세요. 이 저장소의 상수를
그대로 적용하지 마세요.
docs/04-troubleshooting.md의
위험 분석 참조). 하지만 본인 소유가 아니거나 데이터가 백업되지 않은 기기에서는 실행하지 마세요.fastboot 채널이 없습니다.k80pro-miro-cve-2026-64560/
├── README.md 이 파일
├── dyc.md 빠른 시작(사람 말 버전), 초보자는 이걸 먼저 보세요
├── LICENSE 업스트림 라이선스
├── NOTICE 업스트림 귀속 선언
├── SHA256SUMS.txt release_build/ 내 세 산출물의 검증값
│
├── src/ 컴파일용 소스 코드
│ ├── exploit-fanout-miro.c
│ ├── exploit-rotate-miro.c
│ ├── temp-su.c
│ ├── miro-profile.h 상수 참고(컴파일에 참여하지 않음)
│ ├── miro-integration.c 통합 참고(컴파일에 참여하지 않음)
│ └── exploit-*.c 업스트림 원본 파일(생성기의 입력, 컴파일에 참여하지 않음)
│
├── release_build/ 사전 컴파일된 산출물(바로 사용 가능)
│ ├── cve-2026-64560-fanout
│ ├── cve-2026-64560-rotate
│ └── su
│
├── docs/
│ ├── 01-build.md 컴파일 방법
│ ├── 02-usage.md adb shell에서 사용하는 방법
│ ├── 03-tokens.md 출력 token 빠른 참조표
│ ├── 04-troubleshooting.md 문제 해결 및 위험 설명
│ ├── 05-technical.md 이식 기술 설명
│ └── UPSTREAM.md 업스트림 출처
│
└── tools/ 빌드 스크립트 및 재현/진단 도구(익스플로잇에 참여하지 않음)
├── build.sh 원클릭 컴파일(sh tools/build.sh)
└── *.py 재현 / 진단 스크립트
docs/02-usage.md를 참조하세요.
먼저 산출물이 완전한지 확인하세요:
sha256sum -c SHA256SUMS.txt # Linux / macOS
certutil -hashfile <파일> SHA256 # Windows, 개별 확인
docs/01-build.md를 참조하세요.
Android NDK가 필요합니다(시스템 gcc를 사용할 수 없는 이유는 해당 문서 참조). 가장 간편한 방법은
저장소에 포함된 스크립트를 사용하는 것이며, NDK를 스스로 찾고, 올바른 툴체인을 선택하고, 컴파일한 뒤
SHA256SUMS.txt와 해시를 하나씩 대조합니다:
sh tools/build.sh # 컴파일 + 검증
sh tools/build.sh --no-check # 컴파일만
스크립트는 컴파일만 하며, 기기를 건드리지 않고, 푸시하지 않고, exploit을 실행하지 않습니다.
스크립트를 사용하고 싶지 않다면, 세 개의 clang 명령을 직접 입력하여
cve-2026-64560-fanout, cve-2026-64560-rotate, su를 생성할 수도 있습니다.
컴파일 완료 후 release_build/ 내의 바이트와 일치하는지 비교하세요:
sha256sum build/* # SHA256SUMS.txt 내 세 값과 대조
성공의 유일한 판정 기준은 새로 adb shell을 열어 /data/local/tmp/su를 통해 uid=0을 얻는 것입니다:
$ printf 'id\nexit\n' | adb shell -T /data/local/tmp/su
uid=0(root) gid=0(root) groups=0(root),1004(input),... context=u:r:shell:s0
context=u:r:shell:s0에 주목하세요 —— root 신원이지만 shell 도메인을 유지하는 것은 설계상 그런 것이며,
오류가 아닙니다.
과정에서 보게 될 핵심 token(전체 표는 docs/03-tokens.md 참조):
BOOTID_WRITE_PASS attempt=5 q0=... q1=... slide=... kernel_base=...
STAGE0_GATE_PASS slide=... kernel_base=...
MISC_BRIDGE_OPEN_PASS fd=... observed=...
STAGE8_CRED_STAGE_PASS task=... cred=... uid=0 context=shell
ROOT_CHILD_HOLD_PASS child=... uid=0 context=shell selinux_permissive=1
성공률은 100%가 아닙니다. Stage0 단계 실측 약 1/5의 단일 적중률이므로, 프로그램은 기본적으로 각 단계를 32회 재시도합니다. 전체 체인은 확률적입니다.
실패는 다운으로 나타날 수 있습니다. 전원 버튼을 길게 눌러 강제 재부팅해야 합니다. 재부팅 후 커널 상태는 완전히 초기화되므로 다시 시도할 수 있습니다.
성공 후 재부팅까지 두 가지 상태가 남습니다:
/data/local/tmp/su가 모든 shell 신원에게 root를 개방하는 데몬 프로세스로 변경됨정리 방법은 docs/02-usage.md 끝부분을 참조하세요.
permissive는 잔여 버그가 아니라, 커널 모듈(KernelSU LKM 등)을 로드하기 위한 전제 조건입니다. 자세한 내용은
docs/04-troubleshooting.md를 참조하세요.
dada) 적응: 업스트림 저장소 작성자miro) 이식: CHANGELOG 참조| 항목 | 값 |
|---|
| 기종 | Redmi K80 Pro (ro.product.device = miro) |
| 지문 | Redmi/miro/miro:16/BP2A.250605.031.A3/OS3.0.304.0.WOMCNXM:user/release-keys |
| 커널 | 6.6.118-android15-8-gc44b714366cc-abogki519650608-4k |
| 커널 빌드 시간 | Thu Jun 4 03:48:35 UTC 2026 |
| 페이지 크기 | 4096(4K) |