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

时间:2015-01-29 11:11:17

标签: ios debugging

我最近介绍了这篇关于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);
}

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

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

1 个答案:

答案 0 :(得分:2)

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

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