博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS逆向之旅(进阶篇) — HOOK(Method Swizzling)
阅读量:7091 次
发布时间:2019-06-28

本文共 1787 字,大约阅读时间需要 5 分钟。

Method Swizzling 原理

在Objective-C中调用一个方法,其实是向一个对象发送消息,即查找消息的唯一依据是selector的名字。每一个SEL都对应着其方法实现真实的运行地址(IMP)。 如下图:

Method Swizzling 可以使得两个SEL所对应的IMP相互交换达到HOOK的目的如下图

接下来,我们通过一个小小的案例,从逆向的角度来了解HOOK的强大

首先我们看看微信的主页

案例的目标:hook登录点击事件,并弹出alert

第一步【移植】

把 中dylib的代码直接拿过来,在上面进行开发

第二步【分析】

利用Debug View 从界面上先分析登录界面代码

从图可以直接看到登录Button的Target与Action,接下来通过LLDB分析查看Target/Action里面到底是啥子东西

(lldb) po 0x1c3a7f800{    className = WCAccountLoginControlLogic    memoryAddress = 0x1c0322300;}(lldb) po 0x1c3a7fa80{    className = "__NSCFString";    memoryAddress = 0x1c0e289c0;}(lldb) po 0x1c0e289c0onFirstViewLogin复制代码

我们以前是不是通过以下方法,为Button添加点击事件的? - (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 有了这些我们就能很肯定,当点击登录按钮的时候触发的是这个WCAccountLoginControlLogic控制器 下的 onFirstViewLogin方法

第三方【写代码】

直接在我们的dylib中进行开发,我就直接上代码了

#import "PFLibrary.h"#include 
#import
@implementation PFLibrary- (void) loginBtnPressed { UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"你想登录??" message:nil preferredStyle:UIAlertControllerStyleAlert]; [alertVC addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil]]; [[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:alertVC animated:true completion:nil];}+ (void)load { NSLog(@"Dylib注入成功..."); // 原微信的点击触发的方法 Method old = class_getInstanceMethod(objc_getClass("WCAccountLoginControlLogic"), @selector(onFirstViewLogin)); // 本地自己的方法 Method new = class_getInstanceMethod(self, @selector(loginBtnPressed)); //交换两个方法的IMP method_exchangeImplementations(old, new); NSLog(@"????????Hook成功????????");}@end复制代码

这段代码就是利用Method Swizzling进行了HOOK。由于比较简单,我就不不细致分析了,我相信大伙通过我的注释都看得懂。

来~看看结果!

转载地址:http://upiql.baihongyu.com/

你可能感兴趣的文章
打算搭建一个***视频下载网站
查看>>
Skype for Business Server 2015-04-前端服务器-7-部署
查看>>
我的友情链接
查看>>
django使用rest_framework API认证
查看>>
背景图片百分之百大小css设置方法
查看>>
SQL 语句中的With(index())
查看>>
我的友情链接
查看>>
修改计算机名后arcgis设置
查看>>
揭密HTML5带来的攻击手法
查看>>
php脚本超时时间设置
查看>>
DPM2012学习(十一),裸机还原域控制器
查看>>
SQL2005学习(二十五),插入单行数据
查看>>
bootstrap-fileinput提交多张图片时只获取到一张
查看>>
RedHat 正在决定 eth0 的 IP 信息...失败;无链接。检查电缆吗?
查看>>
我眼中的德国攻城师
查看>>
Linux Mail基本服务器构建之postfix源码安装(下)
查看>>
Centos6.2下puppet客户端安装
查看>>
Nginx实现高效负载均衡器
查看>>
ElastAlert对ELK日志进行邮箱报警
查看>>
WordPress友情链接插件:Auto BlogRoll
查看>>