- iPod touch 3. nesil üzerinde resmî olarak desteklenmeyen iOS 6'yı çalıştırmak için izlenen teknik süreci ayrıntılı biçimde açıklayan bir proje
- DeviceTree, iBoot, Kernelcache, Restore Ramdisk, Root Filesystem gibi iOS'un temel bileşenleri değiştirilip yeniden yapılandırılarak eski cihazlarda daha yeni sürümler çalıştırılıyor
- Python betiği kullanılarak iPhone 3GS ile iPod touch 3 arasındaki DeviceTree farkları otomatik olarak karşılaştırılıp uygulanıyor, iBoot yaması ile de kod imzası doğrulaması aşılıyor
- Kernelcache yeniden oluşturma sürecinde macOS'taki
kcgen aracı kullanılarak armv7 için çekirdek ve kext'ler birleştiriliyor, gereksiz semboller kaldırılıyor ve sıkıştırma uygulanıyor
- Eski donanımın potansiyelini genişletmesi ve iOS iç yapısının analizi ile özel bellenim üretim tekniklerini paylaşması açısından yüksek teknik önem taşıyor
iOS bileşenlerine genel bakış
- iOS; iBoot, Kernelcache, DeviceTree, kullanıcı alanı dosya sistemi, yardımcı işlemciler için bellenim gibi bileşenlerden oluşur
- iBoot bir önyükleyicidir ve iBSS, iBEC, LLB ve iBoot olmak üzere dört biçimi vardır
- Kernelcache, çekirdeği ve çekirdek uzantılarını (kext) tek bir ikili dosyada birleştiren dosyadır
- DeviceTree, donanım yapılandırmasını ve yazılım davranış parametrelerini tanımlar; iBoot bunu çalışma sırasında değiştirir
- Dosya sistemi, kurulum için kullanılan restore ramdisk ve kalıcı depolama için kullanılan root filesystem olarak ayrılır
iPhone 3GS testi
- iPhone 3GS ile iPod touch 3, benzer S5L8920X / S5L8922X SoC kullanır
- iPhone 3GS iOS 6'yı resmî olarak desteklediği için, iOS 6.0 sürümü iOS 5.1.1'in iBoot ve DeviceTree bileşenleriyle birlikte önyükleme testine tabi tutuldu
- Temel sorun DeviceTree uyumsuzluğuydu; iOS 6'da yeni eklenen düğümler ve özellikler (
nvram-proxy-data) gerekliydi
DeviceTree değişiklikleri
- İki DeviceTree arasındaki farkları hesaplayıp uygulayan bir Python betiği yazıldı
- Betik SundanceInH2A deposunda yayımlandı
nvram-proxy-data özelliğinin NVRAM dökümünü içermesi gerekiyor; boş bırakılırsa çekirdek erken aşamada takılıyor
- iPod touch 3'e uygularken iPhone'a özgü öğeler kaldırıldıktan sonra diff uygulanıyor
iBoot yaması
- Varsayılan olarak Image3 imza denetimini atlama, boot-args enjeksiyonu ve debug-enabled yaması uygulanıyor
nvram-proxy-data alanının dinamik olarak doldurulması gerekiyor; statik değer kullanılırsa gerçek NVRAM'in üzerine yazılma riski var
UpdateDeviceTree() çağrısı değiştirilerek nvram-proxy-data ve random-seed ekleniyor
- Kod imzalamayı devre dışı bırakmak için
amfi=0xff argümanı ekleniyor
- Farklı iBoot+çekirdek kombinasyonlarında DeviceTree farklarının ve
boot_args yapısının kontrol edilmesi gerekiyor
Kernelcache oluşturma
- iPod touch 3 için iOS 6 çekirdeği ve kext'ler dahili derlemede mevcut olsa da, bunların aynı anda yüklenebilmesi için önceden bağlanmış kernelcache (prelinked kernelcache) oluşturulması gerekiyordu
- macOS'taki
kcgen aracı kullanılarak armv7 için kernelcache üretildi
- Başlıca seçenekler:
-arch armv7, -all-personalities, -strip-symbols, -uncompressed
- Gereksiz semboller kaldırıldıktan sonra
lipo -thin armv7 ile tek dilime dönüştürüldü
- Üretilen kernelcache sıkıştırıldıktan sonra Image3 kapsayıcısına paketlendi
- Kext listesi, iPhone 3GS'in iOS 5.1.1 ve 6.0 sürümleri karşılaştırılarak oluşturuldu; Wi‑Fi kext'inin Info.plist dosyasında değişiklik yapılması gerekiyor
Restore Ramdisk değişiklikleri
asr yaması uygulandı ve bölüm yerleşimini ayarlamak için options.n88.plist, options.n18.plist olarak değiştirildi
- iBoot exploit kurulumunu yapmak için
rc.boot ikilisi yeniden gerçeklendi
- Ramdisk yeniden bağlanıyor ve
umask ayarlanıyor
restored_external -server çağrısıyla geri yükleme sonrasında yeniden başlatma engelleniyor
- Geri yükleme tamamlanınca üçüncü bölüm oluşturuluyor, exploit yazılıyor,
boot-partition 2 olarak ayarlanıyor ve ardından yeniden başlatılıyor
Root Filesystem değişiklikleri
/System/Library/CoreServices/SpringBoard.app/N18AP.plist eklendi ve iOS 6 özellikleri yansıtıldı
- iOS 5.1.1 ile iPod touch 4'ün ana ekran düzeni birleştirildi
- Multitouch, Wi‑Fi ve Bluetooth bellenimleri eklendi
- Bluetooth için
/usr/sbin/BlueTool içindeki sabit kodlama /etc/bluetool üzerinden geçersiz kılındı
- FairPlay daemon içindeki
LimitLoadToHardware anahtarı kaldırılarak bunun iPod touch 3'te de etkinleşmesi sağlandı
- iOS 6.1 ve sonrasında LaunchDaemon imza önbelleği nedeniyle ek yamalar gerekiyor
- Product ID haritası değiştirildi: iPhone 3GS'in
0x2714 değeri iPod touch 3'ün 0x2715 değeriyle değiştirildi
- MobileGestalt içindeki
getDeviceVariant() değiştirilerek her zaman "A" döndürmesi sağlandı
- DYLD paylaşımlı önbelleği değiştirirken SHA-1 özeti yeniden hesaplanarak kod imzası onarılabiliyor
iBoot exploit'i
- iOS 5'teki HFS+ sürücü hatasını kullanan exploit yeniden yazıldı
- Önceki sürüme göre daha deterministik hâle getirildi
Sonuç ve gelecek planları
- Tüm çalışma beklenenden daha zor olmadı ve araçlar yayımlandıktan sonra jailbreak ile ilgili çok sayıda soru geldi
- Çekirdek yaması ve Cydia kurulumu ile basit bir jailbreak olasılığı bulunuyor
- Sıradaki hedef, iPad 1 üzerinde iOS 6 çalıştırmayı test etmek
- Bu proje, iOS iç yapısının analizi ve eski cihazların değerlendirilmesi konusunda somut bir başvuru kaynağı sunuyor
1 yorum
Hacker News görüşleri
iDevices için de buna gerçekten ihtiyaç olduğunu düşünüyorum
Eski ama hâlâ kullanılabilir bir 1. nesil iPad Air'in e-waste olarak çöpe gitmesi saçma
Sorun, Apple'ın artık destek vermemesi ve başka bir işletim sistemi kurmayı bile engelleyen politikası
Mac tarafında OpenCore Legacy Patcher var; bu sayede eski Mac'lerde en güncel macOS çalıştırılabiliyor
“Eski ama kullanılabilir” olmaktan ziyade, bunlar sadece “eski cihazlar”
Teknolojik ilerleme çok hızlı olduğu için, 2013 iPad Air gibi cihazlar artık web'de gezinirken bile zorlanıyor
OpenCore Legacy Patcher ile 2012 Mac mini kullanmayı denedim ama performans düşüşü ve kernel panic yüzünden sonunda Linux'a geçtim
Sonuçta bu cihazları bir tür geçici tüketim ürünü olarak görmek gerekiyor
Tamir hakkı önemli ama kullanıcıların çoğu eski cihazları kullanmaya devam etmiyor
Arabayla kıyaslarsak, 1999 model bir Corolla tamamen açık kaynak olsa bile çoğu kişi yine yeni bir araba alır
Dortania ekibi de Apple Silicon desteğinin fiilen imkânsız olduğunu söyledi ve T2 çipli Intel Mac'lerin de yakında desteği kesilecek gibi görünüyor
Sonunda eski Mac'ler için de iPhone ve iPad'lerdeki gibi destek sonu tartışmaları yaşayacağımız gün gelecek gibi duruyor
EPUB ve PDF'leri iyi açıyor ama WebKit çok eski olduğu için web'de gezinmek neredeyse imkânsız
Kernel 2021 sürümü gibi görünüyor ama WebKit sanki 2018'den sonra durmuş
Konudan biraz sapıyor ama elimde birkaç iPhone 5/5s/SE var
Bunları çevrimdışı olarak sadece kalp atış hızı kaydı, aksiyon kamerası kontrolü, ses kaydı gibi işler için kullanıyorum
Hâlâ küçük ve hızlılar; 2025'te bile fazlasıyla işe yarıyorlar
iPhone'da da mümkün mü bilmiyorum ama ilginç bir deneydi
Apple'da işe ilk başladığım dönemde iOS 6 ve Snow Leopard projelerini görmüştüm
Bu yazı bana eski kapalı OS yapısını ve terimlerini hatırlattı, hoşuma gitti
2014 üretimi iPad Air'imi hâlâ seviyorum
Son sürüm iOS 12.5 olsa da uygulamaların çoğu gayet iyi çalışıyor
Günde 6-7 saat kullanıyorum; biraz daha güncel bir tarayıcı olsa bana yeter
Apple, iOS'ta kendi rendering engine'ini kullanmayan tarayıcılara izin vermiyor
Bu yüzden iOS güncellemeleri durduğunda sadece Safari değil, tüm tarayıcılar ve WebView kullanan uygulamalar aynı anda eskiyor
İlginç görünüyor ama bu yöntemle iOS 26'dan iOS 18'e downgrade yapılabilse gerçekten sihir gibi olurdu
Hem MacBook'ta hem iPhone'da kalite eskisi gibi değil
Ben de eski telefonlarımdan birini iOS 16'ya döndürüp jailbreak yapmak isterdim
Apple cihazlar için de Lineage OS benzeri alternatif bir OS olmasını isterdim
Apple bunu açmadığı sürece özgürce OS kurmak mümkün değil
Acaba bu yöntemle iPhone 2G'de iPhone OS 1.0 boot edilebilir mi diye merak ediyorum
Bende 1.1.4'e kadar açılıyor ama 1.1.1 sürümü FTL başlatma hatası yüzünden takılıyor
Eskiden yapılan acil arama hack'iyle aktivasyonu yeniden denemek istiyorum ama o dönemde kullandığım 2G'yi kaybettim
İlginç bir yazıydı
Yalnız kod örneğinde
--bundle-idher satırın başına geldiği için, prepend doğru ifade olurEski bir iPad Air 1'im var; iOS 12'den sonra yükseltme yapılıp yapılamadığını merak ediyorum
Şirketlerin artık desteklemediği cihazları zorunlu olarak açmalarını sağlayan yasalar olsa keşke