iOS逆向----一键重签名加注入动态库(非越狱手机调试别人的APP)

首先感谢逻辑学院的Hank老师,并附送腾讯课堂传送门

要执行这个脚本,首先要准备几样东西
首先是yololib,要确保你的Mac安装了yololib,下载好工程,编译运行,然后将工程目录下Products文件夹中的可执行文件yololib(右键Show in finder)拷贝到Mac的/usr/local/bin文件夹里(老司机都知道这个文件是干啥的),这样就可以直接在终端中使用yololib命令了。。不然执行脚本会报错。

然后新建一个appSign.sh脚本文件(新建文本文档,保存之后直接改后缀名,名字随便取,只要下面步骤与之对应就行)。
直接复制以下代码:

# ${SRCROOT} 它是工程文件所在的目录
TEMP_PATH="${SRCROOT}/Temp"
#资源文件夹,我们提前在工程目录下新建一个APP文件夹,里面放ipa包
ASSETS_PATH="${SRCROOT}/APP"
#目标ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
#清空Temp文件夹
rm -rf "${SRCROOT}/Temp"
mkdir -p "${SRCROOT}/Temp"

#----------------------------------------
# 1. 解压IPA到Temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解压的临时的APP的路径
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
# echo "路径是:$TEMP_APP_PATH"

#----------------------------------------
# 2. 将解压出来的.app拷贝进入工程下
# BUILT_PRODUCTS_DIR 工程生成的APP包的路径
# TARGET_NAME target名称
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "app路径:$TARGET_APP_PATH"

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

#----------------------------------------
# 3. 删除extension和WatchAPP.个人证书没法签名Extention
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"

#----------------------------------------
# 4. 更新info.plist文件 CFBundleIdentifier
#  设置:"Set : KEY Value" "目标文件路径"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

#----------------------------------------
# 5. 给MachO文件上执行权限
# 拿到MachO文件的路径
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
echo "????APP_BINARY:$APP_BINARY"
#上可执行权限
chmod +x "$TARGET_APP_PATH/$APP_BINARY"

#----------------------------------------
# 6. 重签名第三方 FrameWorks
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
then
count="ls | wc -w"
#这里我自己改进了一下,原来Hank老师提供的脚本是不会检查framework文件夹是否为空的,这里做了检查,运行脚本的时候就不需要提前改东西了。
if [count>0];
then
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi
fi


#注入自己的代码。如果只是重签名的话,把这两行注释掉,如果要注入代码,那么这里要改一下
#INJECT_FRAMEWORK="Frameworks/youssefHook.framework/youssefHook";
#工具注入
#yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK"

注意看脚本倒数第二行,要注意Frameworks/youssefHook.framework/youssefHook这句话,如果你想注入自己的动态库,那么这里要改改,改成你自己动态库的名字。

如何执行这个脚本呢?
xcode新建一个工程,就是普通的iOS工程。将脚本文件复制到.xcodeproj文件的同级目录下,然后在这里新建一个名字为APP的文件夹,并将已经脱壳的IPA包放到APP文件夹里。
然后进入Build Phases中,添加Run Script路径:
iOS逆向----一键重签名加注入动态库(非越狱手机调试别人的APP)

选好证书,接上手机(无需越狱),然后直接运行就好了。。

一定要真机运行