-
简介
- 代码注入:静态注入、动态注入 动态库dylib
- 其实是修改MacO文件,展开 Load Commands
- 在Frameworks 里添加一个动态库,Hook.Frameworks,加入MacO文件中
- yololib库:注入 MachO 文件,修改了此文件,签名被破坏了,Xcode 重新签名整个 App
// 请先看以下两篇文章
iOS逆向-RSA的使用-证书签名、代码签名(手动签名、脚本自动签名 《一》)
iOS逆向-RSA的使用:代码签名(手动签名、脚本自动签名 《二》)
-
代码注入的过程
- 准备工作:
1.1新建一个工程;在工程里新建两个文件夹APP、Temp
1.2. 把 微信-6.6.5(越狱应用).ipa包 --> 解压(打开方式:用归档解压)。
将微信Payload文件夹放入新建的工程中的APP文件夹里面;
在Build Phases里面添加New Run Script phase,将自动化脚本路径添加进去;
Shell脚本路径
/Users/zhangmeng/ZMshell/XcodeApp.sh新建一个Target(Cocoa Touch Framework):hankHookFramework ,在此目录下新建一个类库:hankHook
并添加 + (void)load; 方法
@implementation hankHook
+ (void)load {
NSLog(@"🍺🍺🍺🍺🍺🍺");
}
@end
- 将工程target和framework target关联
添加 New Copy Files Phasa,选择Frameworks,添加FrameworkLib
- 编译以下,查看目录:项目/Products/ZM_自动化签名.app --> 显示包内容里的(WeChat MacO文件)
// yololib库: 作用是将动态库写入到MacO文件,代码注入(代码在动态库中)
(使用前,先把此库放入此路径:Machintosh HD/bin
或此路径下: Machintosh HD/usr/local/bin !!以后调用比较方便)
// 使用 yololib 把 动态库 注入到可执行文件内 (WeChat MacO文件)
$ yololib WeChat Frameworks/hankHookFramework.framework/hankHookFramework
终端命令后:(WeChat MacO文件) 已经改变
- 对Payload文件内的WeChat库,显示包内容,使用 改变的(WeChat MacO文件),替换此库内 WeChat可执行文件
然后对Payload文件重新打包成ipa
$zip -ry WeChat.ipa Payload
结果:会从 图片1 到 --> 图片二
- 最后编译运行,会打印:🍺🍺🍺🍺🍺🍺
//--------------------Dylib注入-----------------
1. 准备工作:
1.1新建一个工程;在工程里新建两个文件夹APP、Temp
1.2. 把 微信-6.6.5(越狱应用).ipa包 --> 解压(打开方式:用归档解压)。
将微信Payload文件夹放入新建的工程中的APP文件夹里面;
2. 在Build Phases里面添加New Run Script phase,将自动化脚本路径添加进去;
Shell脚本路径: /Users/zhangmeng/ZMshell/XcodeApp.sh
3. 添加Dylib库:新建一个Target(macOS --> Library):ZMHook ,同时会产生一个类库:ZMHook
a、这个是在Mac里面使用的动态库
b、证书也是Mac Developer证书
c、在Debug模式下Build后,Dylib动态库的路径和App包放的路径不一样,不在Debug-iphoneos下
d、添加代码
#import "ZMHook.h"
@implementation ZMHook
+ (void)load
{
NSLog(@"😊😊😊😊😊😊!!");
}
@end
4、新建的工程和Dylib库进行关联
关联的意义就是为了后续在工程Build的时候将Dylib库添加到app里面去。
5、修改Dylib动态库的路径
- 5.1方式一:直接把 libZMHook 拷贝到 Debug-iphoneos文件夹内
5.1.1 编译
- 5.2 方式二:修改Build Setting -> Per - configuration Intermediate Build Files Path
5.2.1 ZM_Dylib注入 工程的路径
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
5.2.2 ZMHook 动态库的路径
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
`// 修改Debug路径`
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) --> $(BUILD_DIR)/Debug-iphoneos
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) --> $(BUILD_DIR)/Debug
5.2.3 编译
- 5.3 方式三:
5.3.1 修改Dylib库的架构配置(Base SDK改成iOS配置即可)
6、将Dylib注入到MachO文件
编辑自己的脚本文件,Shell脚本:XcodeApp.sh
# ---------------------------------------------------
# 7. 注入我们编写的动态库
echo "开始注入"
# 需要注入的动态库的路径 这个路径我就写死了!
INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libHankHook.dylib"
#
## 通过工具实现注入 MachO文件
yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"
echo "注入完成"
7、在Dylib中写注入代码,并编译运行
运行成功:打印😊😊😊😊😊😊!!
总结
- 利用动态库注入(Framework库、Dylib库)
- 注入进APP(工程和动态库有关联关系)
- 修改MachO文件的Load Commands
- 在注入的动态库中,写上自己想要注入的代码!