1 điểm bởi GN⁺ 2025-11-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • Một dự án giải thích chi tiết quy trình kỹ thuật để chạy iOS 6 trên iPod touch thế hệ 3, thiết bị không còn được hỗ trợ chính thức
  • Chạy phiên bản mới hơn trên phần cứng cũ bằng cách chỉnh sửa và tái cấu trúc các thành phần cốt lõi của iOS như DeviceTree, iBoot, Kernelcache, Restore RamdiskRoot Filesystem
  • Dùng script Python để tự động so sánh và áp dụng khác biệt DeviceTree giữa iPhone 3GS và iPod touch 3, đồng thời dùng bản vá iBoot để vượt qua kiểm tra chữ ký mã
  • Việc tái tạo Kernelcache sử dụng công cụ kcgen của macOS để tích hợp kernel và kext cho armv7, loại bỏ symbol không cần thiết và xử lý nén
  • Có ý nghĩa kỹ thuật cao ở chỗ mở rộng tiềm năng của phần cứng cũ, đồng thời chia sẻ kỹ thuật phân tích cấu trúc nội bộ của iOS và tạo firmware tùy biến

Tổng quan các thành phần của iOS

  • iOS gồm iBoot, Kernelcache, DeviceTree, hệ thống tệp không gian người dùng, firmware cho bộ xử lý phụ và các thành phần khác
    • iBoot là bootloader, tồn tại dưới bốn dạng: iBSS, iBEC, LLB và iBoot
    • Kernelcache là tệp gộp kernel và các phần mở rộng kernel (kext) thành một binary duy nhất
    • DeviceTree định nghĩa cấu hình phần cứng và các tham số hoạt động của phần mềm, và được iBoot chỉnh sửa trong lúc chạy
    • Hệ thống tệp được chia thành restore ramdisk dùng cho cài đặt và root filesystem dùng cho lưu trữ lâu dài

Thử nghiệm trên iPhone 3GS

  • iPhone 3GS và iPod touch 3 dùng SoC tương tự là S5L8920X / S5L8922X
  • Vì iPhone 3GS được hỗ trợ chính thức iOS 6, tác giả đã thử khởi động iOS 6.0 cùng với iBoot và DeviceTree của iOS 5.1.1
  • Vấn đề chính là DeviceTree không khớp, vì iOS 6 cần các node và thuộc tính mới được thêm vào như nvram-proxy-data

Chỉnh sửa DeviceTree

  • Tác giả viết một script Python để tính toán và áp dụng khác biệt giữa hai DeviceTree
    • Script được công khai trong kho SundanceInH2A
  • Thuộc tính nvram-proxy-data phải chứa bản dump NVRAM; nếu để trống, kernel sẽ dừng ở giai đoạn đầu
  • Khi áp dụng cho iPod touch 3, trước tiên cần loại bỏ các mục chỉ dành cho iPhone rồi mới áp dụng diff

Vá iBoot

  • Về cơ bản thực hiện bỏ qua kiểm tra chữ ký Image3, chèn boot-argsvá debug-enabled
  • Cần điền nvram-proxy-data một cách động; nếu dùng giá trị tĩnh thì có nguy cơ ghi đè NVRAM thực tế
  • Thay thế lời gọi UpdateDeviceTree() để chèn nvram-proxy-datarandom-seed
  • Thêm tham số amfi=0xff để vô hiệu hóa ký mã
  • Với các tổ hợp iBoot + kernel khác, cần kiểm tra khác biệt DeviceTree và cấu trúc boot_args

Tạo Kernelcache

  • Kernel iOS 6 và các kext cho iPod touch 3 có tồn tại trong các bản build nội bộ, nhưng để nạp chúng cùng lúc thì cần tạo prelinked kernelcache
  • Dùng công cụ kcgen của macOS để tạo kernelcache cho armv7
    • Các tùy chọn chính: -arch armv7, -all-personalities, -strip-symbols, -uncompressed
    • Sau khi loại bỏ symbol không cần thiết, chuyển sang một slice duy nhất bằng lipo -thin armv7
  • Kernelcache được tạo ra sẽ được nén rồi đóng gói vào container Image3
  • Danh sách kext được lập bằng cách so sánh iOS 5.1.1 và 6.0 của iPhone 3GS; cần sửa Info.plist của kext Wi‑Fi

