1.創(chuàng)建項目
1.1 創(chuàng)建都會就不說了
1.2 在項目目錄中添加越獄ipa
添加ipa目錄
添加ipa目錄
2.添加腳本
(作用--給app重簽名)
腳本添加位置 (可以將下面腳本直接拷貝至此處歹垫,也可以做成shell腳本)腳本位置截圖
使用shell腳本時需要注意由于系統(tǒng)文件等操作權(quán)限需要先對腳本賦予權(quán)限否則會報錯(執(zhí)行被拒絕)筑悴,命令行如下:
chmod +x 腳本
腳本如下:
# ${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拷貝進去
#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
# 設置 "Set :KEY Value" "目標文件路徑.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
# 5.給可執(zhí)行文件上權(quán)限
#添加ipa二進制的執(zhí)行權(quán)限,否則xcode會告知無法運行
#這個操作是要找到第三方app包里的可執(zhí)行文件名稱统舀,因為info.plist的 'Executable file' key對應的是可執(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\<`
#這個為二進制文件加上可執(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)庫 使用于MacOS 的動態(tài)庫蔓搞,iOS下的不知道沒試
#echo "開始注入"
## 需要注入的動態(tài)庫的路徑 這個路徑我就寫死了!
#INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libHankHook.dylib"
##
### 通過工具實現(xiàn)注入
#yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"
#echo "注入完成"
3.創(chuàng)建自己的動態(tài)庫注入到三方程序
3.1 創(chuàng)建動態(tài)庫
直接上圖3.2 動態(tài)庫添加
完成后可以在動態(tài)庫目錄添加自己的文件在自己文件中增加個+ (void)load { nslog(@“單獨的單獨的多多多”) }
方便之后查看動態(tài)庫注入是否成功
打開終端中執(zhí)行下面命令行何缓,進行動態(tài)庫注入
- cd desktop
- yololib WeChat Frameworks/YWFrameWork.framework/YWFrameWork
yololib下載 鏈接:https://pan.baidu.com/s/14p64UunGqnFj99h7GR9foA 密碼:qt0y
下載后直接拷貝到 usr/local/bin 就可以了
完成以上操作后進入項目根目錄APP文件夾下
將除Payload文件夾外文件刪掉后打包肢础, 命令行 : zip -ry WeChat.ipa Payload
打包后將payload文件夾刪了就行了
4. 運行到你手機看看
看看是不是打印了你的log即可