我正在尝试防止应用程序使用钩子。将“ ptrace”与PT_DENY_ATTACH一起使用,以确保没有任何挂钩框架可以附加到调用过程中。如果此类框架尝试连接,则该过程将终止。
在main.m文件中。
#import <sys/types.h>
int main(int argc, char *argv[]) {
#ifndef DEBUG
ptrace(PT_DENY_ATTACH, 0, 0, 0);
#endif
}
构建成功,但是在归档时却抛出错误
implicit declaration of function 'ptrace' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
ptrace(PT_DENY_ATTACH, 0, 0, 0);
use of undeclared identifier 'PT_DENY_ATTACH'
尝试了另一种解决方案:
#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 // !defined(PT_DENY_ATTACH)
void disable_gdb() {
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);
}
int main(int argc, char *argv[]) {
@autoreleasepool {
disable_gdb();
}
return UIApplicationMain(argc, argv, nil, className);
}
我希望应用能够生成,但最终会出错:
Initializing 'ptrace_ptr_t' (aka 'int (*)(int, int, char *, int)') with an expression of type 'void *' converts between void pointer and function pointer