fishhook - 获取MachO文件内容,并对MachO文件进行修改
2023-11-01 20:50:01
欢迎各位程序员,我们今天的话题是使用fishhook库动态修改MachO文件,fishhook是我们动态修改MachO文件必不可少的利器。
想学习hook并不是为了恶意攻击别人,或者破坏别人的应用,而是为了更好的防护,让自己的应用更加坚固和安全。通过getImp获取原有函数指针,通过replace替换原sel指向的指针为自定义函数指针,通过setImp一样。以上是针对OC的动态特性来hook的,我们可以hook动态语言下的MachO文件吗?
答案是可以,接下来我将手把手带大家使用fishhook库获取MachO文件内容,并对MachO文件进行修改。
我们需要先创建一个新的Xcode项目,然后打开项目的Build Settings,搜索“Mach-O Type”,并将它改为“Dynamic Library”。接下来我们需要安装fishhook库,可以使用以下命令进行安装:
brew install fishhook
安装完成后,我们需要在项目的Bridging Header中导入fishhook库。接下来我们创建一个名为“fishhook.h”的文件,并添加以下内容:
#import <mach-o/dyld.h>
#import <fishhook/fishhook.h>
现在我们就可以开始使用fishhook库了。fishhook库提供了许多函数,我们可以使用这些函数来获取MachO文件的内容,并对MachO文件进行修改。接下来我们创建一个名为“main.m”的文件,并添加以下内容:
#import "fishhook.h"
void my_replace_function() {
NSLog(@"I'm a replaced function!");
}
int main(int argc, char *argv[]) {
// 获取当前进程的Mach-O文件
Dl_info info;
dladdr((void *)main, &info);
// 替换函数指针
rebind_symbols((struct rebinding[1]){
{"my_original_function", (void *)my_replace_function}
}, 1);
// 调用被替换的函数
my_original_function();
return 0;
}
在这个例子中,我们使用fishhook库替换了my_original_function函数的函数指针。当我们调用my_original_function函数时,实际上调用的是my_replace_function函数。
以上介绍了fishhook的使用方法,掌握这些方法之后,大家就可以根据自己的需求对MachO文件进行修改了。