fishhook学习
2017-08-31 本文已影响69人
Mark_大东
什么是fishhook?
fishhook是facebook提供的一个动态修改链接Mach-O符号表的开源工具
什么是Mach-O?
Mach-O为Mach Object文件格式的缩写,也是用于iOS可执行文件,目标代码,动态库,内核转储的文件格式。Mach-O有自己的dylib规范。
fishhook的原理简介
- dyld链接2种符号,lazy和non-lazy,fishhook可以重新链接/替换本地符号。
- fishhook就是对间接符号表的偏移量动的手脚,提供一个假的nlist结构体
fishhook理解
- fishhook核心是C,实现的是c函数的hook方案;
- fishhook没有使用私有API;
- fishhook可以是现在运行时的动态替换;
- fishhook是在动态替换的是在无网络状态下已经进行了;
- fishhook用法:传入rebind_symbols的第一个参数是一个结构体数组,大括号中为对应数组内容
- fishhook常被用来hook请求,如:BSD Socket、CFNetWork(ASIHTTPRequest)、Udp等,也就是所谓底层修改(性能检测SDK大多也是基于此)
fishhook简单例子
rebind_symbols的第一个参数是一个结构体数组,大括号中为对应数组内容
rebind_symbols((struct rebinding[2]){
{"getaddrinfo", my_getaddrinfo, (void *)&orig_getaddrinfo},
{"connect", my_connect, (void *)&orig_connect},
},2);
NSObjCRuntime.h NSObject.h、NSZone.h将会报出编译异常
- 如果app使用了.pch导入头文件会出现如上错误
- //宏定义的作用是保证OC文件可以调用pch里面的头文件
#ifdef __OBJC__
// *导入文件例子
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#end
关于
1.什么是fishhook?、什么是Mach-O?、fishhook的原理简介等网上的介绍很多
2.fishhook理解、fishhook简单例子、NSObjCRuntime.h NSObject.h、NSZone.h将会报出编译异常来自于开发SDK是遇到的问题,仅供参考
[TOC]