FrameWork注入、Dylib注入
Run Script下
/Users/qionglinfu/QLshell/XcodeApp.sh
//Common+B报错
.../XcodeApp.sh: Permission denied
//权限问题
$ chmod +x XcodeApp.sh
注入
动态注入:程序运行过程中,通过底层函数注入 静态注入:对可执行文件注入 都是改变了二进制
FrameWork注入
- 新建target
- 点击target下的+,选择iOS/Framework&Library/Cocoa Touch Framework
- Framework下新建类
- .m文件重写load方法
- 添加依赖
- 选中Build Phases下的+,
- 选择New Copy Files Phsse
- 打开Copy Files
- Destination选择Framework,把刚刚新建的framework添加进去
- Xcode会打包到APP包里面,frameworks文件夹下,代码进去了,执行的时候根本没有调用我们的代码。只要在项目里面引入了第三方的库,那么我们可执行文件生成的MachO文件的LoadCommond段就会有一个标记,让dyld程序知道这个MachO文件依赖哪些库。
- yololib可以将我们的动态库的路径写入machO里面
-
把文件放在/usr/local/bin下面
-
帮助修改MachO文件的二进制
//yololib MachO文件 相对于MachO文件动态库位置 $ yololib WeChat Frameworks/QLHookFrameWork.framework/QLHookFrameWork 2018-09-03 16:10:53.135 yololib[93889:5356683] dylib path @executable_path/Frameworks/QLHookFrameWork.framework/QLHookFrameWork 2018-09-03 16:10:53.136 yololib[93889:5356683] dylib path @executable_path/Frameworks/QLHookFrameWork.framework/QLHookFrameWork Reading binary: WeChat 2018-09-03 16:10:53.143 yololib[93889:5356683] FAT binary! 2018-09-03 16:10:53.143 yololib[93889:5356683] Injecting to arch 9 2018-09-03 16:10:53.144 yololib[93889:5356683] Patching mach_header.. 2018-09-03 16:10:53.144 yololib[93889:5356683] Attaching dylib.. 2018-09-03 16:10:53.145 yololib[93889:5356683] Injecting to arch 0 2018-09-03 16:10:53.145 yololib[93889:5356683] 64bit arch wow 2018-09-03 16:10:53.151 yololib[93889:5356683] dylib size wow 96 2018-09-03 16:10:53.151 yololib[93889:5356683] mach.ncmds 85 2018-09-03 16:10:53.151 yololib[93889:5356683] mach.ncmds 86 2018-09-03 16:10:53.151 yololib[93889:5356683] Patching mach_header.. 2018-09-03 16:10:53.151 yololib[93889:5356683] Attaching dylib.. 2018-09-03 16:10:53.152 yololib[93889:5356683] size 93 2018-09-03 16:10:53.152 yololib[93889:5356683] complete!
-
- 新生成的MachO文件替换Products下App里面的MachO文件
- 直接Com+b无效。MachO被替换!!
- 替换项目下的APP文件夹内的MachO文件
dyld注入
- 新建target
- 点击target下的+,选择macOS/Framework&Library/Library
- 添加依赖
-
选中Build Phases下的+,
-
选择New Copy Files Phsse
-
打开Copy Files
-
Destination选择Framework,把刚刚新建的dylib添加进去
-
com+b报错
error: /Users/..../Products/Debug-iphoneos/libHook.dylib: No such file or directory 它在Debug-iphoneos下找的动态库。而动态库生成的位置在Debug //解决1 copy过去 //解决2 改变路径.Build Setting/搜索Per-/ 产品编译路径Per-configuration Build Products Path 动态库编译路径Per-configuration intermediate Build Products Path 让两者相同即可
-
环境变量在不同的target下不一样,直接改成
$(BUILD_DIR)/Debug-iphoneos
-
- 简单姿势
- 新建dylib/Build Setting/Architectures/Base SDK直接更改成iOS
- 搜索sign/Signning/Code Signing Identity更改成iOS Developer
MethodSwizzle
- Class:里面有一张表
- IMP:方法实现implementation
- SEL:字符串Char*
- 调用方法时,给对象发消息。找到类。查找表,通过SEL找到IMP,IMP是函数指针,地址值。汇编里面函数第一行汇编地址
- Exchange:交换IMP
小结
利用动态库注入 FrameWork、Dylib 注入进APP(工程和动态库有关联关系) 修改MachO文件的LoadCommands 在注入的动态库中,写上自想要的代码