实施PT_DENY_ATTACH反盗版代码

我一直试图从这个wiki实现以下反盗版代码: http ://theiphonewiki.com/wiki/index.php?title=Bugging_Debuggers

但尽pipe如此,我的应用程序退出与一封信

Program exited with status value:45. 

当我testing它。 如果我注释掉函数调用disable_gdb(); 该应用程序正常运行。

我做错了什么? 还是代码正在做,因为它应该…并退出而xcode连接?

 #import <UIKit/UIKit.h> #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) int main(int argc, char *argv[]) { NSLog(@"Main Called "); disable_gdb(); NSLog(@"After cracker code"); NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; } 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 main3(int argc, char *argv[]) { return -1; } 

最亲切的问候,代码

代码正在按预期运行。 也就是说,我应该告诉你,你在浪费你的时间。 这种方法只有在gdb和攻击者/程序员是合作的情况下才有效。 像gdb这样的工具的全部意义在于它们是非常通用的,如果这样一个简单的“错误”阻止了他们死亡的痕迹,有人会很快修复它。 🙂

如本页所述,您可以在gdb执行以下操作:

 (gdb) break ptrace commands 1 return continue end