HackiOS가 Android 기기와 QEMU에서 전체 iOS 16.5 펌웨어를 실행합니다
HackiOS가 Android 및 QEMU에서 iOS 16.5를 부팅합니다
핵심 요약: HackiOS 프로젝트는 Apple의 오픈 소스 XNU 커널(버전 xnu-8796.121.2, iOS 16.5)을 Snapdragon 778G Android 휴대폰과 aarch64 QEMU에서 성공적으로 실행하여, 기기를 플래싱하지 않고도 완전히 작동하는 iOS 16.5 사용자 공간을 제공합니다.
프로젝트가 달성한 것
- 전체 iOS 16.5 스택: XNU 커널이 launchd → backboardd → SpringBoard → 앱을 실행하여 완전한 iOS 경험을 재현합니다.
- 저장소에 Apple 파일 없음: 모든 iOS 바이너리는 빌드 시 Apple의 CDN에서 가져옵니다 (
ios165/fetch.sh). - 두 가지 배포 모드:
- POCO X5 Pro 5G (redwood, Snapdragon 778G) –
fastboot boot로 부팅; 모든 것이 RAM에서 실행되며 재부팅하면 휴대폰이 Android로 돌아갑니다. - QEMU virt aarch64 – 휴대폰 없이 모든 Linux 호스트에서 실행됩니다.
- POCO X5 Pro 5G (redwood, Snapdragon 778G) –
- 연구용, ROM 아님: 세션은 시간 제한이 있습니다; 커널은 구성 가능한 시간 후에 로더로 제어권을 반환합니다.
기능 하이라이트
| 작동함 | 아직 작동하지 않음 |
|---|---|
| 잠금 화면, 스와이프하여 잠금 해제, 아이콘이 있는 홈 화면, iOS 16 배경화면 | 셀룰러, Bluetooth |
| 시스템 제스처 (홈, 앱 전환기, 뒤로), 제어 센터 | 사용자 정의 커널에서 충전 (휴대폰 방전됨) |
| 핵심 앱 (설정, Safari, 사진 등) 및 위젯 | 대부분의 앱에 대한 Metal 렌더링 (293/456 셰이더 작동) |
| 터치스크린 (Goodix GT9916), 멀티터치, 전원/볼륨 키 | App Store 콘텐츠, Apple ID 로그인 (Secure Enclave 없음) |
| 최대 8 CPU 코어, 잠금 화면까지 약 20초 | 비디오/Live Photo 캡처 |
| Mesa/freedreno를 통한 Adreno 642L GPU (CoreAnimation용 OpenGL ES) | – |
| Wi-Fi (WCN6750, ath11k) – 55–90 Mbit/s | – |
| 오디오, 마이크, 전면/후면 카메라 (HEIC 사진) | – |
영구 iOS 데이터 (var_store=1 ufs_write=1) |
– |
| Sileo + Procursus 패키지 관리자, SSH, 트윅 | – |
QEMU에서 빠른 시작 (커널 빌드 불필요)
# 의존성 설치 (Arch 예시)
sudo pacman -S --needed git python 7zip lz4 gcc qemu-system-aarch64 qemu-ui-gtk edk2-aarch64
# 저장소 클론 및 작업 공간 설정
git clone https://github.com/oosexgang/hackios-xnu-kernel.git hackios
cd hackios
common/setup.sh # hackios-xnu-userland를 가져오고 호스트 확인
ios165/fetch.sh # 약 7.4 GB IPSW 다운로드, 필요한 부분 추출
common/build.sh qemu-virt # APFS 이미지 빌드 (커널 사전 빌드 사용)
common/run.sh qemu-virt # 약 20분 QEMU 세션 시작
- 잠금 화면은 2–3분 후에 나타납니다.
- 마우스 왼쪽 버튼을 누르고 있으면 손가락을 시뮬레이션합니다;
H= 홈,L= 잠금, 화살표 키 = 볼륨,F11(길게 누름) = 다섯 손가락 제스처. - 스크립트 입력 예시:
qemu/touch.py swipe 0.5 0.985 0.5 0.3 250 qemu/touch.py tap 0.615 0.71 qemu/touch.py key home qemu/screendump.sh shot.png - 호스트의 UEFI 펌웨어 사용:
QEMU_EFI=/usr/share/AAVMF/AAVMF_CODE.fd QEMU_VARS=/usr/share/AAVMF/AAVMF_VARS.fd.
POCO X5 Pro 5G (redwood)에서 실행
- 부트로더를 잠금 해제하고
adb/fastboot를 설치합니다. - README에 설명된 대로 휴대폰에서 공급업체 펌웨어 (GPU, Wi-Fi, 오디오, 햅틱)를 가져와 작업 공간 옆에
fw-*디렉토리를 배치합니다. - 부팅 이미지를 빌드하고 실행합니다:
common/build.sh redwood GL=1 # out/redwood-boot.img 생성 common/run.sh redwood 900 # 15분 세션 - 또는 세밀한 제어를 위해
xl헬퍼를 사용합니다:
로더는 전적으로 RAM에서 실행됩니다; 휴대폰 저장소에 영구적인 변경은 없습니다../xl enter # 사용자 정의 UEFI 로더를 fastboot boot ./xl ramdisk # 2.5 GB iOS 시스템 이미지를 RAM에 업로드 XL_SECS=900 XL_CMDLINE="touchscreen=1 cpufreq=1 bootcpu=7 cpus=8 gpu=1 wifi=1 adsp=1" ./xl run ./xl screenshot shot.png ./xl reboot # Android로 돌아감
사전 빌드된 부팅 이미지
각 릴리스에는 사용자 정의 로더가 포함된 즉시 부팅 가능한 UEFI 이미지인 hackios-redwood-boot.img가 포함되어 있습니다. 여기에는 Apple 바이너리가 포함되어 있지 않습니다; ios165/fetch.sh로 로컬에서 iOS 시스템 이미지를 생성해야 합니다.
소스에서 커널 및 로더 빌드
- 커널: theos (
~/theos),cctools,iPhoneOS16.5.sdk, clang, lld, python, perl 필요.xnu/README.md를 따르고xnu-build.sh를 실행합니다. - 로더:
xnuloader/build.sh로 빌드 (일반 clang + lld-link, EDK2 없음). - UEFI: Project Silicium에서 포팅; 사전 빌드된 바이너리는
prebuilt/uefi에 있습니다. - 이미지:
REST=1 userland/build.sh가 APFS 컨테이너와 rootfs를 생성합니다. - 재빌드 후
tools/update-prebuilt.sh를 실행하여prebuilt/디렉토리를 새로 고칩니다.
다른 Android 기기로 포팅
- 기기 프로필 생성:
common/new-device.sh <codename> path/to/device.dtb. - 결과
common/devices/<codename>.conf를 편집하여 UEFI 플랫폼, 로더 매개변수 및 드라이버 교체를 설명합니다. docs/PORTING.md의 자세한 단계를 따릅니다 (UEFI 포트, 커널 드라이버 패치, 펌웨어 추출).
HackiOS가 내부적으로 작동하는 방식
fastboot boot → UEFI (Mu-Silicium) → xnuloader (EFI 앱)
│ 상주하며 USB 링크, 워치독, 커널 로그 제공
▼
XNU (BCM2837 구성 기반, redwood/QEMU용 패치)
├─ GICv3, 타이머, 비디오 콘솔, 로더 복귀 경로
├─ RAM의 APFS 이미지, /private/var 및 /tmp용 ramfs
├─ Mini-crypto, AMFI 및 Sandbox 스텁 (MAC 정책)
├─ 드라이버 교체: IOSurface, IOMobileFramebuffer, AppleKeyStore, 네트워크 스택
├─ 입력: /dev/redwood-touch (Goodix GT9916) 또는 virtio-input
├─ GPU: Mesa/freedreno를 통한 Adreno 642L, Wi-Fi: ath11k (LinuxKPI), 사운드: ADSP/virtio-sound
▼
launchd → logd, notifyd, cfprefsd, runningboardd, backboardd, SpringBoard, 앱
└─ DYLD_INSERT_LIBRARIES로 주입된 라이브러리가 가상 HID 서비스 및 ObjC 메서드 스왑 제공
iOS 바이너리는 수정되지 않습니다; 누락된 기능은 커널 드라이버 셤 또는 주입된 사용자 공간 라이브러리로 제공됩니다.
디버깅 및 개발 워크플로우
- 세션 로그: QEMU stdout 또는 휴대폰의
logs/HHMMSS-run.log. - 자동 앱 실행:
RC_JOBS=rc.jobs.tour REST=1 userland/build.sh는 첫 페이지의 모든 앱을 여는 이미지를 빌드합니다. - 충돌 진단:
userabort:(프로세스가abort()호출) 또는usertrap:(systrace=1포함)을 찾습니다. - 실시간 스택 추적 (QEMU):
qemu/touch.py stacks NAME다음에qemu/symstack.py LOG NAME(ipsw도구 필요). - 신뢰성 확인: 알려진 오탐은
docs/checks.md를 참조하십시오.
커뮤니티 반응 (Hacker News 댓글)
"웹사이트가 보기에 꽤 메스꺼워서 GitHub 링크를 사용하기로 했습니다. 하지만 QEMU, POCO X5 Pro 5G 및 일부 Xiaomi 기기에서 작동한다는 것이 꽤 인상적입니다." – aghuang
"어떤 Android 휴대폰에서도 실행할 수 있는 GSI를 만들 수 있나요?" – Velocifyer
"누군가 드디어 해냈군요, 와! 2026년은 점점 더 미쳐가고 있습니다." – pmkary
"왜 이 데모들이 모두 iOS 16에서 멈추나요? iOS 17에서 무엇이 바뀌었나요?" – bigwheels
"훌륭한 작업입니다. macOS용 옛 Hackintosh와 비슷하네요. 이것으로 App Store에 접근할 수 있나요? Android에는 작동에 필요한 고유 식별자가 없을 것 같습니다." – dj_io
댓글은 흥분, 더 넓은 기기 지원에 대한 호기심, App Store 접근 및 향후 iOS 버전에 대한 질문을 강조합니다.
라이선스
- 저장소 자체는 XNU의 파생 작업을 포함하므로 Apple Public Source License 2.0 (APSL 2.0) 하에 있습니다.
- 타사 구성 요소는 원래 라이선스를 유지합니다 (ath11k는 BSD-3-Clause-Clear, FreeBSD LinuxKPI는 BSD-2-Clause, libzbitmap 및 libdeflate는 MIT, AOSP UEFI 헬퍼는 Apache-2.0).
- iOS 바이너리는 배포되지 않습니다;
ios165/fetch.sh는 Apple CDN에서 직접 다운로드합니다.
더 많은 정보를 찾을 수 있는 곳
- 소스 코드: https://github.com/oosexgang/hackios-xnu-kernel
- 사용자 공간 저장소: https://github.com/oosexgang/hackios-xnu-userland
- 문서:
docs/폴더에는 스크린샷, 포팅 가이드 및 자세한 확인 사항이 포함되어 있습니다. - 커뮤니티 채널: Telegram 그룹 https://t.me/oosexgangdevs
결론
HackiOS는 폐쇄형 드라이버를 오픈 소스 등가물로 교체하고 사용자 정의 UEFI 로더를 통해 부팅하여 iOS 16.5 커널과 사용자 공간을 Apple 하드웨어가 아닌 곳에서 실행할 수 있음을 보여줍니다. 여전히 연구 프로토타입이지만—셀룰러, Bluetooth, 전체 Metal 지원 및 App Store 기능이 부족—iOS 실험, 교차 플랫폼 테스트 및 보안 연구의 새로운 지평을 엽니다.