ios 逆向开发

《iOS防护02》破解ptrace防护

2020-10-30  本文已影响0人  不仅仅是个程序猿

本文接上一篇《iOS防护01》ptrace防护 ,实现破解ptrace防护。

创建动态库

因动态库的加载在main函数之前,所以通过动态库中编写代码实现hook。

  1. 按照下图步骤创建动态库


    截屏2020-10-30上午10.48.33.png
截屏2020-10-30上午10.52.25.png

按照上图创建完后,targets会多出来一个动态库(我创建的动态库名称为Inject)。


截屏2020-10-30上午10.59.11.png
动态库中实现hook

在Inject目录下导入fishhook文件(fishhook.h和fishhook.c),ptrace头文件(PtraceHeader.h),并创建OC类(InjectPtrace)进行hook。


截屏2020-10-30上午11.04.22.png

InjectPtrace.m中编写hook代码:

#import "InjectPtrace.h"
#import "PtraceHeader.h"
#import "fishhook.h"

@implementation InjectPtrace

//创建一个指针,保存系统ptrace函数的地址
int (*sys_ptrace) (int _request, pid_t _pid, caddr_t _addr, int _data);

//自定义的函数
int my_ptrace(int _request, pid_t _pid, caddr_t _addr, int _data) {
    if (_request != PT_DENY_ATTACH) {
        return sys_ptrace(_request, _pid, _addr, _data);
    }
    return 0;
}

+ (void)load {
    //定义一个rebinding结构体
    struct rebinding rebind;
    
    //给结构体属性赋值
    rebind.name = "ptrace";                  //要hook的系统函数名称,C字符串
    rebind.replacement = my_ptrace;          //自定义的函数地址
    rebind.replaced = (void *)&sys_ptrace;   //系统函数的指针

    //定义一个rebindings结构体数组
    struct rebinding binds[] = {rebind};
    
    //符号进行重新绑定,参数为一个rebindings结构体数组和数组长度
    rebind_symbols(binds, 1);
}

@end
上一篇下一篇

猜你喜欢

热点阅读