- Proyek yang menjelaskan secara rinci proses teknis untuk menjalankan iOS 6 yang tidak didukung secara resmi pada iPod touch generasi ke-3
- Menjalankan versi yang lebih baru pada perangkat lama dengan memodifikasi dan menyusun ulang komponen inti iOS seperti DeviceTree, iBoot, Kernelcache, Restore Ramdisk, dan Root Filesystem
- Menggunakan skrip Python untuk secara otomatis membandingkan dan menerapkan perbedaan DeviceTree antara iPhone 3GS dan iPod touch 3, serta melewati verifikasi tanda tangan kode dengan patch iBoot
- Untuk membangun ulang Kernelcache, digunakan alat
kcgen di macOS untuk menggabungkan kernel dan kext untuk armv7, menghapus simbol yang tidak perlu, lalu mengompresnya
- Memiliki nilai teknis tinggi karena memperluas potensi perangkat keras lama sekaligus membagikan teknik analisis struktur internal iOS dan pembuatan firmware kustom
Ikhtisar komponen iOS
- iOS terdiri dari iBoot, Kernelcache, DeviceTree, sistem berkas ruang pengguna, dan firmware untuk prosesor tambahan
- iBoot adalah bootloader, dengan empat bentuk: iBSS, iBEC, LLB, dan iBoot
- Kernelcache adalah berkas yang menggabungkan kernel dan ekstensi kernel (kext) ke dalam satu biner
- DeviceTree mendefinisikan konfigurasi perangkat keras dan parameter perilaku perangkat lunak, dan dimodifikasi oleh iBoot saat berjalan
- Sistem berkas dibagi menjadi restore ramdisk untuk instalasi dan root filesystem untuk penyimpanan permanen
Pengujian di iPhone 3GS
- iPhone 3GS dan iPod touch 3 menggunakan SoC S5L8920X / S5L8922X yang serupa
- Karena iPhone 3GS secara resmi mendukung iOS 6, dilakukan uji boot iOS 6.0 bersama iBoot dan DeviceTree dari iOS 5.1.1
- Masalah utamanya adalah ketidakcocokan DeviceTree; iOS 6 membutuhkan node dan properti baru yang ditambahkan, termasuk
nvram-proxy-data
Modifikasi DeviceTree
- Dibuat skrip Python untuk menghitung dan menerapkan perbedaan antara dua DeviceTree
- Skrip tersebut dipublikasikan di repositori SundanceInH2A
- Properti
nvram-proxy-data harus berisi dump NVRAM; jika dibiarkan kosong, kernel akan berhenti pada tahap awal
- Saat diterapkan ke iPod touch 3, entri khusus iPhone dihapus terlebih dahulu sebelum diff diterapkan
Patch iBoot
- Secara default dilakukan bypass pemeriksaan tanda tangan Image3, injeksi boot-args, dan patch debug-enabled
nvram-proxy-data harus diisi secara dinamis; penggunaan nilai statis berisiko menimpa NVRAM yang sebenarnya
- Panggilan
UpdateDeviceTree() diganti untuk menyisipkan nvram-proxy-data dan random-seed
- Menambahkan argumen
amfi=0xff untuk menonaktifkan penandatanganan kode
- Pada kombinasi iBoot+kernel lain, perlu memeriksa perbedaan DeviceTree dan struktur
boot_args
Pembuatan Kernelcache
- Kernel dan kext iOS 6 untuk iPod touch 3 ada dalam build internal, tetapi untuk memuatnya secara bersamaan diperlukan prelinked kernelcache
- Menggunakan alat
kcgen di macOS untuk membuat kernelcache armv7
- Opsi utama:
-arch armv7, -all-personalities, -strip-symbols, -uncompressed
- Setelah simbol yang tidak perlu dihapus, hasilnya diubah menjadi satu slice dengan
lipo -thin armv7
- Kernelcache yang dihasilkan kemudian dikompresi dan dikemas ke dalam kontainer Image3
- Daftar kext disusun dengan membandingkan iOS 5.1.1 dan 6.0 milik iPhone 3GS, dan diperlukan modifikasi pada Info.plist kext Wi‑Fi
Modifikasi Restore Ramdisk
- Melakukan patch pada
asr dan mengubah options.n88.plist menjadi options.n18.plist untuk menyesuaikan tata letak partisi
- Untuk memasang eksploit iBoot, biner
rc.boot diimplementasikan ulang
- Melakukan remount ramdisk dan mengatur
umask
- Memanggil
restored_external -server agar tidak reboot setelah pemulihan
- Setelah pemulihan selesai, membuat partisi ketiga, menulis eksploit, mengatur
boot-partition ke 2, lalu reboot
Modifikasi Root Filesystem
- Menambahkan
/System/Library/CoreServices/SpringBoard.app/N18AP.plist dan mencerminkan fitur iOS 6
- Menggabungkan konfigurasi layar utama dari iOS 5.1.1 dan iPod touch 4
- Menambahkan firmware Multitouch, Wi‑Fi, dan Bluetooth
- Untuk Bluetooth, hardcoding di
/usr/sbin/BlueTool dioverride dengan /etc/bluetool
- Dengan menghapus kunci
LimitLoadToHardware dari daemon FairPlay, fitur itu dapat diaktifkan juga di iPod touch 3
- Pada iOS 6.1 ke atas, diperlukan patch tambahan karena cache tanda tangan LaunchDaemon
- Memodifikasi peta Product ID: mengganti
0x2714 milik iPhone 3GS menjadi 0x2715 milik iPod touch 3
- Memodifikasi
getDeviceVariant() milik MobileGestalt agar selalu mengembalikan "A"
- Saat memodifikasi cache bersama DYLD, tanda tangan kode dapat dipulihkan dengan menghitung ulang hash SHA-1
Eksploit iBoot
- Menulis ulang eksploit yang memanfaatkan bug driver HFS+ di iOS 5
- Dibuat lebih deterministik dibanding versi sebelumnya
Kesimpulan dan rencana berikutnya
- Seluruh pekerjaan ternyata tidak sesulit yang diperkirakan, dan setelah alat dirilis muncul banyak pertanyaan terkait jailbreak
- Ada kemungkinan jailbreak dapat dilakukan secara sederhana dengan patch kernel dan pemasangan Cydia
- Target berikutnya adalah menguji menjalankan iOS 6 di iPad 1
- Proyek ini menyediakan bahan rujukan praktis untuk analisis struktur internal iOS dan pemanfaatan perangkat lama
Belum ada komentar.