这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战ios
本文主要讲解代码注入的两种方式:FrameWork注入、dylib注入
markdown
通常修改原始的程序,是利用代码注入
的方式,注入代码就会选择利用FrameWork
或者Dylib
等三方库的方式注入。app
查看Mach-O文件ide
在了解注入前,咱们首先须要了解ipa包中的静态库是如何注入的,有如下两种方式查看Mach-O可执行文件函数
otool -l WeChat
Mach-O
文件中主要看load Commands
(即加载命令集),从这里能够看出动态库的加载等。其中大部分格式为:LC_LOAD_DYLIB(xxx)
,是在指定路径下加载xxx,以下所示 工具
因此,综上所述,若是须要注入代码,是以动态库的形式注入
oop
第一步:动态库进入App包,即Framework注入post
Framework
,命名为 CJLHook
(建立位置:target -> + -> ios -> Framework)inject
文件,在生命周期方法load函数中写注入代码+(void)load{
NSLog(@"CJLHook ------ 注入成功");
}
复制代码
CJLHook
,可是此时并不会执行其中的load函数 load不会执行的缘由:查看此时的Mach-O文件中的Load Commands,并无发现
CJLHook
,因此此时是不会执行其中的load函数的ui
第二步:yololib手动注入,修改Mach-O字段
yololib
工具修改Mach-O字段:./yololib WeChat Frameworks/CJLHook.framework/CJLHook
(注:须要将WeChat可执行文件拷贝过来) - 第一个参数:目标可执行文件
- 第二个参数:CJLHook的路径
复制代码
六、从新打包,过程以下:
解压微信-7.0.8.ipa
替换Payload中的可执行文件为上一步的Mach-O文件
从新打包:zip -ry WeChat.ipa Payload/
而后替换ipa包
七、运行程序,能够看到成功执行了 CJLHook中的load
准备工做:建立一个空工程,并进行WeChat的重签名,能够参考这篇文章iOS逆向 10:应用重签名(下)
dylib注入
Library
,命名为CJLHook
Build Setting
中配置CJLHook
1)Base SDK
改成 ios
2)Code Signing identify
改成 iOS Developer
- 1)、Build Phase -> + ->
New Copy File...
- 2)、而后选择拷贝到的目标文件:Frameworks
- 3)、添加dylib
重写load
函数#import "CJLHook.h"
@implementation CJLHook
+(void)load{
NSLog(@"CJLHook ---- 注入成功");
}
@end
复制代码
yololib
拷贝至根目录,在appSign.sh
末尾添加如下命令#注入
./yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libCJLHook.dylib"
复制代码
代码注入:通常会选择利用FrameWork
或者Dylib
等三方库的方式注入
Framwork手动注入
流程:
一、经过Xcode新建Framwork,将库安装进入APP包
二、经过yololib注入Framwork库路径。命令:$yololib(空格)MachO文件路径(空格)库路径
三、全部的Framwork加载都是由DYLD加载
进入内存被执行的
四、注入成功的库路径会写入到MachO文件的LC_LOAD_DYLIB
字段中
Dylib注入
流程:
一、经过Xcode新建Dylib库
(注意:Dylib属于MacOS因此须要修改相关属性配置)
二、添加Target依赖
,让Xcode将自定义Dylib文件打包进入APP包。
三、利用yololib
进行注入。