我想了解如何为 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-dump
for后,SpringBoard.app
我没有找到任何可以与UITextField
' 实现相关的方法。使用class-dump
for之后,MobileSafe.dylib
我也没有找到任何可以替代 UITextField 的实现(可能是因为它是用 C 编写的),我认为我应该使用 gdb 动态分析 MobileSafe.dylib
SpringBoard(在 plist 中
com.apple.springboard
)应用程序如何影响 UITextField 类的实现?如果我在 dylib 中对 UITextField 使用方法 swizzling,com.apple.springboard
它是否也适用于其他应用程序?MobileLoader和MobileHooker之间的一般区别是什么?MobileHooker 的更改将在什么时候应用到我的系统?
我应该怎么做才能从 UIKit 中挂钩一个方法(例如 UITextField 方法),并为我设备上的所有应用程序更改其实现?
你能建议我使用什么分析 iKeyMonitor 的方法?