我想了解如何为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文件。
在plists中只有com.apple.springboard
过滤器,这意味着MobileSafe.dylib(以及所有挂钩)仅适用于
跳板应用。
即使我不在我的应用程序中使用默认键盘视图来编辑UITextField
,键盘记录器仍可正常工作。这意味着Hooks应用于UITextField。
对class-dump
使用SpringBoard.app
后,我找不到任何与UITextField
实施相关的方法。在class-dump
使用MobileSafe.dylib
之后,我找不到任何可替代UITextField的实现(也许是因为它是用C语言编写的),我认为我应该用gdb动态分析MobileSafe.dylib
SpringBoard(在plist com.apple.springboard
)应用程序中如何对UITextField类实现产生影响?如果我在dylib中为com.apple.springboard
使用UITextField的方法调整,它是否也适用于其他应用程序?
MobileLoader和MobileHooker之间的一般区别是什么?什么时候MobileHooker的更改将应用于我的系统?
如何从UIKit挂钩方法(例如UITextField方法),并更改设备上所有应用的实现?
您可以建议我使用哪种分析iKeyMonitor的方法?
答案 0 :(得分:1)
如果它在过滤器中使用跳板,那么它只会影响跳板,挂钩您使用UIKit作为过滤器的所有应用程序(更多关于3)
我对这两者的理解是:
MobileLoader将您的代码加载到正在运行的应用程序中,当发生这种情况时,将调用构造函数属性“__attribute__((constructor))
”的函数。在其中一个构造函数中,调用MobileHooker函数来替换应用程序中预先存在的函数/方法。至于应用更改的时间,因为它们在构造函数中被更改,所以在实际调用它们之前应该更改它们。
您只需使用com.apple.UIKit过滤器(btw是iKeyMonitor中的keychain.dylib使用的)
class-dump没有显示调整的钩子类和方法,因为它们不是objective-c方法,而是函数... 最好的选择是像ida hex-rays.com/products/ida/index.shtml