如何拿到别人写的ios hook dealloc

iOS逆向工程(手动HOOK自己编写的APP)- 学习整理
前言:上一篇文章已经介绍过逆向开发需要用到的一些工具,theos的基本介绍也讲过了,今天来实战HOOK一个自己的APP。
一、使用Xcode创建自己的一个用于测试的App。
目的:拦截一个自己写的方法,然后进行重写。
APP大家可以自己创建,我这边已经创建好了。
Bundle identifier:com.dasen.HOOK-APP
APP Name : HOOK_APP
拦截一个按钮的点击方法:
- (void)buttonClick {
UIAlertController *alerView = [UIAlertController alertControllerWithTitle:@&提示&
message:@&未被HOOK&
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:@&取消&
style:UIAlertActionStyleCancel
handler:nil];
[alerView addAction:cancelAction];
[self presentViewController:alerView animated:YES completion:nil];
二、下载和配置theos
大家可自己手动下载官方theos然后放入ldid、CydiaSubstrate、dpkg-deb等等到目录中,或者使用脚本下载我这边已经放入好的theos。
脚本下载地址:
三、创建theos项目
1,首先我们配置和准备好theos后,我们进入终端,然后cd进入你要放工程的文件夹目录比如桌面上我新建好的一个文件夹iosDev,然后执行启动 NIC(New Instance Creator),如下:。
zhangdasendeMacBook-Pro:iOS Dev zhangdasen$ cd /Users/zhangdasen/Desktop/iOSDev
zhangdasendeMacBook-Pro:iOSDev zhangdasen$ /opt/theos/bin/nic.pl
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/cydget
[4.] iphone/flipswitch_switch
[5.] iphone/framework
[6.] iphone/ios7_notification_center_widget
[7.] iphone/library
[8.] iphone/notification_center_widget
[9.] iphone/preference_bundle_modern
[10.] iphone/tool
[11.] iphone/tweak
[12.] iphone/xpc_service
Choose a Template (required):
我们可以看到iphone/tweak,所以我们输入
11 选择一个tweak工程,然后回车确定后,会让我们输入一些名字 id 等等信息,上一篇文章已经讲解过了。
下面我用一张GIF图来演示下:
然后我们进入工程目录会发现生成四个文件:
这四个文件的配置在上一篇文章已经简单介绍了,下面我就直接贴上文件内容。
1, Makefile
THEOS_DEVICE_IP = 10.10.243.124
ARCHS = armv7 arm64
TARGET = iphone:latest:8.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = HOOKAPP
HOOKAPP_FILES = Tweak.xm
HOOKAPP_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec &killall -9 SpringBoard&
2, Tweak.xm
%hook ViewController
- (void)buttonClick
UIAlertController *alerView = [UIAlertController alertControllerWithTitle:@&提示&
message:@&已经被HOOK了&
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:@&取消&
style:UIAlertActionStyleCancel
handler:nil];
[alerView addAction:cancelAction];
[self presentViewController:alerView animated:YES completion:nil];
其它这两个文件 control 和 iosproject.plist 可以保持原样。
三、打包并安装dylib到设备中.
走到这一步需要注意几点
iOS设备一定要已经安装了Open ssh (默认密码alpine,如果忘记密码可自行查找如何修改密码)设备和电脑保持在同一局域网下。保证你的theos配置文件没有问题。
1,这个时候我们差不多都配置好了,可以把自己写的APP,然后运行到设备上了,运行之后点击测试下未HOOK之前的按钮点击方法:
2,接下来我们利用终端cd进入你创建的tweak项目目录,然后执行make package install,然后输入两次ssh的连接密码(ssh 默认密码alpine),然后设备就会重启SpringBoard,然后我们再次打开HOOK的APP发现按钮的点击方法已经被替换了。
如果提示_Prefix/NullabilityCompat.h 说明你是自己clone 的官方的theos,里面没放入这些头文件,可手动clone header头文件到目录中:
sudo git clone https://gi<//theos/headers /opt/theos/include
或者重新更新下我上传的theos git pull 一下,
还有环境变量记得设置下:export THEOS=/opt/theos
下面gif图演示操作下:
这个时候输入成功后这个时候SpringBoard已经开始重启了。
(由于上传图片大小限制5M,我分了两个GIF来演示,下面演示HOOK成功后)
到这一步很多人一定会好奇,怎么这么就成功了,下面说说原理。
其实原理不敢说,只能说是一些自己的理解吧。
讲到这里就不得不需要提到一些关键词。
Cydia Substrate、Mobile Substrate
MobileHooker
MSHookMessageExMSHookFunction
MobileLoaderSafe Mode
下面进行一一说明
四、基本原理说明
1,Cydia Substrate 和 Mobile Substrate
* Cydia Substrate 原名为 Mobile Substrate 已经正式更名为 Cydia Substrate。
* 它是越狱后cydia插件/软件运行的一个基础依赖包。提供软件运行的公共库,可以用来动态替换
内存中的代码、数据等所以iOS系统越狱环境下安装绝大部分插件,必须首先安装Cydia Substrate。
* Cydia Substrate主要由3部分组成:MobileHooker,MobileLoader 和 safe mode。
2,MobileHooker、Logos
* MobileHooker用于替换覆盖系统的方法,这个过程被称为Hooking(挂钩)
* 它主要包含两个函数:
void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);
void MSHookFunction(void*function,void* replacement,void** p_original);
MSHookMessageEx 主要作用于Objective-C函数
MSHookFunction 主要作用于C和C&#43;&#43;函数
Logos语法就是对此函数做了一层封装,让编写hook代码变的更直观,上面的例子用的就是logos语法。
MSHookMessageEx 和MSHookFunction 使用方法这里就不介绍了,大家可去看书籍或者查询相关资料。
3,MobileLoader
* MobileLoader用于加载第三方dylib在运行的应用程序中。
* 启动时MobileLoader会根据dylib的同名plist文件指定的作用范围,有选择的在不同进程里通过dlopen函数打开目录/Library/MobileSubstrate/DynamicLibraries/ 下的所有dylib。
4,safe mode
* 因为APP程序质量参差不齐崩溃再所难免,tweak本质是dylib,寄生在别人进程里,如果注入Springboard等。
系统进程一旦出错,可能导致整个进程崩溃,崩溃后就会造成iOS瘫痪。
* 所以CydiaSubstrate引入了安全模式,在安全模
式下所有基于CydiaSubstratede 的三方dylib都会被禁用,便于查错与修复。
* 本人建议自己测试的时候如果HOOK Springboard的时候一定要注意!如果出错,进入安全模式删除插件即可。
在我的理解就是:我们在Tweak.xm文件里用封装后的logos语法编写代码(底层利用了MSHookMessageEx,MSHookFunction函数,使用 Object-C 的runtime特性发送了method_setImplementation消息)然后theos自动打包成dylib,上传到/Library/MobileSubstrate/DynamicLibraries/里面后,重启Springboard, 利用MobileLoader寻找目录并根据dylib的同名plist文件加载里面的dylib动态库,这时候当我们再打开APP后执行方法时,方法就被替换了。
下面我们可以来验证一下,我用PP助手连接pad, 进入
/Library/MobileSubstrate/DynamicLibraries/目录,发现了我们编译后的dylib如图:
然后看下HOOKAPP.plist文件:
里面的com.dasen.HOOK-APP就是自己需要HOOK的app id
说明已经放入这个目录了,然后进入Cydia,查看已安装插件:
发现目标插件已经安装进了Cydia 如图:
好了验证完毕,说明确实部分是如我们所想的那样的,上面的例子很简单,重要是简单的解开了逆向的一点点面目,更多的是靠大家去发掘和利用探索更多知识。
待续。。。。。。
iOS逆向知识涉及繁多,以上自己的个人整理和心得,如有误,希望大家多多提醒。
推荐下:&这个论坛是《iOS逆向工程 第2版》书籍作者创办的论坛。
参考书籍:&&iOS应用逆向工程-第2版& 沙梓社 吴航 * 著
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:333次
排名:千里之外IOS HOOK技术深度揭秘_达内iOS培训
400-111-8989
IOS HOOK技术深度揭秘
iOS HOOK是iOS安全研究中最重要的组成部分,我将通过三篇文章,从技术角度对iOS HOOK做详细的分析,并探讨其进一步的应用场景。
本文为第一篇,将对HOOK技术的特点和原理做深度揭秘。
HOOK技术原理介绍
HOOK(钩子),顾名思义,就是将事物“钩”住,然后我们就能实现自己想要的处理。而在计算机领域中,HOOK“钩”住的就不是普通的事物,而是我们想要截获再处理的程序或APP。
HOOK其实就是处理消息的程序段,每当消息发出,在没有到达特定的程序或者窗口前,HOOK程序会先将此消息截获,也就是先得到控制权,然后HOOK就可以对此段消息做出处理,查看或修改其内容,甚至更改其传递路线。
iOS HOOK的特点
iOS HOOK是iOS逆向分析中重要的一环,通过iOS HOOK我们可以动态的分析APP中程序的具体运作,得到APP实际运行会出现的各种消息,分析消息传递的路线与消息本身有无威胁信息。
iOS系统代码是封闭的,而与之对应的Android系统是开源的。开源的Android其HOOK操作就要简单的多,其工具也多,可扩展性也强。
iOS因为封闭特性,不能与Android一样轻松实现HOOK,能够借助的工具也只有Frida和CydiaSubstrate等,而且工具的配置要求高,可扩展性比较弱。
iOS 运行时HOOK的原理
Object-C是一种runtime语言,通过objc_msgSend向callee发送消息,实现方法的调用。objc_msgSend函数原型如下:
id objc_msgSend ( id self, SEL op, ... );
第二个参数类型是SEL,它表示一个selector。selector是方法选择器,是对某个方法的唯一标识。这个标识是一个数据结构,如下所示:
typedef struct objc_selector *SEL;
实质上,SEL是指向某个方法的指针,更准确的讲,是一个方法名被hash后的key值,它可以唯一的表示这个方法。Object-C允许我们在运行时添加新的selector或者获取已经存在的selector。
可以通过以下方法获取SEL:
(1)@selector()
(2)sel_registerName()
(3)NSSelectorFromString()
知道了如何获取selector,那么Object-C的运行时hook就变得简单,只需要将目标selector替换成自己实现方法的selector即可。
每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的Method实现。如图1所示:
&▲&图1 正常selector与IMP映射表
然后我们偷换掉selector的IMP,我们要做的就是把链接线解开,然后连到我们自定义的函数IMP上,如果有需要的话,我们再连回原来的IMP上。如果在执行完IMP_x后还想继续调用IMP_3的话,只需要在IMP_x中调用selector_x就行了。如图2所示:
&&▲图2 HOOK后selector与IMP映射表
关于HOOK技术的特点和原理就介绍到这里,在后续的篇章中,我将为大家介绍常用的iOS HOOK工具与技术。
iOS HOOK是iOS安全研究中最重要的组成部分,在上篇中 iOSHOOK技术深度揭秘(上篇),对HOOK技术的特点和原理做了简单解析,作为下篇,本文将重点阐述常用的iOS HOOK框架、iOS HOOK的利与弊。
iOS HOOK常用框架
iOS HOOK的常用框架有两个,Frida与Theos;针对iOS的非越狱手机,常用的技术手段是Mach-O LC_LOAD_DYLIB Hook,由于篇幅有限,选择Theos详细介绍,Frida与非越狱技术仅作简单介绍。
Frida是一款基于python + javascript 的跨平台的HOOK工具,核心用C语言编写。目前Frida支持在MAC、Windows、Linux机器上安装使用,可以对Android、Windows Phone、iOS等APP做HOOK操作。
Frida将V8 JavaScript引擎注入到目标进程中,JS进而可以访问所有的内存数据、挂函数钩。
Frida对iOS的HOOK操作需要使用iPhone手机,分为已越狱和未越狱版本。对iOS HOOK操作时,Frida会调用该应用程序内部的函数,同时建立通信通道,用于在应用程序和目标进程中运行JS之间进行通信。
同时,Frida支持其他语言,例如Node.js,Python,Swift,.NET,Qml等,并且很容易为用他语言编写注入代码。
Theos是一个越狱开发工具包,其下载安装、开发使用的Logos语法和编译发布相对简单,开发者可以更专注于功能开发;原理上,Theos相当于对MobileSubstrate的封装,因而能实现对Object-C运行时的HOOK,也能实现对C语言函数的HOOK。
MobileSubstrate又名CydiaSubstrate,其创作者是Jay Freeman(saurik),主要由3部分组成:MobileHooker,MobileLoader和Safe Mode。
1、MobileHooker
MobileHooker的作用是替换系统函数,即&HOOK,这是CydiaSubstrate最重要也是最难理解的部分。MobileHooker主要包含以下两个函数:MSHookMessageEx和MSHookFunction,其中MSHookMessageEx作用于Object-c函数,而MSHookFunction作用于C和C++函数。
2、MobileLoader
MobileLoader用于加载第三方动态链接库(dylib)。在iOS启动时,它会有launcded载入内存,然后它会在/Library/MobileSubstrate/DynamicLibraries/中找到需要加载的动态链接库并加载它们,至于是否加载到目标程序,是通过一个plist文件来控制的。
3、Safe Mode
Safe Mode的作用是避免程序崩溃,捕获SIGTRAP、SIGABRT、SIGILL、SIGBUS、SIGSEGV、SIGSYS这6种信号,然后进入安全模式。在安全模式中,所有CydiaSubstrate的第三方dylib均会被禁用,便于查错与修复。
Theos是在MobileSubstrate基础上发展而来,下图展示了开发过程中的一段示例代码。
▲图:HOOK 示例代码
代码中用到了Logos语法,这里简单的介绍一下,Logos有几个常用的预处理指令,分别为%hook、%log、%orig、%group、%init、%otor、%new和%c:
%h:指定需要HOOK的class,必须以%end结尾;
%log:该指令在%hook内部使用,将函数的类名、参数等信息写入syslog;
%orig:该指令在%hook内部使用,执行被hook的函数的原始代码;
%group:该指令用于将 %hook 分组,便于代码管理及按条件初始化分组,必须以 %end 结尾;
%init:该指令用于初始化某个%group,必须在%hook或者%ctor内部调用,如果带参数,则初始化指定的组,如果不带参数,则初始化_ungrouped;
%ctor:一般可以用来初始化%group以及进行MSHookFunction等操作,如果不显示定义,则Theos会自动生成一个%ctor,并在其中调用%init(_ungrouped),不需要以%end结尾;
%new:在%hook内部使用,为一个现有的class添加新函数;
%c :该指令的作用等同于objc_getClass(),即动态定义一个类的定义,在%hook或%ctor内使用;
Object-C和C函数同是HOOK的代码模版,虽简单,但配合上合适的API,能发挥强大的作用。比如对网络数据进行分析时,在Object-C运行时,可以HOOK NSURLConnection类中的method;又如,SSL,HOOK C语言实现的SSL_Read和SSL_Write,从中可以知道应用程序网络数据的传输情况。
下图是对某个APP的网络数据传输API进行HOOK,检测其数据传输的安全性(某个APP的登陆界面,手机号码作为账号,短信验证码作为密码登陆)。
▲图:登陆界面
下图为HOOK NSURLConnection类中方法获取https数据请求信息,可以看出用户输入的手机号码和短信的验证码是以明文形式通过https协议传输数据。一方面说明了该应用没有对证书进行双向验证,另一方面说明了对敏感信息加密后再传输的重要性。HOOK能非常直观地呈现数据,为后面的安全性研究提供帮助。
▲图:HOOP API 获取网络请求数据
&&非越狱手机HOOK技术
Mach-O LC_LOAD_DYLIB HOOK是一种在iOS手机非越狱的情况下进行HOOK的一种技术手段。
具体原理:
1.&提取ipa中的二进制文件;
2.&修改二进制文件的Load Commands列表,加入要HOOK的dylib;
3.&hook.dylib在函数constructor函数中完成对特定函数的HOOK;
4.&对修改后的ipa进行签名,打包和安装;
该技术的核心思想是在APP被加载的时候,把原先编译好的动态库dylib加载进来,从而达到HOOK的目的。
iOS HOOK技术的利与弊
iOS HOOK技术在iOS安全领域应用广泛,其强大的功能有利于iOS相关安全技术的推广和发展,但事物的两面性也决定了若将iOS HOOK技术用在不好的方向亦会产生相当的危害。
&&iOS HOOK技术的优点
作为iOS逆向工程的重要一环,iOSHOOK技术可以大幅提升工作效率:
1) &APP漏洞检测。将APP HOOK后检测其运行行为,能够检测出漏洞和不安全信息;
2) 病毒查杀。获取程序运行状态,监控不安全因素,查找病毒并隔离,保证机器安全;
3) 黑盒。程序内部黑盒测试,不会影响源代码,只需要出现异常时的逻辑流程;
除了提高效率,iOS&HOOK技术也能帮助开发一些有意思的软件或者插件:
1. &抓取APP运行消息和状态,类似于有道桌面软件在PC机上的运行,能够对英文单词实时抓取并翻译;
2. &制作APP运行插件,例如微信抢红包插件等;
&&iOS HOOK的弊端
iOS&HOOK技术是为iOS安全而生,它是一种改变API运行结果的技术,能够将系统或APP的API函数执行重定向。但是,一个应用程序调用的函数方法被第三方HOOK重定向后,其执行结果和运行流程就由第三方控制,其安全性也就无法得到应有的保障,例如,一些开发者将HOOK技术应用在制造克隆APP添加广告甚至病毒等。
总之,对用户而言,被HOOK并改造过的应用程序,安全性也就成为一个严重的问题。
iOS HOOK是iOS动态检测和iOS逆向的重要组成部分。通过这两篇的文章,对HOOK的原理、技术、利弊做了简单介绍与分析。目前,网上对iOS HOOK的研究已经层出不穷,但更多的是针对框架和特定软件功能进行的HOOK研究,有鉴于此,近期,我将会从iOS应用动态检测的角度,对iOS HOOK的使用做解析,敬请期待。
关于HTTP与HTML的发明有个很有趣的插曲, 那就是首个万维网服务器与浏览器是在一台NeXTStep计算机上编写的, 在1997年, Apple收购了NeXTStep Computer并将NeXTStep作为mac OS的基础后来成为了iOS的基础.
由于CoreGraphics框架有太多的API,对于初次接触或者对该框架不是十分了解的人,在绘图时,对API的选择会感到有些迷茫,甚至会觉得iOS的图形绘制有些繁琐。因此,本文主要介绍一下iOS的绘图方法和分析一下CoreGraphics框架的绘图原理。
iOS逆向开发学习之前要做的准备
iOS事件响应机制总结
Copyright (C)
All Rights Reserved
选择城市和中心
达内北京亦庄大学生实训基地
达内北京网络营销中心
达内北京会计中心问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
假如我想通过hook FMDB的一些方法来监测它的性能指标, 但是没有导入该库的情况下, 如何进行hook操作呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
NSClassFromString(@"class")
OBJC_EXPORT IMP class_replaceMethod(Class cls, SEL name, IMP imp, const char *types)
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:IOS中如何Hook消息
我的图书馆
IOS中如何Hook消息
  年过完了,该收心了,该开始学习了。
  我们都知道在windows下可以通过API轻松的hook很多消息,IOS里面貌似还没有现成的API(可能是我还没发现吧),前段时间碰巧看到Objective-C运行时的一些东西,于是心想着是不是可以尝试一下实现hook的功能。
  为什么要hook消息呢,因为有些时候我们可能无法直接去继承一个类,却又想先截获某些消息做一些处理,然后再接着进行正常的处理流程。今天使用运行时的一些API实现了基本的hook功能。
  下面先直接上源码:
