iOS脚本重签名并注入framework

1.新建一个APP工程,先在手机上直接运行一次,信任描述文件。这里我用的是自己账号的免费证书。

2.准备好脚本(文章最后有脚本全文)跟砸过壳的ipa包,这里用的是微信的7.0.8的包。然后为了跟脚本对应上,在工程文件下,新建如下文件夹并把脚本也copy一份进来(大小写需要跟脚本严格对应):

image.png

3.在工程下新建一个framework(用下图的加号创建)
image.png

framework里新创建个obj对象,并实现+load方法。然后随便打印点什么

@implementation hookObj
+ (void)load {
    NSLog(@"进来了");
}
@end

4.把ipa包拖到刚才创建的APP文件夹下。

5.在如下位置创建脚本模块(路径为:build Pahses -> +-> New Run Script

image.png

注意(非常重要):Run Script模块刚创建的时候,是在Embed Frameworks模块下方的,你需要手动的把Run Script模块拖到Embed Frameworks上方,就如上图所示的位置。否则脚本执行会在编译之后才执行。导致每次运行后,.app里都没有hookTest.framework。因为编译虽然把hookTest.framework放到了.app里,但是脚本执行后,又把.app清空了。

脚本写法为:
image.png

注意:这里添加脚本的时候,别添加到framework里去了。要添加到自己的工程里。

6.真机运行。看得到,我们的framework里的nslog打印出来了,说明注入成功。
image.png

FQ:如果遇到couldn’t be opened because you don’t have permission to view it。可以尝试清理缓存,如果还不行,就把工程删了,上述步骤从新来一遍。

备注:
1.①关于yololibyololib可以在github上下载,下载下来后,把名为yololib的可执行文件,放到/usr/local/bin文件夹下,就可以使用了。②命令yololib WeChat Frameworks/Hankhook.framework/hookTest(第一个参数是你要写入的目标文件,第二个参数是你想写入的文件,因为.app里WeChat可执行文件与Frameworks文件夹同级,所以直接这样写就行了)。
2.关于压缩文件成ipa:命令为zip -ry WeChat.ipa Payload,其中的WeChat为你要目标文件的名字。然后把压缩后的ipa文件放在之前创建的APP文件夹下。

脚本如下:(记得最后一行注入的时候,framework名要根据自己实际创建的修改哦)

# ${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文件的路径WeChat
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上可执行权限
chmod +x "$TARGET_APP_PATH/$APP_BINARY"



#----------------------------------------
# 6. 重签名第三方 FrameWorks
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
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

#注入
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/hookTest.framework/hookTest"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上一篇文章讲述了手动重签名的整个过程,比较繁琐,而且容易出错,这篇文章来探讨一下shell重签名的实现。 一、脚本...
    正_文阅读 4,553评论 0 2
  • 1.简约与深细相依 古人宋玉曾用“增之一分则太长,减之一分则太短”,来形容美女身量的恰到好处。《天净沙秋思》文字之...
    冰雨9527阅读 4,381评论 0 2
  • 1.创建项目 1.1 创建都会就不说了 1.2 在项目目录中添加越狱ipa添加ipa目录 2.添加脚本 (作用--...
    跃文阅读 4,839评论 0 1
  • 在上一篇文章中,在上一篇文章中,我们讲了iOS应用重签名技术,同时我们也把微信的越狱ipa包安装到了我们的手机上了...
    蚂蚁也疯狂阅读 2,738评论 0 0
  • 有了应用重签名的基础,已经能把其他App(比如WeChat)安装到自己的设备上了。 既然都安装上了,那能不能搞点事...
    有梦想的程序员阅读 2,761评论 0 1