1 puan yazan GN⁺ 2025-11-28 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2025-11-28
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

    • Bununla bağlantılı olarak, eski iOS cihazlarda çalışan uygulamaları filtreleyebileceğiniz bir uygulama listesi hazırladım
    • Bu tür tartışmalar bana elektronik atık gerçeğini inkâr etmek gibi geliyor
      “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
    • Apple Silicon ve Tahoe ile birlikte OCLP'nin geleceği belirsizleşti
      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
    • Kısa süre önce Mercari'den 25 dolara bir iPad Air 1 aldım ve durumu çok iyi
      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ş
    • “Başka bir OS kurmayı engelliyor” ifadesinin somut olarak nasıl uygulandığını merak ediyorum
  • 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

    • Ben de daha da alakasız bir şey olarak, Samsung Galaxy IV'ün radyo modülünü çıkarmayı denemiştim
      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

    • Bence bu tam bir planlı eskitme örneği
      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

    • 26 (Tahoe), tüm platformlarda çok bug'lı ve yeterince olgunlaşmamış durumda
      Hem MacBook'ta hem iPhone'da kalite eskisi gibi değil
    • Muhtemelen OS downgrade'in mümkün olması için ancak bir AB davası gerekir
      Ben de eski telefonlarımdan birini iOS 16'ya döndürüp jailbreak yapmak isterdim
    • Ne yazık ki, ilgili cihaz için bir exploit yok
  • Apple cihazlar için de Lineage OS benzeri alternatif bir OS olmasını isterdim

    • Sorunun kökü bootloader kilidi politikası
      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-id her satırın başına geldiği için, prepend doğru ifade olur

  • Eski 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