今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

iPA重簽名 + 香色閨閣、微信重簽名實戰

背景#

換手機之後,原來的香色閨閣不能下載,轉移的時候就丟失了。又最近看到有人截屏 iPhone 上裝了兩個微信,一個是自己重簽名的;想到自己有開發者帳號,但是還沒試過重簽名 APP,是不是可以透過重簽名來安裝香色閨閣,以及實現多開微信?

步驟#

說幹就幹,首先從簡單的開始,先來嘗試重簽名香色閨閣,再嘗試微信,因為香色閨閣的包內容比微信的少很多,文件容易找,相對簡單,步驟如下:

重簽名香色閨閣#

首先從網上搜索下載香色閨閣的 ipa 包,沒有的可以從這裡yuedu.ipa下載。

然後將 ipa 改為 zip,然後解壓,會出現一個 Payload 文件夾,裡面有一個StandarReader.app的文件。選中StandarReader.app,右鍵顯示包內容,可以看到 APP 包中的所有內容,如下圖:

ipa 解壓

顯示包內容

package content

重簽名就是用自己的帳號新建一個 APP(bundleID 自己定義),運行到手機上,找到運行的包 (xxx/DriveData/xxx/Build/Products/Debug-iphoneos/xxx.app) 或者通過打包的方式,使用AdHoc方式生成一個 iPA(用於獲取到描述文件和Entitlements.plist),這裡需要注意選擇的描述文件包含要安裝的設備,然後把待簽名的 iPA 中的bundleID、證書和描述文件,替換成自己創建的 APP 的。

所以通常需要修改的有以下內容:

  • Info.plist 中的 bundleID
  • embedded.mobileprovision 簽名文件
  • _CodeSignature 中的內容
  • 因為普通帳號不能對插件進行簽名,在包內容路徑中找到 Watch 和 PlugIns 文件夾直接刪除
  • 重簽 framework

而針對香色閨閣的 ipa 來說,沒有插件,沒有 framework,所以需要修改的文件有:Info.plistembedded.mobileprovision_CodeSignature中的內容,下面具體來看如何修改:

修改 Info.plist 中的 bundleID#

找到Payload/StandarReader.app中的 Info.plist,用 Xcode 打開,或者其他編輯器打開,找到Bundle identifier,可以看到香色閨閣的 bundleID 為com.appbox.StandarReader,替換com.appbox.StandarReader為自己創建 APP 的 bundleID,如下圖:

Ps: 如果不是 Xcode 打開可以直接搜索替換

替換 bundleID

替換embedded.mobileprovision#

從自己新建 APP 的 iPA 中獲取到新的embedded.mobileprovision,步驟同上:改為 zip -> 解壓縮 -> 查看包內容,找到embedded.mobileprovision拷貝出來,可以放到要替換的Payload目錄的外層,如下圖:

新的 embedded.mobileprovision

然後用這個新的替換原 APP 中的embedded.mobileprovision,可以通過命令行,如下:

  1. 刪除原 APP 中的描述文件
    rm -rf Payload/xxx.app/embedded.mobileprovision
    
  2. 把新的描述文件,放入 xxx.app 中
    cp embedded.mobileprovision Payload/xxx.app/
    

重新簽名#

從自己創建的 APP 的embedded.mobileprovision中獲取Entitlements.plist注意是自己創建的 APP 中獲取,而不是香色閨閣的包中獲取,然後刪除香色閨閣包中的_CodeSignature,再用生成的Entitlements.plist給香色閨閣包生成新的簽名,具體步驟如下:

  1. 生成Entitlements.plist
    /usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist
    
  2. 刪除香色閨閣包中的_CodeSignature
    rm -rf Payload/xxx.app/_CodeSignature/
    
  3. 用新的Entitlements.plist給香色閨閣包生成新的簽名
    // 首先獲取證書名稱
    security find-identity -v -p codesigning
    // 選擇創建APP時使用的證書進行簽名
    codesign -f -s "證書名稱" --entitlements entitlements.plist Payload/xxx.app
    

