不正经IT从业者

fishhook学习

2017-08-31  本文已影响69人  Mark_大东

什么是fishhook?

fishhook是facebook提供的一个动态修改链接Mach-O符号表的开源工具

什么是Mach-O?

Mach-O为Mach Object文件格式的缩写,也是用于iOS可执行文件,目标代码,动态库,内核转储的文件格式。Mach-O有自己的dylib规范。

fishhook的原理简介

  1. dyld链接2种符号,lazy和non-lazy,fishhook可以重新链接/替换本地符号。
  2. fishhook就是对间接符号表的偏移量动的手脚,提供一个假的nlist结构体

fishhook理解

  1. fishhook核心是C,实现的是c函数的hook方案;
  2. fishhook没有使用私有API;
  3. fishhook可以是现在运行时的动态替换;
  4. fishhook是在动态替换的是在无网络状态下已经进行了;
  5. fishhook用法:传入rebind_symbols的第一个参数是一个结构体数组,大括号中为对应数组内容
  6. 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将会报出编译异常

  1. 如果app使用了.pch导入头文件会出现如上错误
  2. //宏定义的作用是保证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]

上一篇 下一篇

猜你喜欢

热点阅读