iOS按键记录器实现



我想了解如何实现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

  1. SpringBoard(即plist com.apple.springboard)应用程序如何对UITextField类实现产生影响?如果我在com.apple.springboard的dylib中使用UITextField的方法swizzling,它会在其他应用程序中也起作用吗?

  2. MobileLoader和MobileHooker的一般区别是什么?什么时候MobileHooker的更改将应用到我的系统?

  3. 我应该怎么做从UIKit钩子一个方法(例如UITextField方法),并改变它的实现在我的设备上的所有应用程序?

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

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

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

  3. 你只需使用com.apple.UIKit过滤器(顺便说一下,这是什么钥匙链。

  4. class-dump不会显示钩子类和方法,因为它们不是objective-c方法,而是函数…最好的选择是像ida这样的反汇编器hex-rays.com/products/ida/index.shtml

最新更新