背景#
換手機之後,原來的香色閨閣不能下載,轉移的時候就丟失了。又最近看到有人截屏 iPhone 上裝了兩個微信,一個是自己重簽名的;想到自己有開發者帳號,但是還沒試過重簽名 APP,是不是可以透過重簽名來安裝香色閨閣,以及實現多開微信?
步驟#
說幹就幹,首先從簡單的開始,先來嘗試重簽名香色閨閣,再嘗試微信,因為香色閨閣的包內容比微信的少很多,文件容易找,相對簡單,步驟如下:
重簽名香色閨閣#
首先從網上搜索下載香色閨閣的 ipa 包,沒有的可以從這裡yuedu.ipa下載。
然後將 ipa 改為 zip,然後解壓,會出現一個 Payload 文件夾,裡面有一個StandarReader.app
的文件。選中StandarReader.app
,右鍵顯示包內容,可以看到 APP 包中的所有內容,如下圖:
重簽名就是用自己的帳號新建一個 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.plist
、embedded.mobileprovision
、_CodeSignature
中的內容,下面具體來看如何修改:
修改 Info.plist 中的 bundleID#
找到Payload/StandarReader.app
中的 Info.plist,用 Xcode 打開,或者其他編輯器打開,找到Bundle identifier
,可以看到香色閨閣的 bundleID 為com.appbox.StandarReader
,替換com.appbox.StandarReader
為自己創建 APP 的 bundleID,如下圖:
Ps: 如果不是 Xcode 打開可以直接搜索替換
替換embedded.mobileprovision
#
從自己新建 APP 的 iPA 中獲取到新的embedded.mobileprovision
,步驟同上:改為 zip -> 解壓縮 -> 查看包內容,找到embedded.mobileprovision
拷貝出來,可以放到要替換的Payload
目錄的外層,如下圖:
然後用這個新的替換原 APP 中的embedded.mobileprovision
,可以通過命令行,如下:
- 刪除原 APP 中的描述文件
rm -rf Payload/xxx.app/embedded.mobileprovision
- 把新的描述文件,放入 xxx.app 中
cp embedded.mobileprovision Payload/xxx.app/
重新簽名#
從自己創建的 APP 的embedded.mobileprovision
中獲取Entitlements.plist
,注意是自己創建的 APP 中獲取,而不是香色閨閣的包中獲取,然後刪除香色閨閣包中的_CodeSignature
,再用生成的Entitlements.plist
給香色閨閣包生成新的簽名,具體步驟如下:
- 生成
Entitlements.plist
/usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist
- 刪除香色閨閣包中的
_CodeSignature
rm -rf Payload/xxx.app/_CodeSignature/
- 用新的
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,即可安裝。
重簽名微信#
第一步,獲取微信的 ipa 文件,要注意下載 ipa 的可用性,要不然辛苦半天最後發現不能用,誤以為是步驟有問題,有可能是包的問題。。。筆者最終可用的是從這裡下載的微信 ipa
ipa 下載完成後,和上面步驟類似,改為.zip,解壓,獲取到 Payload/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 中內容很多,可以按修改日期排序,會相對容易找到要修改的文件),如下圖:
替換embedded.mobileprovision
#
從自己創建的 APP 中獲取到embedded.mobileprovision
,然後替換WeChat.app
中的embedded.mobileprovision
,可以直接複製替換。
重簽名 Frameworks#
對比上面的香色閨閣,這裡多了重簽名 Frameworks 的步驟,需要把Frameworks
中的所有庫,都用自己的證書重新簽名一下,Frameworks
中內容如下圖(這裡可能有非官方的庫,一並簽名了,不影響):
重簽名的命令如下,重複執行,直到Frameworks
下所有庫都簽名完成:
codesign -fs "你的證書" xxx.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.plist
和WeChat.app
的路徑:
codesign -fs "你的證書" --no-strict --entitlements=Entitlements.plist Payload/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.app
成xxx.ipa
,安裝