mach-o动态注入原理
本文主要讲解开源工具yololib的实现原理,超级简单,源码总共也就200多行,并无多大技术含量,主要是为了记录备忘
命令
// 命令基本用法
yololib <mach-o> <dylib file>
入口代码
可以看出,这里是记录了2个路径,然后调用了
inject_file
函数
函数:inject_file
步骤:
- fopen打开mach-o
- fread读取mach-o信息
- 根据读取到的buffer获取fat_header信息
struct fat_header* fh = (struct fat_header*) (buffer);
- 根据magic类型来区分32位还是64位:若magic=FAT_MAGIC时,需要用cputype来区分
- 然后32位调用
inject_dylib
,64位调用inject_dylib_64
函数:inject_dylib
函数:inject_dylib_64
原理
#include <mach-o/loader.h>
,这个头文件中用到一个重要的结构体,就是dylib_command
,需要通过设置它的参数来注入,最终调用fwrite
来写入即可。