iOS应用调试检测以及反调试

一、检测调试

当一个应用被调试的时候,会给进程设置一个标识(P_TRACED),我们可以通过检测该进程是否有设置这个标识来检测进程是否正在被调试以保护好我们的应用。

为了让这个函数以inline方式编译,需要设置编译器的优化选项,-0z(函数以inline方式编译),-fast(加快编译速度)。

如果你不确信产生的目标代码以inline的方式编译该函数,你也可以将其转化成宏的方式。

当前该方法只能检测debugger或dtrace的调试,而不能阻止非法代码注入或者cycript依附。

二、阻止调试(阻止GDB依附)

调用ptrace设置参数PT_DENY_ATTACH,如果有调试器依附,则会产生错误并退出。关于PT_DENY_ATTACH的说明如下:

这时再使用gdb attach的话会产生错误:

Segmentation fault: 11

或者使用gdb run该应用也会产生错误:

Program exited with code 055.


当然该方法也会被调试者下断点的方式来动态绕过或者使用IDA等反汇编工具打补丁绕过,所以我们应该在程序的多处地方调用该方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • layout: wikititle: iOS逆向分析笔记categories: Reverse_Engineeri...
    超哥__阅读 10,950评论 3 16
  • 前提 众所周知,iOS系统安全性非常高,很少出现漏洞,几乎不会中毒。大家认为苹果系统的封闭性会使iOS APP安全...
    小枫123阅读 1,325评论 0 10
  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,572评论 0 26
  • iOS包含许多“秘密”调试工具,包括环境变量、偏好、GCB的常规调用,等等。本技术说明描述了这些工具。如果你开发i...
    栗子烤肉阅读 3,217评论 1 7
  • 我正在参加小学生作文大赛——游戏,非小学生组。(年龄非小学生,智商是,别怀疑!) 先看看无关紧要的图。一看就知道是...
    央烊养样阅读 738评论 10 13