快轉到主要內容

LiveContainer教學,iOS安裝第三方APP數量無上限,免越獄

· 民國114年乙巳年
·
切換繁體/簡體
分類   智慧型手機 iOS玩機與越獄
標籤   JIT IOS AltStore
目錄

請參閱:iOS所有安裝第三方APP、側載IPA的方法

想要在iPhone/iPad安裝第三方APP,卻苦於免費Apple開發者帳號只有3個APP的簽名限制嗎?

Duy Tran開發的「LiveContainer」用一種曲折的方式解決這個問題。

它有點類似虛擬機,或說是容器,但其實是APP啟動器,讓你不用真的安裝APP也可以使用APP。雖然APP是暫時執行的,但是資料會保存在同一個資料夾,日後可以持續使用。

LiveContainer最大的好處就是 安裝APP數量無上限! 我們知道不論是SideStore還是AltStore,因為是用免費的個人Apple開發者帳戶側載IPA的,所以會有一個裝置同時只能安裝3個APP的限制。要解鎖就只能花錢買3000台幣的Apple開發者年費帳號。而LiveContainer沒有此限制,在這個APP內部想裝幾個APP就裝幾個,只是需要進行切換程序。不需要花錢買Apple開發者帳號。

另外,LiveContainer也可以當成一種「私密空間」的APP使用,因為安裝的APP只有LiveContainer裡面能見到,所以APP不會顯示在主畫面上,可以增加隱私保護。LiveContainer支援使用FaceID給內部APP上鎖。

對不想花錢的免費仔來說,LiveContainer是一個值得考慮的方案。因為SideStore的簽名額度有限,而LiveContainer能讓你測試更多APP。在分配簽名額度的策略上,LiveContainer能夠靠一個APP換到好幾十個APP。安裝無限數量的這點很像是TrollStore,卻沒有限制iOS版本。

1. LiveContainer原理
#

供有興趣的開發者參考,我只是簡略翻譯。

LiveContainer為開源軟體,根據開發者在Github的解釋,LiveContainer透過一連串技巧達成「讓系統以為這個APP是經過認可的」,所以就能直接執行。

  1. 首先LiveContainer會拆開IPA,修補二進位Mach-O執行檔的記憶體結構,將__PAGEZERO區段的起始記憶體地址調整,避開一些安全機制。

  2. 把Mach-O標頭的檔案類型從MH_EXECUTE改成MH_DYLIB,這樣系統就會以載入函式庫的方式來處理這個App。

  3. 接著注入一段新的指令,載入自己的TweakLoader.dylib,讓App在啟動時會執行自定義的程式碼。

  4. 修補@executable_path,LiveContainer對_NSGetExecutablePath傳出空指標,並讓它當掉,產生SIGSEGV錯誤,再修改@executable_path上下文。讓載入的 App 以為自己是正統安裝的。

  5. 修補NSBundle.mainBundle,直接改成安裝的IPA的路徑。

  6. 採用Restoring Dyld Memory Loading方法,繞過iOS的簽名驗證。也可以用JIT來繞過簽名驗證。如果沒有JIT,就透過AltStore或SideStore給APP簽名。

  7. 呼叫dlopen啟動APP的二進位執行檔。

  8. TweakLoader在指定資料夾裡面載入tweaks。

  9. 找到程式執行入口,跳到該處。

  10. APP呼叫UIApplicationMain,像一般的iOS APP一樣啟動。

  11. 關於多帳號與Keychain管理:iOS的Keychain可以用「Access Groups」區分不同App的資料。LiveContainer預先建立了128組不同的Access Groups。每次建立一個新的App容器,就隨機分配一組 Access Group,達成資料隔離的效果。這樣至多能安裝到128個APP。

為什麼能不安裝IPA就執行?它是把「安裝APP到系統 → 執行」這兩步拆開,然後用修改記憶體與Mach-O結構的方式,讓iOS誤以為這個App已經是合法可執行的,用動態連結庫注入方式載入執行。因此可以直接執行而不用正式安裝到iOS系統。

2. 系統需求
#

LiveContainer需要iOS 15以上版本。

不需要越獄就能使用。

可想而知,LiveContainer沒有在App Store上架,需要用側載的。支援SideStore或AltStore側載。

大部分APP應該都能在LiveContainer裡面啟動,不過根據Github用戶的回報,少部份APP啟動會崩潰。

3. 安裝LiveContainer
#

上文講了LiveContainer的原理,因此啟動APP之前都要修補一番。開發者提供JIT與JIT-Less模式來啟動APP。預設不設定的話就是使用JIT。

