- iPod touch 3rd generation पर आधिकारिक रूप से समर्थित न होने वाले iOS 6 को चलाने की तकनीकी प्रक्रिया का विस्तार से वर्णन करने वाला प्रोजेक्ट
- DeviceTree, iBoot, Kernelcache, Restore Ramdisk, Root Filesystem जैसे iOS के मुख्य घटकों को संशोधित और पुनर्निर्मित करके पुराने डिवाइस पर नया वर्ज़न चलाया गया
- Python स्क्रिप्ट की मदद से iPhone 3GS और iPod touch 3 के DeviceTree अंतर को स्वतः तुलना और लागू किया गया, तथा iBoot patch के जरिए code signing verification को bypass किया गया
- Kernelcache को दोबारा बनाने के लिए macOS के
kcgen टूल का उपयोग कर armv7 के लिए kernel और kext को एकीकृत किया गया, अनावश्यक symbols हटाए गए और compression लागू की गई
- पुराने hardware की क्षमता को बढ़ाने और iOS की आंतरिक संरचना के विश्लेषण तथा custom firmware निर्माण तकनीक को साझा करने के संदर्भ में यह परियोजना तकनीकी रूप से अत्यंत महत्वपूर्ण है
iOS घटकों का अवलोकन
- iOS में iBoot, Kernelcache, DeviceTree, user space filesystem, और auxiliary processor firmware जैसे घटक शामिल होते हैं
- iBoot एक bootloader है, जिसके iBSS, iBEC, LLB और iBoot नाम के चार रूप मौजूद हैं
- Kernelcache वह फ़ाइल है जो kernel और kernel extensions (kext) को एक ही binary में बाँधती है
- DeviceTree hardware configuration और software behavior parameters को परिभाषित करता है, और iBoot इसके चलते समय इसे संशोधित करता है
- filesystem को installation के लिए restore ramdisk और स्थायी स्टोरेज के लिए root filesystem में बाँटा जाता है
iPhone 3GS परीक्षण
- iPhone 3GS और iPod touch 3 समान S5L8920X / S5L8922X SoC का उपयोग करते हैं
- चूँकि iPhone 3GS आधिकारिक रूप से iOS 6 को समर्थन देता है, इसलिए iOS 6.0 को iOS 5.1.1 के iBoot और DeviceTree के साथ boot करके परीक्षण किया गया
- मुख्य समस्या DeviceTree mismatch थी, क्योंकि iOS 6 में नए जोड़े गए nodes और properties जैसे
nvram-proxy-data की आवश्यकता थी
DeviceTree संशोधन
- दोनों DeviceTree के बीच अंतर की गणना और उसे लागू करने के लिए एक Python स्क्रिप्ट लिखी गई
- यह स्क्रिप्ट SundanceInH2A repository में सार्वजनिक है
nvram-proxy-data property में NVRAM dump शामिल होना चाहिए; इसे खाली छोड़ने पर kernel शुरुआती चरण में रुक जाता है
- iPod touch 3 पर लागू करते समय iPhone-विशिष्ट entries हटाने के बाद diff लागू किया गया
iBoot patch
- मूल रूप से Image3 signature check bypass, boot-args injection, और debug-enabled patch किए गए
nvram-proxy-data को dynamic रूप से भरना आवश्यक है; static value उपयोग करने पर वास्तविक NVRAM के overwrite होने का जोखिम है
UpdateDeviceTree() call को बदलकर nvram-proxy-data और random-seed डाला गया
- code signing को निष्क्रिय करने के लिए
amfi=0xff argument जोड़ा गया
- अन्य iBoot+kernel संयोजनों में DeviceTree अंतर और
boot_args संरचना की जाँच आवश्यक है
Kernelcache निर्माण
- iPod touch 3 के लिए iOS 6 kernel और kext एक internal build में मौजूद थे, लेकिन उन्हें एक साथ लोड करने के लिए prelinked kernelcache बनाना आवश्यक था
- macOS के
kcgen टूल से armv7 के लिए kernelcache बनाया गया
- प्रमुख विकल्प:
-arch armv7, -all-personalities, -strip-symbols, -uncompressed
- अनावश्यक symbols हटाने के बाद
lipo -thin armv7 से इसे single slice में बदला गया
- बने हुए kernelcache को compress करने के बाद Image3 container में पैकेज किया गया
- kext सूची iPhone 3GS के iOS 5.1.1 और 6.0 की तुलना से बनाई गई, और Wi-Fi kext के Info.plist में संशोधन आवश्यक था
Restore Ramdisk संशोधन
asr patch और options.n88.plist को options.n18.plist में बदलकर partition layout समायोजित किया गया
- iBoot exploit installation के लिए
rc.boot binary को दोबारा लागू किया गया
- ramdisk को remount करना और
umask सेट करना
restored_external -server call के जरिए restore के बाद reboot को रोकना
- restore पूरा होने पर तीसरा partition बनाना, exploit लिखना,
boot-partition को 2 पर सेट करना और फिर reboot करना
Root Filesystem संशोधन
/System/Library/CoreServices/SpringBoard.app/N18AP.plist जोड़ा गया और iOS 6 की सुविधाएँ परिलक्षित की गईं
- iOS 5.1.1 और iPod touch 4 के home screen configuration को मिलाया गया
- Multitouch, Wi-Fi, और Bluetooth firmware जोड़े गए
- Bluetooth के लिए
/usr/sbin/BlueTool में hardcoding को /etc/bluetool से override किया गया
- FairPlay daemon की
LimitLoadToHardware key हटाकर इसे iPod touch 3 पर भी सक्रिय किया जा सका
- iOS 6.1 और उसके बाद के वर्ज़नों में LaunchDaemon signature cache के कारण अतिरिक्त patch आवश्यक हैं
- Product ID map संशोधन: iPhone 3GS के
0x2714 को iPod touch 3 के 0x2715 से बदला गया
- MobileGestalt के
getDeviceVariant() को संशोधित कर हमेशा "A" लौटाने के लिए बदला गया
- DYLD shared cache संशोधित करते समय SHA-1 hash की पुनर्गणना से code signing को बहाल किया जा सकता है
iBoot exploit
- iOS 5 के HFS+ driver bug का उपयोग करने वाले exploit को फिर से लिखा गया
- इसे पिछले संस्करणों की तुलना में अधिक deterministic बनाया गया
निष्कर्ष और आगे की योजना
- पूरा काम अपेक्षा से उतना कठिन नहीं था, और tools सार्वजनिक करने के बाद jailbreak से जुड़े कई सवाल आने लगे
- kernel patch और Cydia installation के जरिए अपेक्षाकृत सरल jailbreak की संभावना है
- अगला लक्ष्य iPad 1 पर iOS 6 चलाने का परीक्षण है
- यह परियोजना iOS की आंतरिक संरचना के विश्लेषण और पुराने डिवाइस के उपयोग पर व्यावहारिक संदर्भ सामग्री प्रदान करती है
1 टिप्पणियां
Hacker News टिप्पणियाँ
मुझे लगता है iDevices को भी इसकी बहुत ज़रूरत है
पुराना होने के बावजूद अब भी काम का iPad Air 1st gen का e-waste बनकर फेंका जाना समझ से बाहर है
समस्या यह है कि Apple अब उसे support नहीं करता, और दूसरा operating system install करने तक को रोकने वाली policy रखता है
Mac पर OpenCore Legacy Patcher है, जिसकी मदद से पुराने Mac पर भी नया macOS चलाया जा सकता है
यह “पुराना लेकिन काम का” कम, और बस “पुराना device” ज़्यादा है
तकनीकी प्रगति की रफ़्तार इतनी तेज़ है कि 2013 का iPad Air अब web browsing के लिए भी मुश्किल से काम आता है
मैंने OpenCore Legacy Patcher से 2012 Mac mini चलाया था, लेकिन performance degradation और kernel panic की वजह से आखिर में Linux पर जाना पड़ा
आखिरकार ऐसे devices को एक तरह की temporary consumer goods की तरह देखना चाहिए
right to repair महत्वपूर्ण है, लेकिन ज़्यादातर user पुराने devices को लगातार इस्तेमाल नहीं करते
कार की मिसाल लें तो, 1999 Corolla पूरी तरह open source भी हो जाए, तब भी ज़्यादातर लोग नई कार ही खरीदेंगे
Dortania team ने भी कहा है कि Apple Silicon support व्यावहारिक रूप से असंभव है, और T2 chip वाले Intel Mac का support भी जल्द खत्म होता दिख रहा है
लगता है कि आखिरकार पुराने Mac के लिए भी iPhone और iPad की तरह support end होने की चर्चा का दिन आएगा
EPUB और PDF अच्छे से संभाल लेता है, लेकिन WebKit बहुत पुराना होने की वजह से web browsing लगभग असंभव है
kernel तो 2021 version का लगता है, लेकिन WebKit शायद 2018 के बाद से रुका हुआ है
थोड़ा विषय से हटकर, मेरे पास iPhone 5/5s/SE के कई units हैं
उन्हें offline-only तौर पर heart rate logging, action cam control, voice recording जैसी चीज़ों के लिए इस्तेमाल कर रहा हूँ
वे अब भी छोटे, तेज़ हैं, और 2025 में भी पूरी तरह उपयोगी हैं
iPhone पर यह संभव है या नहीं, पता नहीं, लेकिन काफ़ी दिलचस्प प्रयोग था
Apple में शुरुआती दिनों में मैंने iOS 6 और Snow Leopard project पर काम करने का अनुभव किया है
यह लेख देखकर पुराने closed OS structure और terminology याद आ गए, अच्छा लगा
मुझे 2014 का iPad Air अब भी बहुत पसंद है
iOS 12.5 उसका आख़िरी version है, लेकिन ज़्यादातर apps अब भी ठीक चलते हैं
मैं उसे रोज़ 6–7 घंटे इस्तेमाल करता हूँ, और बस थोड़ा नया browser मिल जाए तो काफ़ी है
Apple iOS में अपने rendering engine के अलावा दूसरे browser engine की अनुमति नहीं देता
इसलिए जैसे ही iOS update रुकता है, Safari ही नहीं बल्कि सभी browser और WebView apps एक साथ पुराने हो जाते हैं
दिलचस्प है, लेकिन अगर इस तरीके से iOS 26 से iOS 18 पर downgrade किया जा सके, तो वह सचमुच जादू जैसा होगा
MacBook और iPhone दोनों पर quality पहले जैसी नहीं रही
मैं भी पुराने phone को iOS 16 पर वापस ले जाकर jailbreak करना चाहूँगा
काश Apple devices के लिए भी Lineage OS जैसा alternative OS होता
जब तक Apple इसे नहीं खोलता, स्वतंत्र रूप से OS install करना संभव नहीं होगा
सोच रहा हूँ कि क्या इस तरीके से iPhone 2G पर iPhone OS 1.0 boot कराया जा सकता है
मेरे device पर 1.1.4 तक ही boot होता है, और 1.1.1 पर FTL initialization failure के साथ रुक जाता है
मैं पुराना emergency call hack activation फिर से आज़माना चाहता हूँ, लेकिन उस समय वाला 2G खो चुका हूँ
लेख दिलचस्प था
बस code example में
--bundle-idहर पंक्ति के आगे लगने वाली चीज़ है, इसलिए prepend सही शब्द हैमेरे पास पुराना iPad Air 1 है, और मैं जानना चाहता हूँ कि क्या उसे iOS 12 से upgrade किया जा सकता है
अच्छा होगा अगर जिन devices को कंपनियाँ अब support नहीं करतीं, उन्हें कानूनी रूप से ज़बरन खोलने का प्रावधान हो