使用theos新建一个iPhone插件项目,在Tweak.x文件中写入如下代码:
FILE *(*old_fopen)(const char *path, const char *mode);
FILE *my_fopen(const char *path, const char *mode)
{
return old_fopen(path, mode);
}
%ctor{
MSHookFunction(&fopen, &my_fopen, (void **)&old_fopen);
%init;
}
MSHookFunction用于hook系统的C语言函数,这里以fopen函数为例,将其替换为自定义的my_fopen函数。
ssh连接iPhone ,使用ps -ax 获取待调试进程的pid.使用 lldb -p pid附加进程:
获取 fopen函数的汇编代码(前面部分):disassemble -A arm64-apple-ios- -n fopen
未进行hook时,函数fopen的汇编代码如下(部分):
对比可以发现函数的前16个字节被更改为:
Ldr x16, #0x8