ios下的hook的原理

其实Hook就是一种改变程序执行流程的一种技术的统称,下面就简单的介绍下在ios中的几种Hook的方式

1、Method Swizzle

利用OC的Runtime特性,动态去改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变的目的。主要用于OC方法。

2、fishhook

它是Facebook提供的一个动态修改链接mach-O文件的工具。利用MachO文件加载原理,通过修改懒加载和非懒加载两个表的指针达到C函数HOOK的目的。简单的说非懒加载表就是我动态库被链接了,就直接会有确定地址了,懒加载就是调用一次之后去确定其的地址

3、Cydia Substrate
Cydia Substrate 原名为 Mobile Substrate ,它的主要作用是针对OC方法、C函数以及函数地址进行HOOK操作

Cydia Substrate主要由3部分组成:

1、MobileHooker

MobileHooker顾名思义用于HOOK。它定义一系列的宏和函数,底层调用objc的runtime和fishhook来替换系统或者目标应用的函数.

我们经常会用的两个函数

MSHookMessageEx 主要作用于Objective-C方法

void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP result)

MSHookFunction 主要作用于C和C++函数

void MSHookFunction(voidfunction,void* replacement,void** p_original)

MSHookMessageEx函数的作用对象是Objective-C函数,其原理是调用Objective-C中高等级的运行时函数API:class_getInstanceMethod、method_setImplementation、method_exchangeImplementations等来替换原函数的逻辑

其实MobileHooker就是对fishhook和runtime做了封装,就是和AFNetworking和NSURLSession的关系是一样的

2、MobileLoader

MobileLoader的作用就是去加载第三方dylib,在ios启动的时候,会由launchd将MobileLoader载入内存,然后MobileLoader会根据同名的plist文件指定的作用范围,有选择地在不同的进程当中去通过dlopen函数打开目录/Library/MobileSubstrate/DynamicLibraries/下的所有的dylib。

3、safe mode

因为APP程序质量参差不齐崩溃再所难免,破解程序本质是dylib,寄生在别人进程里。 一旦出错,就可能导致整个进程崩溃,而一旦崩溃的是SpringBoard等系统进程,崩溃后就会造成iOS瘫痪。所以CydiaSubstrate引入了安全模式,在安全模式下所有基于CydiaSubstratede 的三方dylib都会被禁用,便于查错与修复。

补充

在越狱手机里面是直接将Cydia Substrate这个动态库给导入到了系统里面,而我们的MonkeyDev也有注入这样的动态库

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80357965