3

我想了解如何为 iOS 实现键盘记录器。如果设备上安装了iKeyMonitor(例如),我如何避免在我的应用程序中记录密钥?

经过研究,我发现 ikeyMonitor 在设备上安装了以下文件:

Library/Caches/.keycache
Library/MobileSubstrate/DynamicLibraries/MobileSafe.dylib
Library/MobileSubstrate/DynamicLibraries/MobileSafe.plist
Library/MobileSubstrate/DynamicLibraries/keychain.dylib
Library/MobileSubstrate/DynamicLibraries/keychain.plist

当然它需要MobileSubstrate

在 keycache 中,我可以在 Safari 中使用 URL localhost:8888 打开一些 HTML 文件。

在 plist 中只有com.apple.springboard过滤器,这意味着 MobileSafe.dylib(和所有挂钩)将仅应用于跳板应用程序。

即使我不使用我的应用程序中的默认键盘视图来编辑 a UITextField,键盘记录器仍然有效。这意味着 Hooks 应用在 UITextField 上。

使用class-dumpfor后,SpringBoard.app我没有找到任何可以与UITextField' 实现相关的方法。使用class-dumpfor之后,MobileSafe.dylib我也没有找到任何可以替代 UITextField 的实现(可能是因为它是用 C 编写的),我认为我应该使用 gdb 动态分析 MobileSafe.dylib

  1. SpringBoard(在 plist 中com.apple.springboard)应用程序如何影响 UITextField 类的实现?如果我在 dylib 中对 UITextField 使用方法 swizzling,com.apple.springboard它是否也适用于其他应用程序?

  2. MobileLoaderMobileHooker之间的一般区别是什么?MobileHooker 的更改将在什么时候应用到我的系统?

  3. 我应该怎么做才能从 UIKit 中挂钩一个方法(例如 UITextField 方法),并为我设备上的所有应用程序更改其实现?

  4. 你能建议我使用什么分析 iKeyMonitor 的方法?

4

1 回答 1

1
  1. 如果它在过滤器中使用跳板,那么它只能影响跳板,以挂钩您使用 UIKit 作为过滤器的所有应用程序(更多关于 3)

  2. 我对两者的理解是:MobileLoader 将您的代码加载到正在运行的应用程序中,当这种情况发生时,会调用具有构造函数属性“ __attribute__((constructor))”的函数。在这些构造函数之一中,调用 MobileHooker 函数来替换应用程序中预先存在的函数/方法。至于何时应用更改,因为它们是在构造函数中更改的,所以应该在实际调用它们之前进行更改。

  3. 您只需使用 com.apple.UIKit 过滤器(顺便说一句,它是 iKeyMonitor 中的 keychain.dylib 使用的)

  4. class-dump 不显示调整的挂钩类和方法,因为它们不是 Objective-c 方法,而是函数......最好的选择是像 ida hex-rays.com/products/ida/index 这样的反汇编程序.shtml

于 2013-04-04T01:54:23.847 回答