- 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 Ramdisk và Root 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-args và vá 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-data và random-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
- Vá
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‑Fi và Bluetooth
- 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
Ý 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
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
Độ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
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
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
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à đủ
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
Chất lượng trên cả MacBook lẫn iPhone đều không còn như trước
Tôi cũng muốn đưa chiếc điện thoại cũ của mình về iOS 16 để jailbreak thử
Tôi ước thiết bị Apple cũng có một OS thay thế kiểu như Lineage OS
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 đúngTô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ợ