fishhook

Hook原理--逆向开发

穿精又带淫゛_ 提交于 2020-12-29 06:10:17
今天我们将继续讲解逆向开发工程另一个重要内容--Hook原理讲解。Hook,可以中文译为“挂钩”或者“钩子”,逆向开发中改变程序运行的一种技术。按照如下过程进行讲解 Hook概述 Hook技术方式 fishhook原理及实例 符号表查看函数名称 总结 一、Hook概述 在逆向开发中是指改变程序运行流程的技术,通过Hook可以让自己的代码运行在别人的程序中。需要了解其Hook原理,这样就能够对恶意代码攻击进行有效的防护。 二、Hook技术方式 2.1 Method Swizzle方式 Method Swizzle 上次已经讲到,是利用OC的Runtime的特性,去动态改变SEL(方法编号)与IMP(方法实现)的对应关系,达到OC方法调用流程更改的目的。也是主要用于OC方法。 2.2 Cydia Substrate方式 Cydia Substrate 原名叫做Mobile SubStrate,主要作用为针对C函数,OC函数以及函数的地址进行Hook操作。并且有个很大的优势,Cydia Substrate 并不是仅仅是针对iOS设计,Andriod一样也可以使用。 2.2.1 Cydia Substrate定义了一系列的函数和宏,底层调用了objc的runtime和fishHook来替代目标函数或者系统方法。 其中有两个函数 MSHookMessageEx主要用于OC方法 void

iOS Hook

主宰稳场 提交于 2020-08-17 02:47:07
HOOK 译为“钩子”或挂钩。在 iOS 逆向中指改变程序运行流程的一种技术。 iOS 中 hook 技术的几种方式 Method Swizzle 利用 OC 的 Runtime 特性,动态改变 SEL(方法编号)和 IMP(方法实现)的对应关系,达到 OC 方法调用流程改变的目的。主要用于 OC 方法。 fishhook 它是 Facebook 提供的一个动态修改链接 mach-O 文件的工具。利用 MachO 文件加载原理,通过修改懒加载和非懒加载两个表的指针达到 C 函数 Hook 的目的。 Cydia Substrate Cydia Substrate 原名为 Mobile Substrate,它的主要作用是针对 OC 方法、C 函数以及函数地址进行 Hook 操作。当然它并不是仅仅针对 iOS 而设计的,安卓一样可以用。 官方地址 一、Method Swizzle 在 OC 中,SEL 和 IMP 之间的关系,就好像一本书的“目录”。 SEL 是方法编号,就像“标题”一样,IMP 是方法实现的真实地址,就像“页码”一样。他们是一一对应的关系。 Runtime 提供了交换两个 SEL 和 IMP 对应关系的函数。 OBJC_EXPORT void method_exchangeImplementations(Method _Nonnull m1, Method

iOS逆向之反HOOK的基本防护

你说的曾经没有我的故事 提交于 2020-05-01 18:21:59
iOS逆向之Method Swizzle iOS逆向之fishHook原理探究 iOS逆向之fishHook怎么通过符号找字符串 学习完上面的文章后,深感 fishhook 之强大,既然fishhook能hook系统的函数。那么猜想: 如果在我们的项目中hook了Method Swizzle,那么别人还能hook我们的项目吗?? 一、写上基本的防护,内部使用hook,外部没有hook 1、新建工程:基本防护,写个简单的页面 代码如下: 2、需求:在外部hook btnClick2,在内部hook btnClick1,需要保证的是在外部hook btnClick2无效,在内部hook btnClick1生效。 3、拖入fishhook代码,新建hookMgr类 //专门HOOK +(void)load{ //内部用到的交换代码 Method old = class_getInstanceMethod(objc_getClass("ViewController"), @selector(btnClick1:)); Method new = class_getInstanceMethod(self, @selector(click1Hook:)); method_exchangeImplementations(old, new); //在交换代码之前,把所有的runtime代码写完 /