我想了解如何为 iOS 实现按键记录器。如果有 iKeyMonitor,我怎样才能避免在我的应用程序中记录 key ? (例如)安装在设备上?
经过研究,我发现 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 中有一些 HTML 文件,我可以使用 URL localhost:8888 在 Safari 中打开它们。
在 plists 中只有 com.apple.springboard
过滤器,这意味着 MobileSafe.dylib(和所有 Hook )将仅应用于
跳板应用。
即使我不在我的应用程序中使用默认键盘 View 来编辑 UITextField
,键盘记录器仍然有效。这意味着 Hooks 应用于 UITextField。
在为 SpringBoard.app
使用 class-dump
之后,我没有找到任何可以与 UITextField
的实现相关的方法。在为 MobileSafe.dylib
使用 class-dump
之后,我也没有找到任何可以替代 UITextField 的实现(可能是因为它是用 C 编写的),我认为我应该用 gdb 动态分析 MobileSafe.dylib
SpringBoard(在 plist
com.apple.springboard
中)应用程序如何影响 UITextField 类的实现?如果我在com.apple.springboard
的 dylib 中对 UITextField 使用方法调配,它是否也适用于其他应用程序?MobileLoader 之间的一般区别是什么?和 MobileHooker ?来自 MobileHooker 的更改何时会应用到我的系统?
我应该怎么做才能从 UIKit Hook 一个方法(例如 UITextField 方法),并为我设备上的所有应用更改它的实现?
您能建议我用什么方法分析iKeyMonitor?
最佳答案
如果它在过滤器中使用 springboard 则它只能影响 springboard, Hook 所有使用 UIKit 作为过滤器的应用程序(更多内容在 3 中)
我对两者的理解是: MobileLoader 将您的代码加载到正在运行的应用程序中,当发生这种情况时,将调用具有构造函数属性“
__attribute__((constructor))
”的函数。在其中一个构造函数中,调用 MobileHooker 函数来替换应用程序中预先存在的函数/方法。至于何时应用更改,由于它们是在构造函数中更改的,因此应该在实际调用它们之前进行更改。您只需使用 com.apple.UIKit 过滤器(顺便说一下,iKeyMonitor 中的 keychain.dylib 使用的是什么)
class-dump 不显示调整的 Hook 类和方法,因为它们不是 objective-c 方法,而是函数... 最好的选择是像 ida hex-rays.com/products/ida/index.shtml 这样的反汇编程序
关于iphone - iOS 键盘记录器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15789674/