ios中存在动态链接和静态链接,而对于静态链接的符号,fishhook是无法进行hook的,原因请参考这篇文章软件测试之SDK开发(ios)——fishHook原理介绍
下面介绍一种可以hook静态链接符号的方法。自定义c函数都是静态符号,例子如下
int cfunc(int x,int y){
return x+y ;
}
inline hook已经有成熟的开源实现inline hook,下载后将libhook.a
引入到工程中。编写hook代码如下所示:
static int (*old_cfunc)(int x,int y) ;
static int hook_cfunc(int x,int y){
NSLog(@"c func hook,%d,%d",x,y) ;
return old_cfunc(x,y) ;
}
static const struct substitute_function_hook hooks[] = {
{cfunc, hook_cfunc, &old_cfunc},
};
void test_inline_hook() {
int ret = substitute_hook_functions(&hooks[0], sizeof(hooks)/sizeof(*hooks),
NULL, 0);
if(!ret){
NSLog(@"hook success") ;
}
}
运行代码,如下图所示,成功进入了我们的hook 代码
成功hook到了c函数
参考文章
1、https://github.com/anahadaw/iOS_Hook/tree/master/HookDemo
2、https://cloud.tencent.com/developer/article/1339855
3、非越狱设备Hook 纯Swift工程Swift函数