iOS逆向-ptrace反调试

ptrace头文件不能直接导入app工程,可以直接复制ptrace.h的文件到自己新建的MyPtrace.h中,然后调用
ptrace.h路径:/usr/include/sys/ptrace.h
#import 
#import "AppDelegate.h"
#import "MyPtrace.h"
#import 

int main(int argc, char * argv[]) {
    
    /**
     反调试
     */
    #ifndef PT_DENY_ATTACH
    #define PT_DENY_ATTACH 31
    #endif
    //第一次,通过符号直接调用ptrace
    typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
    ptrace(PT_DENY_ATTACH, 0, 0, 0);
    
    //第二次,通过dlopen,dlsym调用
    void *handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
    ptrace_ptr_t ptrace_ptr = (ptrace_ptr_t)dlsym(handle, "ptrace");
    ptrace_ptr(PT_DENY_ATTACH,0,0,0);
    
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

Xcode运行之后会直接断开连接

你可能感兴趣的:(iOS逆向-ptrace反调试)