gpt4 book ai didi

ios - 防止方法 Swizzling Objective-c

转载 作者:可可西里 更新时间:2023-11-01 05:18:28 25 4
gpt4 key购买 nike

我正在尝试搜索以防止在我当前的库中使用 Method Swizzle,但我发现的每篇文档或博客文章或多或少都是关于如何实现 Swizzling 的。我有几个关于 Method swizzling 的问题,但我找不到所有问题。

  • 如何在运行时检测 Method Swizzling?
  • 万一有 Method Swizzle 如何预防呢?

我知道 method swizzling 的危险,并且已经阅读了这里的相关帖子,但找不到相关信息来防止它。

如果有任何关于上述主题的文档或博客文章,我将不胜感激。

最佳答案

避免方法调配很简单;使用函数而不是方法(即在 C++ 中或至少在 Core Foundation 中以没有对象的老式方式做事)。但如果您使用的是 ObjC 运行时,您可能会感到困惑。

原则上,您可以通过缓存所有 IMP 指针来检测 swizzling,例如在 +load 或 C++ 中使用 class_getMethodImplementation全局变量上的构造函数(在 main() 之前运行),然后在不同时间重新检查所有 IMP 指针以确保它们没有改变。

这可能不会难,但很难想象所有这一切会实现什么。如果有人拥有您的框架二进制文件,那么修补它以删除您的支票就不会是一个很大的努力。在源代码的某处,必须有一个 if (swizzled) { ... },它将在程序集中转换为一个分支 if 条件指令。你在系统上安装一个调试器,等待分支“啊!我们被弄乱了”发生,记下它发生的地方,然后将该字节修补为“如果不是则分支”或者只是添加一个无条件跳转.

要减慢攻击速度,哪怕是一点点,都需要大量的混淆。有一些技术(大多数效果不佳),但它们只有在保密的情况下才能发挥作用。这就是混淆和安全之间的区别。

简短的回答是你真的无法以任何稳定的方式实现这一点。这意味着你要么需要一个团队致力于不断提出新的、更高级的混淆并在新攻击出现时定期更新它们(即像暴雪或苹果这样的公司如何防止黑客攻击),要么你需要找到一种方法不需要这个。

最简单的答案?主要在 C++ 中工作并尽可能少地使用 ObjC 类(这将防止 swizzling,但不是逆向工程或修补)。或者接受调配是不可避免的。

(顺便说一句,如果这个问题甚至有一个“我愿意做任何事情”的答案,那么 Apple 就会使用该技术使越狱变得不可能。iPhone 经常越狱的事实表明越狱的难度问题。)

关于ios - 防止方法 Swizzling Objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41943150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com