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).
  • 두 가지 배포 모드:
    1. POCO X5 Pro 5G (redwood, Snapdragon 778G) – fastboot boot로 부팅; 모든 것이 RAM에서 실행되며 재부팅하면 휴대폰이 Android로 돌아갑니다.
    2. QEMU virt aarch64 – 휴대폰 없이 모든 Linux 호스트에서 실행됩니다.
  • 연구용, 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)에서 실행

  1. 부트로더를 잠금 해제하고 adb/fastboot를 설치합니다.
  2. README에 설명된 대로 휴대폰에서 공급업체 펌웨어 (GPU, Wi-Fi, 오디오, 햅틱)를 가져와 작업 공간 옆에 fw-* 디렉토리를 배치합니다.
  3. 부팅 이미지를 빌드하고 실행합니다:
    common/build.sh redwood GL=1          # out/redwood-boot.img 생성
    common/run.sh redwood 900             # 15분 세션
    
  4. 또는 세밀한 제어를 위해 xl 헬퍼를 사용합니다:
    ./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로 돌아감
    
    로더는 전적으로 RAM에서 실행됩니다; 휴대폰 저장소에 영구적인 변경은 없습니다.

사전 빌드된 부팅 이미지

각 릴리스에는 사용자 정의 로더가 포함된 즉시 부팅 가능한 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 기기로 포팅

  1. 기기 프로필 생성: common/new-device.sh <codename> path/to/device.dtb.
  2. 결과 common/devices/<codename>.conf를 편집하여 UEFI 플랫폼, 로더 매개변수 및 드라이버 교체를 설명합니다.
  3. 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에서 직접 다운로드합니다.

더 많은 정보를 찾을 수 있는 곳


결론

HackiOS는 폐쇄형 드라이버를 오픈 소스 등가물로 교체하고 사용자 정의 UEFI 로더를 통해 부팅하여 iOS 16.5 커널과 사용자 공간을 Apple 하드웨어가 아닌 곳에서 실행할 수 있음을 보여줍니다. 여전히 연구 프로토타입이지만—셀룰러, Bluetooth, 전체 Metal 지원 및 App Store 기능이 부족—iOS 실험, 교차 플랫폼 테스트 및 보안 연구의 새로운 지평을 엽니다.

Sources