TestHookObject.m
TestHookMessage
Created by mapleCao on 13-2-28.
Copyright (c) 2013年 mapleCao. All rights reserved.
9 #import "TestHookObject.h"
10 #import &objc/objc.h&
11 #import &objc/runtime.h&
13 @implementation TestHookObject
15 // this method will just excute once
16 + (void)initialize
// 获取到UIWindow中sendEvent对应的method
Method sendEvent = class_getInstanceMethod([UIWindow class], @selector(sendEvent:));
Method sendEventMySelf = class_getInstanceMethod([self class], @selector(sendEventHooked:));
// 将目标函数的原实现绑定到sendEventOriginalImplemention方法上
IMP sendEventImp = method_getImplementation(sendEvent);
class_addMethod([UIWindow class], @selector(sendEventOriginal:), sendEventImp, method_getTypeEncoding(sendEvent));
// 然后用我们自己的函数的实现,替换目标函数对应的实现
IMP sendEventMySelfImp = method_getImplementation(sendEventMySelf);
class_replaceMethod([UIWindow class], @selector(sendEvent:), sendEventMySelfImp, method_getTypeEncoding(sendEvent));
* 截获到window的sendEvent
* 我们可以先处理完以后,再继续调用正常处理流程
35 - (void)sendEventHooked:(UIEvent *)event
// do something what ever you want
NSLog(@"haha, this is my self sendEventMethod!!!!!!!");
// invoke original implemention
[self performSelector:@selector(sendEventOriginal:) withObject:event];
  下面我们来逐行分析一下上面的代码:
  首先我们来看19行,这一行主要目的是获取到UIWindow原生的sendEvent的Method(一个结构体,用来对方法进行描述),接着第20行是获取到我们自己定义的类中的sendEvent的Method(这两个方法的签名必须一样,否则运行时报错)。第23行我们通过UIWindow原生的sendEvent的Method获取到对应的IMP(一个函数指针),第24行使用运行时API Class_addMethod给UIWindow类添加了一个叫sendEventOriginal的方法,该方法使用UIWindow原生的sendEvent的实现,并且有着相同的方法签名(必须相同,否则运行时报错)。27行是获取我们自定义类中的sendEventMySelf的IMP,28行是关键的一行,这一行的主要目的是为UIWindow原生的sendEvent指定一个新的实现,我们看到我们将该实现指定到了我们自己定义的sendEventMySelf上。到了这儿我们就完成了偷梁换柱,大功告成。
  执行上面这些行以后,我们就成功的将UIWindow的sendEvent重定向到了我们自己的写的sendEventMySelf的实现,然后将其原本的实现重定向到了我们给它新添加的方法sendEventOriginal中。而sendEventMySelf中,我们首先可以对这个消息进行我们想要的处理,然后再通过41行调用sendEventOriginal方法转到正常的执行流程。
  这块儿你可能有个困惑 “我们自定义类中明明是没有sendEventOriginal方法的啊?”&
  为什么执行起来不报错,而且还会正常执行?因为sendEventMySelf是UIWindow的sendEvent重定向过来的,所以在运行时该方法中的self代表的就是UIWindow的实例,而不再是TestHookObject的实例了。加上sendEventOriginal是我们通过运行时添加到UIWindow的实例方法,所以可以正常调用。当然如果直接通过下面这种方式调用也是可以的,只不过编译器会提示警告(编译器没那么智能),因此我们采用了performSelector的调用方式。
[self sendEventOriginal:event];
  以上就是Hook的实现,使用时我们只需要让TestHookObject类执行一次初始话操作就可以了,执行完以后。UIWindow的sendEvent消息就会会hook到我们的sendEventMySelf中了。
  下面是调用代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[TestHookViewController alloc] initWithNibName:@"TestHookViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewC
[self.window makeKeyAndVisible];
//hook UIWindow‘s SendEvent method
TestHookObject *hookSendEvent = [[TestHookObject alloc] init];
[hookSendEvent release];
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
btn.center = CGPointMake(160, 240);
btn.backgroundColor = [UIColor redColor];
[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventAllEvents];
[self.window addSubview:btn];
[btn release];
return YES;
  代码中我们还专门添加了一个button来验证,hook完以后消息是否正常传递。经验证消息流转完全正常。
  2013年写的第一篇博客,希望大家能喜欢!!!
注:欢迎转载,转载请注明出处!
参考资料:
     
TA的最新馆藏[转]&
喜欢该文的人也喜欢}

我要回帖

更多关于 ios hook机制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信