iOS逆向之代码注入

准备工作

  • 已去壳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文件夹中
image.png

因为在xcode中,会自动添加配置,如下图所示

image.png

虽然现在将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,运行

image.png

假如想继续玩,可以通过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不会自动生成

image.png

image.png

image.png

常见错误
在将framework/dylib挎贝到app/Frameworks目录过程中经常会发生没有成功的现象,运行完提示image not found,可以多试几次,另外也可以直接在脚本中执行挎贝,更加有效
修改脚本示例:

image.png

PS:再次申明,本人只是出于学习和研究,请不要使用于它途~

你可能感兴趣的:(iOS逆向之代码注入)