IOS逆向-Hook微信

一.所需要的工具。

1.iOSOpenDev,安装流程以及安装失败的解决方案。

2.越狱手机中才会用到的CyduaSubstrate库,libsubstrate.dylib。

3.动态库注入工具,optool。

4.Reveal,对越狱手机上APP的页面进行分析(安装和配置可以参考 "iOS应用逆向工程 第二版")。

5.Class-dump下载以及安装步骤。

二.具体 步骤。

1.准备好已经砸壳的微信包。下载libsubstrate.dylib,并放在同一文件夹下备用。

IOS逆向-Hook微信_第1张图片
图1.准备

2.通过Reveal分析要HooK的页面。以登录界面为例,配置好Reveal并连接上越狱设备,打开微信。

IOS逆向-Hook微信_第2张图片
图2.Reveal

界面的说明:

点击不同的部位可以看到一个页面的组成,控制器视图等等,这里需要找到我们要hook的视图控制器,也就是图中显示的类名,不同的微信版本可能不同,这点在后面的步骤中要注意,拷贝类名备用。

3.编写CaptionHook工程,

IOS逆向-Hook微信_第3张图片
图3.新建CaptionHook工程

CaptionHook提供了强大的宏定义可以直接使用,Command + 点击可以查看宏定义的用法,一些常规的用法解释如下:

1.使用 CHDeclareClass() 声明想要hook的class

2.在构造函数中用 CHLoadClass() 或 CHLoadLateClass() 加载声明过的class

3.使用CHMethod() hook相应的method

4.在CHMethod()中可以使用CHSuper()来调用原函数

5.在构造函数中使用CHClassHook()来注册将要hook的method

IOS逆向-Hook微信_第4张图片
图4.CaptionHook工程的详细

CustomeButton是我自定义的已经绑定了事件的Button,用来弹出UIAlertController。

代码中的一些参数分析:

先通过class-dump对已经砸壳的微信的.app文件进行操作,使用 "class-dump -H xx.app -o 指定路径",得到所有的头文件。

IOS逆向-Hook微信_第5张图片
图5.class-dump得到的头文件


WCAccountFillPhoneViewController是6.5.8微信版本的登录控制器的ClassName,此处应当用自己的,使用该名称检索到对应的头文件。

可以发现里面有viewDidLoad方法,因此图4中的方法名的参数就应当填写viewDidLoad,在这里面的一些操作就会被被hook到WCAccountFillPhoneViewController的viewDidLoad方法。

4.编译工程,在工程的Products文件夹中找到.dylib文件,放入.app包里面。拷贝libsubstrate.dylib.app目录下

5.修改微信二进制文件加载Load Commands段.

optool install -c load -p "@executable_path/xxx.dylib" -t WeChat.app/WeChat

IOS逆向-Hook微信_第6张图片
图6.加载Load Commands段

三.重签名打包

参考之前的文章中的签名、打包方式即可。最后展示成果如下:


IOS逆向-Hook微信_第7张图片

你可能感兴趣的:(IOS逆向-Hook微信)