在 iOS 上禁用调试会话 - 这有用吗?

Disabling debug sessions on iOS - is that useful?

我最近浏览了这篇文章 (http://www.splinter.com.au/2014/09/16/storing-secret-keys/),其中讨论了 iOS 上的混淆。 我引用:

To somewhat mitigate the risk of crackers attacking your app with a debugger (LLDB or GDB), you can insert some code in your app that makes it crash as soon as it detects a debugger attached. The iTunes app uses this technique, you can read about it here.

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);
}

我知道这些代码行会使调试器在附加到进程时崩溃,但它是如何实现这种行为的?

此外,这是否会以任何方式损害应用程序的稳定性?

关于 OS X 的类似问题似乎已在此处得到解答:Implementing the PT_DENY_ATTACH anti-piracy code

TL;DR - 正如 Jim Ingham 在评论中指出的那样,这是在浪费时间。