打包,安裝#

Payload文件夾在壓縮為ipa文件,命令如下:

zip -r xxx.ipa Payload/

最後安裝,可以選中 Xcode,然後選擇 Windows -> Device And Simulators,或者選中 Xcode 後使用快捷鍵Shift+CMD+2打開,選中設備,點擊+,選擇生成的 ipa,即可安裝。

Xcode 安裝 ipa

重簽名微信#

第一步,獲取微信的 ipa 文件,要注意下載 ipa 的可用性,要不然辛苦半天最後發現不能用,誤以為是步驟有問題,有可能是包的問題。。。筆者最終可用的是從這裡下載的微信 ipa

ipa 下載完成後,和上面步驟類似,改為.zip,解壓,獲取到 Payload/WeChat.app,如下圖:

WeChat_app

用自己的帳號新建一個 APP(bundleID 自己定義),運行到手機上,找到運行的包 (xxx/DriveData/xxx/Build/Products/Debug-iphoneos/xxx.app) 或者通過打包的方式,使用AdHoc方式生成一個 iPA(用於獲取到描述文件和Entitlements.plist),這裡需要注意選擇的描述文件包含要安裝的設備,然後把待簽名的 iPA 中的bundleID、證書和描述文件,替換成自己創建的 APP 的。

修改 info.plist 的 bundleIdentifier#

然後查看 WeChat.app 的包內容,找到info.plist,並替換其中的bundleIdentifier為自己創建的 (WeChat.app 中內容很多,可以按修改日期排序,會相對容易找到要修改的文件),如下圖:
微信 bundleID 修改

替換embedded.mobileprovision#

從自己創建的 APP 中獲取到embedded.mobileprovision,然後替換WeChat.app中的embedded.mobileprovision,可以直接複製替換。

重簽名 Frameworks#

對比上面的香色閨閣,這裡多了重簽名 Frameworks 的步驟,需要把Frameworks中的所有庫,都用自己的證書重新簽名一下,Frameworks中內容如下圖(這裡可能有非官方的庫,一並簽名了,不影響):

Frameworks 內容

重簽名的命令如下,重複執行,直到Frameworks下所有庫都簽名完成:

codesign -fs "你的證書" xxx.framework

替換 framework 簽名

刪除 Plugins#

筆者下載的這個版本的WeChat.app的 Content 中未找到Plugins的內容,故而不需要處理

替換簽名#

從自己創建的 APP 中獲取到的embedded.mobileprovision生成Entitlements.plist,命令如下:

   /usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist

然後刪除WeChat.app中的_CodeSignature,再用生成的Entitlements.plist,給WeChat.app重簽名,命令如下,執行時注意Entitlements.plistWeChat.app的路徑:

codesign -fs "你的證書" --no-strict --entitlements=Entitlements.plist Payload/WeChat.app/

重簽名 WeChat.app

然後壓縮/Payload/WeChat.app,生成xxx.ipa,命令如下:

zip -r xxx.ipa Payload/

最後使用 Xcode 安裝 xxx.ipa 到手機,步驟如下:
選中 Xcode,Shipt+CMD+2打開窗口,然後選中設備,點擊 "+",選擇xxx.ipa,等待安裝

最後安裝後效果如下:

最終效果

總結#

總結一下,ipa 重簽名是用自己的證書和描述文件替換對應包中的證書和描述文件的過程,總的步驟如下:

  • 找到可用的 ipa
  • 新建項目,編譯或者打包,獲取到對應的embeded.mobileprovision
  • 修改替換包的bundleIdentifier為自己創建項目的bundleIdentifier
  • 用自己的embeded.mobileprovision更新替換包中的
  • 重簽名Frameworks
  • 刪除Plugins
  • 用自己的embeded.mobileprovision生成Entitlements.plist,然後重簽名xxx.app
  • 最後打包xxx.appxxx.ipa,安裝

參考#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。