iOS越獄包 重簽名

重簽名目的:越獄包重簽名運(yùn)行到非越獄手機(jī)進(jìn)行調(diào)試。

手動(dòng)重簽名大體步驟(以墨跡天氣app 為例子):

1.刪除插件Plugins文件夾以及里面的內(nèi)容。

2.Watch 直接干掉!()(微信有這一步,其他App無)

3.對(duì) Frameworks 進(jìn)行簽名!

4.給可執(zhí)行文件執(zhí)行權(quán)限! chmod +x WeChat

5.拷貝描述文件

6.修改info.plist 的Bundle ID!

7.生成plist的權(quán)限文件

8.簽名整個(gè)APP!

$codesign -fs "iPhone Developer: xxx ?(5ZBE4C879L)"? --no-strict --entitlements=en.plist WeChat.app

9.打包 生成zip

$zip -ry WeChat.ipa Payload


一.前期準(zhǔn)備:

1.利用PP助手下載越獄的墨跡天氣的App包。

下載越獄包


查找ipa文件


2.查看越獄包的簽名信息

codesign -vv -d ?包的路徑


查詢的文件



查詢App包是否有簽名信息

3.查詢本地所有授權(quán)證書

通過終端命定:security find-identity -v -p codesigning

查看本地的證書
一般用xcode里面默認(rèn)的Signing Certificate證書對(duì)App進(jìn)行簽名就Ok


4.查看App可執(zhí)行文件是否加密


在包里面找到和包同名的可執(zhí)行文件


可執(zhí)行文件


正版的加密的


二.手動(dòng)進(jìn)行簽名

1.刪除插件Plugins文件夾以及里面的內(nèi)容


顯示包內(nèi)容


干掉這個(gè)文件


2.對(duì) Frameworks 進(jìn)行簽名!

內(nèi)容為空,無重簽內(nèi)容

如果有xxx.framework,利用終端對(duì)其進(jìn)行重簽名 進(jìn)入到對(duì)應(yīng)的Frameworks文件目錄下:

執(zhí)行:codesign -fs " 上面查詢到的本地的授權(quán)證書" xxx.framework


3.給可執(zhí)行文件執(zhí)行權(quán)限!?

chmod +x ? 可執(zhí)行文件


與包同名可執(zhí)行文件(一般都很大 幾十兆)


終端執(zhí)行:

chmod +x ?MojiWeather的文件地址

執(zhí)行后可以看到可執(zhí)行文件的描述信息變?yōu)?Unix 可執(zhí)行文件


給權(quán)限后的可執(zhí)行的文件


4.拷貝描述文件

隨便建個(gè)項(xiàng)目A,運(yùn)行一下,生成app包,之后獲取它的描述文件:


在Finder查看 之后顯示包內(nèi)容


描述文件


將描述文件copy 到MojiWeather包里


Copy成功


5.修改info.plist 的Bundle ID!

在新建的項(xiàng)目A中,就在剛剛的描述文件的同級(jí)目錄,找到info.plist 文件, 之后復(fù)制bundle Id到MojiWeather包里的info.plist中


plist文件
bundle id


6.生成plist的權(quán)限文件

查看當(dāng)前用的描述文件的權(quán)限: security cms -D -i ?embedded.mobileprovision


<dict> 標(biāo)簽內(nèi)的復(fù)制粘貼

在新建的項(xiàng)目A中創(chuàng)建plist(newPlist.plist)文件,之后Source Code 展示,將復(fù)制的代碼放到粘貼到里面,如圖:


新建的plist文件

將新建的plist 文件 放到和MojiWeather包的同級(jí)目錄。


將新建的plist 文件 放到和MojiWeather包的同級(jí)目錄。


7.簽名整個(gè)APP!

$codesign -fs "iPhone Developer: xxx ?(5ZBE4C879L)"? --no-strict --entitlements=newPlist.plist MojiWeather.app


終端命令簽名整個(gè)App


8.打包 生成zip

將MojiWeather.app 壓縮成zip的文件,之后將.zip改成ipa,獲取ipa的安裝文件。


9.安裝重簽名的App?


安裝


接下來就是見證奇跡的時(shí)刻了。。。。。。