Chỉnh sửa Restore Ramdisk

  • asr và đổi options.n88.plist thành options.n18.plist để điều chỉnh bố cục phân vùng
  • Để cài exploit iBoot, tác giả đã triển khai lại binary rc.boot
    • Remount ramdisk và thiết lập umask
    • Gọi restored_external -server để khôi phục mà không cho khởi động lại
    • Sau khi khôi phục xong, tạo phân vùng thứ ba, ghi exploit, đặt boot-partition thành 2 rồi khởi động lại

Chỉnh sửa Root Filesystem

  • Thêm /System/Library/CoreServices/SpringBoard.app/N18AP.plist và phản ánh các tính năng của iOS 6
  • Hợp nhất cấu hình màn hình chính của iOS 5.1.1 và iPod touch 4
  • Thêm firmware Multitouch, Wi‑FiBluetooth
    • Với Bluetooth, phần hardcode trong /usr/sbin/BlueTool được override bằng /etc/bluetool
  • Có thể kích hoạt trên iPod touch 3 bằng cách xóa khóa LimitLoadToHardware của daemon FairPlay
  • Từ iOS 6.1 trở lên, cần vá thêm do bộ nhớ đệm chữ ký của LaunchDaemon
  • Sửa bản đồ Product ID: thay 0x2714 của iPhone 3GS bằng 0x2715 của iPod touch 3
  • Sửa getDeviceVariant() của MobileGestalt để luôn trả về "A"
  • Khi sửa DYLD shared cache, có thể khôi phục chữ ký mã bằng cách tính lại hash SHA-1

Exploit iBoot

  • Viết lại exploit sử dụng lỗi driver HFS+ của iOS 5
  • Được cải thiện để mang tính xác định (deterministic) hơn phiên bản trước

Kết luận và kế hoạch sắp tới

  • Toàn bộ công việc không khó như dự đoán, và sau khi công cụ được công khai đã có nhiều câu hỏi liên quan đến jailbreak
  • Có khả năng jailbreak đơn giản bằng bản vá kernel và cài Cydia
  • Mục tiêu tiếp theo là thử chạy iOS 6 trên iPad 1
  • Dự án này cung cấp tài liệu tham khảo thực tiễn cho việc phân tích cấu trúc nội bộ của iOS và tận dụng thiết bị cũ

