IOS中如何Hook消息

作者: 480a52903ce5 | 来源:发表于2016-06-27 15:46 被阅读776次

前言:我们都知道在windows下可以通过API轻松的hook很多消息,IOS里面貌似还沒有现成的API,不过我们通过Objective-C运行时的一些东西,就可以实现这一个功能.
So问题来了, 我们为什么要hook消息呢, 因为有些时候我们可能无法直接去继承一个类,却又像去截取这个类中的某些消息左耳一些处理, 然后在想对它进行一些我们自己想要的操作处理.
具体过程我们look一下代码即可明白:
ViewController中代码:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    // 创建一个hook对象
    TestHook * hook = [[TestHook alloc]init];
    [self sendToMessage:@"ViewController的方法"];
}

- (void)sendToMessage:(NSString *)str{
    NSLog(@"%@",str);
}

TestHook.m中代码:

+ (void)load
{
    // 获取到ViewController中sendEvent对应的method
    Method sendEvent = class_getInstanceMethod([ViewController class], @selector(sendToMessage:));
    Method sendEventMySelf = class_getInstanceMethod([self class], @selector(sendEventHooked:));
    
    // 然后用我们自己的函数的实现,替换目标函数对应的实现
    IMP sendEventMySelfImp = method_getImplementation(sendEventMySelf);
    class_replaceMethod([ViewController class], @selector(sendToMessage:), sendEventMySelfImp, method_getTypeEncoding(sendEvent));
}

/*
 * 截获到ViewController的sendEvent
 * 我们可以先处理完以后,再继续调用正常处理流程
 */

- (void)sendEventHooked:(NSString *)str
{
    // 操作我们想操作的事情
    NSLog(@"%s, --> %@",__func__,@"操作我们想操作的事情");
}

这样我们就把ViewController里面的方法实现部分给更改了,其控制台打印效果:

**Hook[8843:291487] -[TestHook sendEventHooked:], --> ****操作我们想操作的事情**

相关文章

  • IOS中如何Hook消息

    前言:我们都知道在windows下可以通过API轻松的hook很多消息,IOS里面貌似还沒有现成的API,不过我们...

  • HOOK原理

    hook(钩子)处理特殊的消息机制 iOS中HOOK技术的几种方式 1、Method Swizzle利用OC的Ru...

  • iOS 一对多 delegate 的简单应用

    背景 在之前我们尝试过 hook webView 的 delegate,可以查看【 iOS 如何优雅地 hook ...

  • Hook原理

    HOOK概述 HOOK示意图 iOS中HOOK技术的几种方式 Method Swizzle 2.fishhook ...

  • Xposed入门浅析(二)拦截通知栏消息

    如何用Xposed拦截通知栏消息? 今天我将用xposed中的hook方法,在通知栏显示之前hook它,让它不显示...

  • HOOK

    HOOK 一、HOOK概述 HOOK(钩子) 其实就是改变程序执行流程的一种技术的统称! 二、iOS中HOOK技术...

  • 005——HOOK原理

    HOOK概述 HOOK(钩子)其实就是改变程序执行流程的一种技术的统称!HOOK原理 IOS中HOOK技术的几种方...

  • iOS逆向-- Hook原理

    HOOK概述 Hook(俗称钩子) 其实就是改变程序执行流程的一种技术的统称! iOS 开发中几种常见的Hook ...

  • iOS中hook系统API的两种方式

    iOS中hook系统API的两种方式

  • HOOK原理

    009--HOOK原理 一、HOOK概述 HOOK(钩子) 其实就是改变程序执行流程的一种技术的统称! iOS中H...

网友评论

  • fire_fire:你这是错的,都是在load方法里面swizzle method
    480a52903ce5:@春泥Fu 昨天看了南峰子大神的文章,看到了相关解释,多谢你的指点:pray:
    春泥Fu:@叫我干苦力的小码农 不能称之为错吧,如果只是class_replaceMethod的话没有错,只是大部分情况下都是swizzle method,然后在你替换的方法中再去调用原来的方法。
    480a52903ce5:@fire_fire 谢谢,你的指点,之后会改正的。:+1:
  • fb7d53e06f46:不错哦
    480a52903ce5:@Jamgle :ghost:
    480a52903ce5:@Jamgle 🗡️🌬️🐂👃

本文标题:IOS中如何Hook消息

本文链接:https://www.haomeiwen.com/subject/cdvzdttx.html