实施PT_DENY_ATTACH反盗版代码

时间:2011-08-12 00:04:00

标签: iphone objective-c ios

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

但是,尽管我遵循了这封信,我的应用程序退出了

Program exited with status value:45.

当我测试它时。如果我注释掉函数调用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;
}

最基本的问候, -code

1 个答案:

答案 0 :(得分:15)

代码按预期运行。那就是说,我应该告诉你,你在浪费时间。只有gdb和攻击者/程序员合作时,此方法才有效。像gdb这样的工具的全部意义在于它们非常多才多艺,如果这样一个简单的“bug”阻止它们死亡,有人会很快修复它。 :)

this页上所述,您可以在gdb内执行以下操作:

(gdb) break ptrace
commands 1
    return
    continue
end