1 bình luận

 
GN⁺ 2025-11-28
Ý kiến trên Hacker News
  • Tôi nghĩ iDevices cũng rất cần thứ như thế này
    Thật vô lý khi một chiếc iPad Air thế hệ 1 tuy đã cũ nhưng vẫn còn dùng được lại bị vứt thành rác thải điện tử
    Vấn đề là Apple không còn hỗ trợ nữa, lại còn có chính sách ngăn cản cả việc cài hệ điều hành khác
    Trên Mac có OpenCore Legacy Patcher, nên ngay cả Mac đời cũ cũng có thể chạy macOS mới nhất

    • Nhân tiện, tôi đã làm một danh sách ứng dụng cho phép lọc các app còn chạy được trên thiết bị iOS cũ
    • Những tranh luận kiểu này khiến tôi cảm thấy như đang phủ nhận thực tế rác thải điện tử
      Không phải là “cũ nhưng vẫn dùng được”, mà đơn giản chỉ là “thiết bị cũ” thôi
      Tốc độ phát triển công nghệ quá nhanh, nên một thiết bị như iPad Air 2013 giờ ngay cả duyệt web cũng đã chật vật
      Tôi từng thử dùng Mac mini 2012 với OpenCore Legacy Patcher, nhưng cuối cùng phải chuyển sang Linux vì hiệu năng giảm sút và kernel panic
      Rốt cuộc những thiết bị này nên được xem như một dạng hàng tiêu dùng tạm thời
      Quyền được sửa chữa là quan trọng, nhưng đa số người dùng sẽ không tiếp tục dùng thiết bị cũ
      Ví như ô tô, kể cả Corolla đời 1999 có trở thành mã nguồn mở hoàn toàn thì đa số mọi người vẫn sẽ mua xe mới
    • Với sự xuất hiện của Apple Silicon và Tahoe, tương lai của OCLP đã trở nên mờ mịt
      Đội Dortania cũng nói rằng việc hỗ trợ Apple Silicon về cơ bản là bất khả thi, và những máy Mac Intel có chip T2 có lẽ cũng sắp bị ngừng hỗ trợ
      Cuối cùng có lẽ sẽ đến ngày Mac đời cũ cũng phải đối mặt với câu chuyện kết thúc hỗ trợ như iPhone và iPad
    • Gần đây tôi mua một chiếc iPad Air 1 trên Mercari với giá 25 USD, tình trạng rất tốt
      Nó xử lý EPUB và PDF ngon lành, nhưng vì WebKit quá cũ nên gần như không thể duyệt web
      Có vẻ kernel là bản năm 2021, nhưng WebKit dường như đã dừng lại từ sau năm 2018
    • Tôi tò mò không biết cụ thể việc “chặn cài OS khác” được triển khai như thế nào
  • Hơi lạc đề một chút, nhưng tôi có vài chiếc iPhone 5/5s/SE
    Tôi dùng chúng ngoại tuyến cho ghi nhịp tim, điều khiển action cam, ghi âm giọng nói
    Chúng vẫn nhỏ gọn, nhanh và đến năm 2025 vẫn hoàn toàn dùng ổn

    • Tôi còn lạc đề hơn nữa: từng thử tháo module radio khỏi Samsung Galaxy IV
      Không rõ có làm được vậy với iPhone không, nhưng đó là một thử nghiệm thú vị
  • Hồi mới vào Apple, tôi đã trải nghiệm các dự án iOS 6 và Snow Leopard
    Bài viết này khiến tôi nhớ lại những cấu trúc OS đóng và các thuật ngữ ngày xưa, nên thấy rất thú vị

  • Tôi vẫn rất yêu chiếc iPad Air sản xuất năm 2014
    iOS 12.5 là phiên bản cuối cùng, nhưng hầu hết ứng dụng vẫn chạy tốt
    Tôi dùng nó 6–7 tiếng mỗi ngày, và chỉ cần có trình duyệt mới hơn một chút là đủ

    • Tôi nghĩ đây chính là một ví dụ của sự lỗi thời có chủ đích
      Apple cấm các trình duyệt dùng engine render riêng trên iOS
      Vì vậy khi iOS ngừng cập nhật, không chỉ Safari mà mọi trình duyệt và ứng dụng dùng WebView cũng đồng loạt trở nên lỗi thời
  • Khá thú vị, nhưng nếu bằng cách này có thể hạ cấp từ iOS 26 xuống iOS 18 thì đúng là phép màu

    • 26 (Tahoe) trên mọi nền tảng đều nhiều lỗi và độ hoàn thiện thấp
      Chất lượng trên cả MacBook lẫn iPhone đều không còn như trước
    • Có lẽ phải cần đến một vụ kiện ở EU thì việc hạ cấp OS mới trở nên khả thi
      Tôi cũng muốn đưa chiếc điện thoại cũ của mình về iOS 16 để jailbreak thử
    • Đáng tiếc là thiết bị đó không có exploit
  • Tôi ước thiết bị Apple cũng có một OS thay thế kiểu như Lineage OS

    • Căn nguyên vấn đề là chính sách khóa bootloader
      Chừng nào Apple chưa mở khóa chuyện đó, thì việc cài OS tự do là không thể
  • Tôi tự hỏi liệu bằng cách này có thể khởi động iPhone OS 1.0 trên iPhone 2G không
    Trên máy tôi, chỉ khởi động được đến 1.1.4; còn 1.1.1 thì dừng ở lỗi khởi tạo FTL thất bại
    Tôi muốn thử lại màn kích hoạt bằng hack cuộc gọi khẩn cấp ngày xưa, nhưng chiếc 2G tôi dùng hồi đó đã bị mất rồi

  • Bài viết rất thú vị
    Tuy nhiên trong ví dụ mã, --bundle-id được gắn vào đầu mỗi dòng, nên dùng prepend mới đúng

  • Tôi có một chiếc iPad Air 1 cũ và đang thắc mắc liệu có thể nâng cấp từ iOS 12 hay không

  • Tôi mong sẽ có luật buộc các công ty phải mở khóa những thiết bị không còn được hỗ trợ