实施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