我最近介绍了这篇关于iOS上混淆的文章(http://www.splinter.com.au/2014/09/16/storing-secret-keys/)。 我引用:
为了有效降低破解者使用调试器(LLDB或GDB)攻击您的应用程序的风险,您可以在应用程序中插入一些代码,以便在检测到附加的调试程序时立即崩溃。 iTunes应用程序使用这种技术,你可以在这里阅读它。
这是通过在main()
#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);
}
我知道这些代码行会在调试程序附加到进程时崩溃,但它是如何实现此行为的?
另外,这会以任何方式损害应用程序的稳定性吗?
答案 0 :(得分:2)
似乎OS X上的类似问题已在此处得到解答:Implementing the PT_DENY_ATTACH anti-piracy code。
TL; DR - 正如Jim Ingham在评论中指出的那样,这是浪费时间。