今天有一个需求,需要对项目进行反调试处理 查看了很多的博客,终于找到了,大多写的不是很全.我总结下.
一般使用
ptrace_ptr(PT_DENY_ATTACH,0,0,0);来反调试。
首先要在工程的main.m类中导入头文件#include
我查找了几篇博客都没写这个,导致了很多错误.
然后就是代码部分了
typedefint(*ptrace_ptr_t)(int_request,pid_t_pid,caddr_t_addr,int_data);
void* dlopen(constchar* pathname,intmode );
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH31
#endif // !defined(PT_DENY_ATTACH)
voiddisable_gdb() {
void* handle =dlopen(0,RTLD_GLOBAL|RTLD_NOW);
ptrace_ptr_tptrace_ptr =dlsym(handle,"ptrace");
ptrace_ptr(PT_DENY_ATTACH,0,0,0);
dlclose(handle);
}
最后在 main 函数中调用
intmain(intargc,char* argv[]) {
/**防止GDB挂起*/
#ifndef DUBUG
disable_gdb();
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
不过还有反反调试,可以破解反调试的.
1,ptrace这个函数很容易修改,几种破解方式
运行时期,断点ptrace,直接返回 :
通过tweak,替换disable_gdb函数
在二进制文件中 ,修改 PT_DENY_ATTACH的31,改成 任意一个值,如PT_ATTACH 0.
2,开发者要达到反调试的目的,必然是在某个地方(大多数还是在main函数)执行了ptrace(PT_DENY_ATTACH, 0, 0, 0)。所以反反调试的思路非常简单,就是阻止这个执行的发生。
既然lldb有-w这个选项来等待一个进程的启动,你可以使用lldb来捕获到一个进程的启动并在程序执行到ptrace命令之前修改或忽略PT_DENY_ATTACH命令。
命令行执行:➜ ~ sudo lldb -n "helloptrace" -w。这里用sudo是因为lldb的一个bug,当你让lldb等待某个进程的启动时不用sudo会出错。
找到上述项目的二进制文件,拖到命令行中执行,然后lldb就应该能够成功attach上去:
➜ ~ sudo lldb -n"helloptrace"-w(lldb) process attach --name"helloptrace"--waitforProcess 8336 stopped* thread#1, stop reason = signal SIGSTOPframe#0: 0x0000000109522b9a dyld`__ioctl + 10dyld`__ioctl:-> 0x109522b9a <+10>: jae 0x109522ba4 ; <+20> 0x109522b9c <+12>: mov rdi, rax 0x109522b9f <+15>: jmp 0x109522325 ; cerror 0x109522ba4 <+20>: retExecutable modulesetto"/Users/gogleyin/Library/Developer/Xcode/DerivedData/helloptrace-bjtaxdebpzdyraaogpbcrihdgwku/Build/Products/Debug/helloptrace".Architecturesetto: x86_64h-apple-macosx.
创建如下断点:
(lldb) rb ptrace -s libsystem_kernel.dylib
continue继续执行后你就会在ptrace函数将要执行时停下来。你可以用lldb来让程序不执行那个函数并提前返回:
(lldb) thread return 0
continue继续执行,一个反反调试就达成了!虽然程序进入了ptrace函数,但你是告诉lldb让它提前返回使得函数逻辑没有得到执行。
参考博客:
链接:https://www.jianshu.com/p/75776311ae36
链接:https://www.jianshu.com/p/13e90ec55234
链接:https://segmentfault.com/a/1190000012216003