iOS 逆向入门 - 常用反逆向手段
在「iOS 逆向入门 - 绕过抖音反调试」中提到常用反调试手段,这里写下具体实现。 一、常用反逆向手段 1、反调试:ptrace ptrace 被常用于防止 lldb 依附,原理是一个进程只能被 ptrace 只能被一次,先于别人调用 ptrace 则可以防止别人依附。 ptrace 有几种方式进行调用: 1)直接调用 #import <sys/ptrace.h> ptrace(PT_DENY_ATTACH,0,0,0); iOS SDK 中不包含 ptrace.h 头文件,无法使用此方法调用,可使用以下方法。 2)通过 dlopen + dlsym 调用 #import <dlfcn.h> #import <sys/types.h> typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data); #if !defined(PT_DENY_ATTACH) #define PT_DENY_ATTACH 31 #endif void disable_attach() { void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW); ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace"); ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0); dlclose(handle); } 3)通过 syscall 调用 #import <sys/syscall.h> #if !defined(PT_DENY_ATTACH) #define PT_DENY_ATTACH 31 #endif void disable_attach() { syscall(SYS_ptrace, PT_DENY_ATTACH, 0, 0, 0); // #define SYS_ptrace 26 } 4)通过汇编调用 内联 svc + ptrace 实现,相当于直接调用 ptrace(PT_DENY_ATTACH,0,0,0); ...