防止lldb调式

2020-08-13  本文已影响0人  super_2e20
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <dlfcn.h>

//定义一个函数指针用来接收动态加载出来的函数ptrace
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_lldb() {
#if defined(DEBUG) ||defined(_DEBUG)

#else
 //动态加载并链接指定的库
 void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
//动态加载ptrace函数,ptrace函数的参数个数和类型,及返回类型跟 ptrace_ptr_t函数指针定义的是一样的

 ptrace_ptr_t ptrace_ptr = (ptrace_ptr_t)dlsym(handle, "ptrace");
 //执行ptrace_ptr相当于执行ptrace函数

 ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
#endif
}

int main(int argc, char * argv[]) {
disable_lldb();
@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
  }
上一篇 下一篇

猜你喜欢

热点阅读