我想了解如何实现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
当然需要mobilessubstrate
在keycache中有一些HTML文件,我可以用URL localhost:8888在Safari中打开。
在列表中只有com.apple.springboard
过滤器,这意味着MobileSafe。Dylib(和所有钩子)将只应用于跳板应用。
即使我不使用默认的键盘视图在我的应用程序编辑UITextField
,键盘记录器仍然工作。这意味着钩子被应用在UITextField上。
用class-dump
代替SpringBoard.app
后,我没有发现任何可以与UITextField
实现相关的方法。在使用class-dump
MobileSafe.dylib
之后,我没有找到任何可以替代UITextField的实现(也许是因为它写在C上),我认为我应该分析MobileSafe。动态地使用gdb
SpringBoard(即plist
com.apple.springboard
)应用程序如何对UITextField类实现产生影响?如果我在com.apple.springboard
的dylib中使用UITextField的方法swizzling,它会在其他应用程序中也起作用吗?MobileLoader和MobileHooker的一般区别是什么?什么时候MobileHooker的更改将应用到我的系统?
我应该怎么做从UIKit钩子一个方法(例如UITextField方法),并改变它的实现在我的设备上的所有应用程序?
你能建议我用什么方法分析iKeyMonitor ?
-
如果它在过滤器中使用跳板,那么它只能影响跳板,钩子所有的应用程序你使用UIKit作为过滤器(在3中更多)
-
我对两者的理解是:MobileLoader将您的代码加载到正在运行的应用程序中,当这种情况发生时,调用带有构造函数属性"
__attribute__((constructor))
"的函数。在其中一个构造函数中,调用MobileHooker函数来替换应用程序中已有的函数/方法。至于何时应用这些更改,由于它们是在构造函数中更改的,因此应该在实际调用它们之前更改。 -
你只需使用com.apple.UIKit过滤器(顺便说一下,这是什么钥匙链。
-
class-dump不会显示钩子类和方法,因为它们不是objective-c方法,而是函数…最好的选择是像ida这样的反汇编器hex-rays.com/products/ida/index.shtml