我擦嘞,報(bào)錯(cuò)了,又失敗了。。。。。。 ?我為什么加又呢? ? ??


唉!


彩蛋: 同志們不要灰心,我用MonkeyDev 簽名成功了,說明上面的步驟哪里出問題了,持續(xù)完善中。

MonkeyDev:https://github.com/AloneMonkey/MonkeyDev


三.利用Xcode進(jìn)行簽名

剛才手動(dòng)硬整未成功,這回咱們試試借助Xcode簽名試一下。


1.替換app包

新建Xcode 工程XcodeSign,運(yùn)行一下, 在finder中打開XcodeSign.app文件。


用墨跡天氣的包替換這個(gè)文件


用墨跡天氣(MojiWeather)的包替換上圖新建的項(xiàng)目的包,替換后注意名字要改成XcodeSign,和項(xiàng)目生成的包名相同,達(dá)到欺騙Xcode的目的。

二.更改plist 文件


復(fù)制bundle id?


顯示MojiWeather包內(nèi)容,將bundle id 改成XcodeSign項(xiàng)目的bundle id


三.修改可執(zhí)行文件權(quán)限

chmod +x ? 可執(zhí)行文件 同手動(dòng)簽名第三步。


之后運(yùn)行項(xiàng)目:


期待中 小激動(dòng)


mmp:

又失敗了



四.腳本自動(dòng)化重簽

上面的兩個(gè)都失敗了,這個(gè)應(yīng)該不會(huì)讓大家失望了。

1.新建項(xiàng)目添加腳本信息


添加腳本段



清空一下


2.配置腳本信息

在項(xiàng)目的同級(jí)目錄建立個(gè)文件夾


新建的App文件夾,里面要存放重簽名的ipa 包


腳本僅供參考:因?yàn)槲矣质×恕K懔酥苯佑肕onkeyDev吧!


# ${SRCROOT} 它是工程文件所在的目錄

# 定義路徑變量 TEMP_PATH

TEMP_PATH="${SRCROOT}/Temp"

#資源文件夾?

ASSETS_PATH="${SRCROOT}/APP"

#ipa包路徑?

TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"

#新建Temp文件夾 rm 移除

rm -rf "${SRCROOT}/Temp"

mkdir -p "${SRCROOT}/Temp"

#---------------------------------------- #

1. 解壓IPA到Temp下

unzip -oqq ?"$TARGET_IPA_PATH" -d "$TEMP_PATH"

# 拿到解壓的臨時(shí)的APP的路徑?

TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")

#可以用echo打印路徑?

# echo "路徑是:$TEMP_APP_PATH"

#----------------------------------------?

#2. 將解壓出來的.app拷貝進(jìn)入工程下

# BUILT_PRODUCTS_DIR 工程生成的APP包的路徑?環(huán)境變量

# TARGET_NAME target名稱 環(huán)境變量

TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"

echo "app路徑:$TARGET_APP_PATH"

rm -rf "$TARGET_APP_PATH"

mkdir -p "$TARGET_APP_PATH"

#拷貝app文件到TARGET_APP_PATH

cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"


#----------------------------------------

#3. 刪除extension和WatchAPP. 個(gè)人證書沒法簽名Extention (微信獨(dú)有的)

rm -rf "$TARGET_APP_PATH/PlugIns"

rm -rf "$TARGET_APP_PATH/Watch"

#----------------------------------------

# 4. 更新info.plist文件 CFBundleIdentifier(bundle id)

# 設(shè)置:"Set : KEY Value" "目標(biāo)文件路徑"?

#/usr/libexec/PlistBuddy 一段可執(zhí)行文件 ?-c 執(zhí)行 (Command)

/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

#----------------------------------------

# 5. 給MachO文件上執(zhí)行權(quán)限

# 拿到MachO文件的路徑

APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`

#上可執(zhí)行權(quán)限

chmod +x "$TARGET_APP_PATH/$APP_BINARY"

#----------------------------------------

# 6. 重簽名第三方 FrameWorks

TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"

#判斷是否有這個(gè)路徑 有則重簽 否則會(huì)報(bào)路徑錯(cuò)誤

if [ -d "$TARGET_APP_FRAMEWORKS_PATH"];

then

for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*

do

#簽名

/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"

done

fi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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