反调试如何处理库补丁?

Jak*_*sen 1 c iphone debugging android-ndk

有没有人知道解决以下问题的标准技术:

  • 我想检测,如果调试器附加到我的程序(反调试)
  • 但是,攻击者会修补我使用的系统调用/库

例如,在iOS上,sysctl() - 函数可用于检测附加的调试器,但攻击者只需反汇编二进制可执行文件,找到sysctl() - 调用,并用自己的版本替换它们.

我们作为开发人员如何处理这个问题?

我的平台是iOS(iPhone)和原生Android(Android NDK).

Eri*_*hil 7

完全检测调试器在逻辑上是不可能的.程序运行的机器的规范没有指定特定的硅片或其他物理对象 - 它指定了机器的行为.提供规范描述的行为的任何实现都是机器的实现.这包括在实现规范的物理处理器上执行程序,它包括在实现规范的模拟器中执行程序,并且它包括人类阅读机器代码并在纸上实现机器.这些不是"公正"的模仿; 它们实际上是机器的实现.

当机器正确实施时,程序不可能确定机器没有正确实现,因为当然没有偏离规范.然而,我们可以清楚地看到,某些机器的动作和状态完全可由人类观察到,并且可以随意操纵.因此,逻辑上不可能始终检测调试器的存在.

充其量,您可以使用调试器使其变得麻烦,并且可能会掩盖您执行此操作的方式.这可以阻止临时调查员,但不能阻止一个坚定的调查员.