1

据我所知,在 iOS 中有三种函数挂钩技术:

  1. 使用 DYLD_INSERT_LIBRARIES 预加载库
  2. 使用鱼钩导入符号表重定向
  3. 当它们已经加载时修补函数 - 即使用基板 MSHookFunction已经在内存中

这些暴露了安全问题,所以我希望能够检测到这些事情何时发生。对于第 1 点,我可以应用函数指针验证来检测。但是对于 2 和 3,我没有任何想法。我非常感谢可以解决这个问题的想法。

4

1 回答 1

0

我遇到了同样的问题 - 试图避免在我的应用程序中挂接任何潜在的功能。

我的应用程序最近进行了 PEN 测试,发现在函数挂钩方面存在漏洞。安全报告将弗里达称为执行此类行为的主要罪魁祸首之一。我相信你们中的大多数人都会熟悉这个工具。

OWASP建议了一些补救解决方案来保护您的应用程序,但在这种情况下,标题为Anti-Debugging Checks的部分将是主要关注点。

正如 OWASP 所建议的,我将 ptrace 与 PT_DENY_ATTACH 一起使用 - 拒绝将 GDB/LLDB 进程附加到应用程序。

来自 OWASP:

换句话说,使用带有 PT_DENY_ATTACH 的 ptrace 可以确保没有其他调试器可以附加到调用进程;如果调试器尝试附加,进程将终止

这是我使用的解决方案(用于 Swift)。我还从Raywenderlich.com的这篇文章(Objective-C)中得到了帮助。我可以确认使用链接的解决方案有效 - 应用程序启动但调试器中断,停止所有日志到控制台。这可能会阻止黑客,但总会有办法解决这个问题。如前所述,Raywenderlich 文章链接:

不要太舒服。黑客经常使用 Cycript,这是一种 JavaScript 风格的程序,可以在运行时操纵 Objective-C 应用程序。最可怕的是,当附加 Cycript 时,之前检查调试活动的逻辑会失败。请记住,没有什么是真正安全的……</p>

然而,根据Joseph Lord的说法,使用 Swift 编写应用程序有望在这方面对您有所帮助。但话又说回来,逆向工程师总是赢。

我希望这以某种方式或形式有所帮助......

于 2018-11-15T15:47:55.950 回答