Hook原理

2020-04-29  本文已影响0人  coder_feng

HOOK概述

HOOK:中文翻译为钩子,在iOS逆向中是指改变程序运行流程的一种技术。通过hook可以让别人的程序来执行自己所写的代码。在你相中经常实用这种技术,所以在学习过程中,我们重点要了解其原理,这样能够对恶意代码进行有效的防护
HOOK示意图
image.png
iOS中HOOK技术的几种方式
利用OC的Runtime特性,动态改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变的目的,主要用于OC方法
它是Facebook提供的一个动态修改mach-O文件的工具,利用MachO文件加载原理,通过修改加载和非加载两个表的指针达到C函数HOOK的目的
Cydia Substrate 源码为Mobile Substrate,它的主要作用是针对OC方法,C函数以及函数地址进行HOOK操作,当然它并不是仅仅对iOS而设计的,安卓一样可以用,官方地址:http://www.cydiasubstrate.com/

MobileHooker,它定义一系列宏和函数,底层调用objc的runtime和fishhook来替换系统或者目标应用的函数,其中有两个函数:

MSHookMessageEx 主要作用于Objective-C方法

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

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

void MSHookFunction(void function,void * replacement,void ** p_original),Logos语法的%hook,就是对此函数做了一层封装

MobileLoader用于加载第三方dylib在运行的应用程序中,启动时MobileLoader会根据规则把指定目录的第三方动态库加载进去,第三方动态库也就是我们写的破解程序

MobileLoader 用于将第三方动态库加载到运行的目标应用里面.MobileLoader 首先通过环境变量DYLD_INSERT_LIBRARIES把它自己加载到目标应用里面,然后查找/Library/MobileSubstrate/DynamicLibraries/目录下的所有plist文件,如果plist文件里面的配置信息符合当前运行的应用,就会通过dlopen函数打开对应的dylib文件,另外plist文件中有一些过滤条件,只有满足条件时候,第三方动态库才会加载,过滤条件如下

Filter = {
  Bundles = (com.apple.springboard);
}
处于对安全性的考虑,当plist文件不存在的时候,dylib不会注入所有进程,如果要确定这么做,可以使用如下方式制定
{
  Filter = {
  Bundles = (
                      "com.apple.Security",
                   );
          };
}

safe mode 破解程序本质是dylib,寄生在别人进程里。系统进程一旦出错,可能就导致整个进行奔溃,奔溃后就会造成iOS瘫痪。所以CydiaSubstrate引入了安全模式,在安全模式下,所有基于CydiaSubstrate的第三方dylib都会被禁用,便于差错于修复

fishHook的简单实用

获取代码

git clone https://github.com/facebook/fishhook.git

关键函数

//用来重新板顶符号表的函数,使用它来交换
FISHHOOK_VISIBILITY
int rebind_symbols(struct rebinding rebindings[],size_t rebindings_nel);
参数一:存放rebinding结构体的数组(可以同时交换多个函数)
参数二:rebindings数组的长度
struct rebinding{
  const char *name;//需要HOOK的函数名称,字符串
  void *replacement;//替换到哪个新的函数上(函数指针,也就是函数名称)
void **replaced://保存原始函数指针变量的指针(它是一个二级指针)
}

fishHook原理探究

fishHook 可以HOOK我们的c函数,但是我们知道函数是惊天的,也就是说在编译的时候,编译器就知道了它的实现地址,这也是为什么c函数只写函数声明调用时会报错,那么为什么fishhook还能够修改c函数的调用呢?难道函数也有动态的特性存在?

image.png
fishhook的具体原理可以参考这篇博客

通过符号找字符串

根据fishhook的原理,查看MachO文件

上一篇 下一篇

猜你喜欢

热点阅读