Step 1 建立重签脚本工程
1.先新建一个空工程在自己的真机上运行起来。为了导入描述文件。
2.项目的同级目录下新建一个App文件夹,里面放入要重签名的ipa包。
3.在项目中新建一个脚本,输入如下的命令。
第一行为了,给AppReSign.sh赋值可执行的权限。
4.在终端中cd到项目上级目录下,touch 一个 AppReSign.sh文件,里面放入如下的脚本。commond+r运行即可脚本重签成功。
# ${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\<`
#上可执行权限
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/FYHook.framework/FYHook"
新建工程,取名InjectFrameWork,最后得到如下工程:
Step 2 创建Framework文件
1.接下来我们创建一个framework
新建一个工程InjectFrameWork,新建一个Framework,取名FYHook
在新建出来的FYHook文件夹中新建InjectCode(继承NSObject)对象,并且新建代码:
+ (void)load {
NSLog(@"来了,老弟😁");
}
复制代码
禁止脚本文件,
common
+ R
运行代码,会发现来了,老弟😁
被输出,证明用这种方法新建的Framework能够直接运行在我们的项目中。Step 3 修改源文件的MachO文件
1.使能脚本文件,common
+ R
运行代码,运行成功后发现,控制台并未输出来了,老弟😁
,且通过MatchOView查看微信MatchO 文件是发现Load Commands 中并未加载我们的FYHook。这说明我们直接导入的FYHook. framework 没能和微信MatchO 关联或者说没能被写入。
所以我们使用工具yololib来对微信的MatchO文件进行写入。
将下载下来的yololib.zip解压后,编译工程,将得到yololib(Unix可执行文件),放在目录/usr/local/bin下,这样我们在终端中就可以使用yololib命令了
2.去除脚本文件AppReSign.sh中,#注入下,yololib前的#。
common
+ R
运行代码,会发现微信跑起来了,我们的来了,老弟😁
被输出了!
文中所需要用到的工具和文件:
越狱版本微信7.0.2 提取码: 2w87
MachOView 提取码: n3hy
yololib 提取码:e8qs
class-dump 提取码:v5ku
对微信的MatchO文件写入,命令如下:
// yololib 「要写入的MachO路径」 「framework中的可执行文件路径」
yololib WeChat Frameworks/FYHook.framework/FYHook
插入成功会有如下提示
用MatchOView 查看Load Commands 中是否加载FYHook,如图成功加载
iOS逆向(4)-代码注入,非越狱窃取微信密码
iOS逆向之 framework 注入
mach-o文件分析工具 MachOview探究
难以接受MachOView(烂苹果)打开文件的方式?或许你该试试这几种方法!
网友评论