JIT的好處是能加速一部份模擬器APP的效能,且APP不需要簽名就能啟動。缺點是啟動APP要多一個切換JIT的步驟。

至於JIT-Less模式的話,則是會取用SideStore或AltStore的憑證來幫LiveContainer內部的APP簽名,不會受到免費Apple ID一週10個Bundle ID的限制。

各有利弊,看哪個比較方便就選哪個。

JIT模式
#

  1. 我系統是iOS 18,為了方便啟用JIT,所以使用SideStore來側載APP。只有初次設定需要用到電腦。

  2. 接著再設定StikJIT,就可以免電腦啟用JIT。

  3. Github下載LiveContainer的IPA。連著SideStore提供的StosVPN,使用SideStore側載。

JIT-Less模式
#

  1. 我系統是iOS 18,安裝SideStore

  2. Github下載LiveContainer的IPA安裝。

  3. 連著SideStore提供的StosVPN。

  4. 開啟LiveContainer APP,點選Settings,按Patch SideStore

  5. 之後SideStore會被修補,接著自動重新安裝。

  6. 重新開啟SideStore,LiveContainer應該會就會取得憑證。

  7. 回到LiveContainer,點選Settings → JIT-Less Mode Diagnose → Test JIT-less Mode,顯示Success即代表成功。

4. LiveContainer內APP啟動方法
#

LiveContainer的啟動方法比較曲折一些。首先要知道的是,LiveContainer雖然可以匯入多個APP,但是一次只能啟動一個APP。

  1. 到Github之類網站下載想要側載的第三方IPA。

  2. 在LiveContainer側載你想要的IPA,可以根據需求匯入多個APP的IPA。嚴格來說APP沒有安裝到iOS系統,只是匯入到LiveContainer,只有該APP內可見。

  3. 在LiveContainer主界面,點APP旁邊的Run。如果使用JIT-Less模式,APP會在簽名完成後直接啟動。

  4. 反之,使用JIT模式的話LiveContainer APP會跳出,切換到SideStore界面,請手動返回iOS主畫面。連著SideStore提供的StosVPN,開啟StikJIT APP,以JIT啟動LiveContainer,進入要使用的APP。

  5. 下次再開啟LiveContainer的時候,會回到LiveContainer選取APP的介面,點選切換APP。

5. 實際操作例子:安裝RetroArch APP
#

因為要加速遊戲模擬器效能,我這裡有使用JIT。

1. 以RetroArch模擬器為例,雖然有上架App Store但是JIT加速要用側載的。使用iOS的Safari到官方網站下載IPA。

  1. 開啟LiveContainer,點左上角+號,匯入IPA

  2. 點選Run

  3. 切換到StikJIT APP,以JIT啟動LiveContainer

註:不想要手動切換的,可以在LiveContainer → Settings → JIT,選取StikJIT。並在LiveContainer首頁,長按要啟動的APP設定,勾選Launch with JIT。

  1. 然後LiveContainer的畫面就會「變成」RetroArch,功能應可正常使用。

  2. 滑掉LiveContainer之後,剛剛啟動的APP也會隨之關閉。之後要重做一次JIT啟用步驟。

  3. 對LiveContainer裡面的APP選單長按右鍵,可以將APP的圖示加到iOS主畫面。

6. LiveContainer各個APP資料儲存位置
#

LiveContainer能夠匯入多個APP,只要不刪除APP,切換APP之後資料依然會存在。

因為不是真正安裝到iOS系統,所以APP產生的資料只會儲存在LiveContainer內部。

開啟iOS檔案APP → 我的iPhone/iPad → LiveContainer → Data → Application,可以看到各個APP的資料。

7. 多重LiveContainer實例,同時使用不同的APP
#

既然LiveContainer一次只能進入一個APP,那安裝兩個LiveContainer APP就解套啦!兩個LiveContainer APP就能同時執行不同的APP。

不過,第二個LiveContainer會佔掉一個位置,如果用SideStore簽名IPA,額度會全部佔滿,導致SideStore不能再安裝其他APP。

點選LiveContainer的Settings → Install Another LiveContainer,產生一個不同Bundle ID的IPA,再用SideStore側載之。

相關文章

SideStore在iPhone安裝第三方APP,免電腦重簽安裝IPA教學
分類   智慧型手機 iOS玩機與越獄
標籤   AltStore IOS
iOS版UTM JIT V.S. UTM SE,啟用JIT加速的虛擬機前後速度比較
分類   智慧型手機 iOS玩機與越獄
標籤   UTM JIT IOS IPad
AltStore啟用JIT加速,加速iOS模擬器APP執行速度
分類   智慧型手機 iOS玩機與越獄
標籤   AltStore JIT

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。