准备工作
- 已去壳ipa,重签运行,可参照iOS逆向之砸壳与重签
- 下载yololib,往MachO文件的Load_Commonds中注入一个
LC_LOAD_DYLIB
- 下载class-dump,并编译,将编译好的二进制文件放到电脑
/usr/bin
,若没有权限,放置其他目录请配置~/.base_profile
环境,如放置目录/Users/somebody/mybin
中,那么profile中添加
export PATH=/Users/somebody/mybin:$PATH
或定义一个别名
alias class-dump=/Users/somebody/mybin
代码注入一:使用Framework
- 在工程TARGETS点击
+
添加一个Framework
,命名随意,如CPYHook
-
build
会自动将生成的framework存放在app文件的Frameworks
文件夹中
因为在xcode中,会自动添加配置,如下图所示
虽然现在将framework放入到app包内,但是运行时并没有加载它,我们知道app在启动后会根据Load Commonds中的命令执行,所有动态库的加载都在这里,接下来就是通过yololib
将我们自己创建的这个framework在Load Commonds中插入一条LC_LOAD_DYLD
,使用方式为在RunScript脚本最后添加命令
yololib "$BUILT_PRODUCTS_DIR/D_WeChat.app/WeChat" "Frameworks/CPYHook.framework/CPYHook"
请注意我的app包名与里面的可执行文件不一致,是替换过的,千万不要写错了,执行完之后查看WeChat可执行文件,可以使用MatchOView,或者直接使用终端命令otool。
好了,下面可以试一试,在Framework中随便添加一个分类+(void)load
,运行
假如想继续玩,可以通过MethodSwizzle对它原来的方法进行hook做一些事情,在debug分析过程中需要先将它的头文件导出来,使用class-dump
,终端命令
class-dump -H MachO文件路径 -o 导出的头文件存放目录
代码注入二:使用dylib
这种方式其实原理和framework
是一样的,只是需要手动修改一些配置,这里只说几个需要注意的地方,具体可参数后面的截图
1.dylib是mac使用的,创建之后需要将dylib的
build Settings
里面的Base SDK改为iOS
2.Signing改为iOS
3.手动添加Copy Files选项,这个xcode不会自动生成
常见错误
在将framework/dylib挎贝到app/Frameworks目录过程中经常会发生没有成功的现象,运行完提示image not found
,可以多试几次,另外也可以直接在脚本中执行挎贝,更加有效
修改脚本示例:
PS:再次申明,本人只是出于学习和研究,请不要使用于它途~