iOS 重簽名(Xcode)

本文介紹, 借助 xcode 對越獄 app 進(jìn)行重簽名! 相比手動簽名, 縮減了一部分工作!

    1. 將破殼 .ipa文件解壓, 然后將.app文件 copy 到制定目錄下, 備用.(本文采用微信測試)
    1. 刪除 .app中擴展文件
      本包中有 watch, plugin兩個插件文件夾, 直接將文件夾移除!
    1. .app文件中的 framework 進(jìn)行手動重簽名
      wx.png
    1. 利用Xcode新建項目, 預(yù)先在手機上運行一次, 保證新建項目可用.
    • 4.1 修改WeChat.appInfo.plist文件的Bundle identifier與新建工程中Bundle identifier一致!
    • 4.2 將新建工程中的 .app文件 替換為準(zhǔn)備好的 WeChat.app.
    1. 運行 xcode, 將重簽名的app 安裝到手機上, 現(xiàn)在就可以喝啤酒了!
      ??????????

相比上篇 手動簽名 , 這個就簡單多了!

plus:
還可以使用 shell 腳本重簽 app!

  • 在 xcode 中build phase 添加腳本.
# ${SRCROOT} 為工程文件所在的目錄
 TEMP_PATH="${SRCROOT}/Temp"
#資源文件夾,放三方APP的
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路徑
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"

#新建Temp文件夾
  rm -rf "$TEMP_PATH"
  mkdir -p "$TEMP_PATH"

# 1. 解壓IPA 到Temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解壓的臨時APP的路徑
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
# 這里顯示打印一下 TEMP_APP_PATH變量
echo "TEMP_APP_PATH: $TEMP_APP_PATH"
# -------------------------------------
# 2. 把解壓出來的.app拷貝進(jìn)去
#BUILT_PRODUCTS_DIR 工程生成的APP包路徑
#TARGET_NAME target名稱
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "TARGET_APP_PATH: $TARGET_APP_PATH"

rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH/"

# -------------------------------------
# 3. 為了是重簽過程簡化,移走extension和watchAPP. 此外個人免費的證書沒辦法簽extension

echo "Removing AppExtensions"
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"

# -------------------------------------
# 4. 更新 Info.plist 里的BundleId
#  設(shè)置 "Set :KEY Value" "目標(biāo)文件路徑.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

# 5.給可執(zhí)行文件上權(quán)限
#添加ipa二進(jìn)制的執(zhí)行權(quán)限,否則xcode會告知無法運行
#這個操作是要找到第三方app包里的可執(zhí)行文件名稱,因為info.plist的     'Executable file' key對應(yīng)的是可執(zhí)行文件的名稱
#我們grep 一下,然后取最后一行, 然后以cut 命令分割,取出想要的關(guān)鍵信息。存到APP_BINARY變量里
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`

#這個為二進(jìn)制文件加上可執(zhí)行權(quán)限 +X
chmod +x "$TARGET_APP_PATH/$APP_BINARY"

# -------------------------------------
# 6. 重簽第三方app Frameworks下已存在的動態(tài)庫
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
then
#遍歷出所有動態(tài)庫的路徑
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
echo "????????????FRAMEWORK : $FRAMEWORK"
#簽名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY"     "$FRAMEWORK"
done
fi

# ---------------------------------------------------
# 7. 注入我們編寫的動態(tài)庫
echo "開始注入"
# 需要注入的動態(tài)庫的路徑  這個路徑我就寫死了!
#INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libHankHook.dylib"

## 通過工具實現(xiàn)注入
#yololib "$TARGET_APP_PATH/$APP_BINARY"     "$INJECT_FRAMEWORK_RELATIVE_PATH"
echo "注入完成"
  • 將破殼的.ipacopy 到工程的 App 目錄下, 選擇真機直接運行.??????????
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 靜態(tài)庫與動態(tài)庫的區(qū)別 首先來看什么是庫,庫(Library)說白了就是一段編譯好的二進(jìn)制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 12,338評論 3 42
  • 引言 關(guān)于開發(fā)證書配置(Certificates & Identifiers & Provisioning Pro...
    奮斗的蝸牛閱讀 7,844評論 2 20
  • 任嘯起天戈 矗灘梗地卓 自立無憑 扶搖九天 莫使空悲度往矣! 自古兩全難! 風(fēng)中塔 誰人豈命悟生溺! 遙戲虛他望?...
    狼眼閱讀 301評論 0 2
  • 今天的晨讀材料主題,彰顯自信的習(xí)慣,看到這個主題呢,我覺得我就非常需要學(xué)習(xí)如何培養(yǎng)自信。 我的性格呢是比較內(nèi)向型的...
    小鵬strive閱讀 183評論 0 0
  • 一句話掛在前面就是:村口的發(fā)廊倒閉了。 昨天出村口理發(fā)的時候,發(fā)現(xiàn)它居然倒閉了,一群裝修工作正在密鑼緊鼓的裝修著,...
    7日閱讀 10,054評論 1 9

友情鏈接更多精彩內(nèi)容