美文网首页
iOS脚本重签名和代码注入

iOS脚本重签名和代码注入

作者: 正_文 | 来源:发表于2020-08-20 15:46 被阅读0次

上一篇文章讲述了手动重签名的整个过程,比较繁琐,而且容易出错,这篇文章来探讨一下shell重签名的实现。

一、脚本重签名

  1. 依然是新建工程,然后安装到手机上。
  2. 在工程根目录下新建APP的文件夹,和shell脚本对应即可。将砸壳的ipa包放入APP文件夹内。
  3. 把脚本放在根目录下。脚本如下:
# ${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

  1. 此时项目目录结构如下:


    目录.png
  2. 在项目 build Phase -> Run Script 模块添加shell。可以直接将shell代码复制过去;也可以添加一个命令:./app.sh

    image.png

运行,不出意外项目将完美安装到你的手机。

如果安装被拒绝,可以尝试命令:chmod +x app.sh

二、Framework代码注入

一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用 framework 或者 Dylib 等三方库的方式注入。
当然,也可以直接修改 Mach-O 文件。对于 iOS 系统应用来说,需要通过 dyld 去读取 Mach-O,从而决定文件包需要加载哪些库,如何去加载等等。
因此我们可以修改 Mach-O 文件的 Load Commands ( 加载指令,就是告诉 dyld 如何去加载 ),往其中添加一条指令让其去加载我们自己生成的 framework

2.1 构建Framework

利用上面重签成功的工程,新建一个framework,新建一个类MMHook,并添加代码。


MMHook.png

编译,显示包内容,查看 Frameworks 文件夹 , 可以看到我们的 framework 已经放进去了。

MMHook.png

但还不行,微信的 Mach-O 加载指令 load Commands 里并不会去加载我的这个库,他们并没有关联起来。

2.2 修改Mach-O

修改Mach-O,添加指令,需要用到工具yololib
yololib 复制到 user/local/bin 中,这样环境变量就可以在任意路径下使用了。

  1. 进入项目根目录,找到APP文件下的ipa包,解压,进入到Mach-O路径下
  2. 执行命令:yololib WeChat Frameworks/MMHook.framework/MMHook
  3. 重新压缩 zip -ry WeChat.ipa Payload,改为ipa,然后将ipa包放到APP目录下。注意:官方的ipa和我们自己打的ipa有差别,这里压缩的是Payload文件夹,不是WeChat文件夹。
    yololib.png

此时可以打开Mach-O查看一下指令是否添加成功:

load_command.png

运行:

hook.png

2.3 shell注入

我们把yololib配置好之后,可以通过shell实现注入,直接在之前的shell最后加一行指令即可:

#framework注入
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/MMHook.framework/MMHook"
#dylib注入,libiary库
#yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libMMHookDylib.dylib"

相关文章

  • iOS脚本重签名和代码注入

    上一篇文章讲述了手动重签名的整个过程,比较繁琐,而且容易出错,这篇文章来探讨一下shell重签名的实现。 一、脚本...

  • iOS逆向-RSA的使用:代码签名(手动签名、脚本自动签名 《二

    请先看下面?的文章 iOS逆向-RSA的使用-证书签名、代码签名(手动签名、脚本自动签名 《一》) 脚本重签名 ...

  • iOS自动打包脚本

    iOS自动打包脚本 iOS自动打包脚本,并实现图片素材、文字资源、部分代码的替换和重签名,基于python实现。 ...

  • shell脚本实现iOS包重签名及代码注入

    当我们要逆向第三方应用时,首先就是要将应用安装在我们的手机上,然后进行hook分析,找到对应的方法调用,进行代码注...

  • iOS脚本重签名并注入framework

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

  • iOS逆向工程(9)利用 Xcode 重签名应用

    概述 之前文章介绍了 iOS 的签名机制 和 iOS 如何手动重签名,此篇文章主要讲下如何利用脚本 和 Xcod...

  • iOS逆向-12:代码注入

    上一篇我们利用终端,xcode以及脚本完成了应用重签名,接下来我们看看如何将代码注入。 动态库注入 之前构建工程的...

  • 脚本模式重签名打包 ipa

    脚本重签名,命令使用的是 xcode 自身打包 下载脚本iOS_resign_scripts 把脚本文件和我们要重...

  • 11 - 代码注入

    前面文章演示了如何对一个App进行重签名,本章将演示对重签名之后的App进行代码注入。 简介 代码注入是什么?答:...

  • iOS代码注入

    一、代码注入 重签名app后自己的壳工程的代码就被替换掉了(替换了整个MachO),并不会执行。iOS系统是通过d...

网友评论

      本文标题:iOS脚本重签名和代码注入

      本文链接:https://www.haomeiwen.com/subject/supdjktx.html