越狱下的hook方式以及原理

最近的任务是把当前sdk中的hook 方式替换成MobileHooker

小白表示压力很大,因为C语言学的不怎么样 当初起手就是oc,然后这几天一直在查资料,看了一下原来代码的hook方式

大概是mach-o中的 segment 中的符号替换(看的不是很懂)
然后再念茜的文章看到了fishhook https://github.com/facebook/fishhook 目测实现原理应该是一样的

因为对整体都不是很熟悉,从买到书到现在才半个月,表示压力山大

我目前了解的有 Method Swizzle,fishHook,MobileHooker 中的两种
看了一下书中有一个演示代码,不太懂,然后主要推荐theos 去了 因为我们这个不能做成一个tweak 所以表示不能用

表达很乱 主要想咨询以下几个问题
1、目前主流的hook方式有几种?
2、能否简单讲下原理
3 、fishhook这种方式是否属于mobileHooker ?或者基于mobileSubstrate ? 符号替换的意思能否简单概括下?

大恩言谢 T.T

@snakeninny 求分析一下 感谢啦

  1. 我知道的有method swizzle,仅针对Objective-C方法有效;fishhook,对C函数有效,对Objective-C不知道是否有效;MobileHooker,是CydiaSubstrate的一个组件,对C和Objective-C均有效;
  2. method swizzle的原理主要是Objetive-C的runtime机制,可以在ObjC方法时动态采用class_replaceMethod等runtime函数替换其实现;fishhook的原理是替换mach-o里的符号表,符号表的作用你可以简单理解成,代码在执行到一个函数符号时,不知道这个符号对应的函数实现在内存的哪个地址,需要去一个表里查找这个地址。如果你更改了这个地址,那么函数实现就被改变了;MobileHooker对于ObjC函数采用的也是method swizzle的方法,对于C函数是在函数的开头修改了汇编指令,使其跳转到新的实现,执行完成后再返回执行原指令。
  3. fishhook不同于CydiaSubstrate。

你的目的表达得很不清楚,如果能详细描述一下,有可能有更合理的解决方案。

感谢 原谅我表达混乱 。是这样的 我们现在的hook方式是别人写的类似fishhook的方式实现文件现在是附件中 因为前面对hook方式搞混淆了,不太懂要用哪个 看了你的回复才理清确定是用MSHookFunction

如果有时间想看有时间看下代码吗 其中int iosHookDylib() 是hook实现的过程,
现在打算把其中的iosHookCachedDylibLazyPtr iosHookDylibNotLazyPtr 换成MSHookFunction 但对于其中的参数拼接我试了好几次老是出错
void MSHookFunction(void *symbol, void *replace, void *result);
typedef struct
{
const char funcName;
const uint32_t
oriFuncAddress;
const uint32_t
newFuncAddress;
}FuncInfo;

如果按照MSHookFunction 来拼参数 ,上面这个结构体是否要修改为(void *)?

你的逻辑表达实在是有些混乱,你的问题到底是什么?是不是不会用MSHookFunction?参考官方的例子