2016-11-20 130 views
0

我正在颠倒iOS固件。有什么方法可以找到内核二进制代码,通过IOConnectCallMethod调用?什么库包含通过IOConnectCallMethod调用的内核代码

+0

IOConnectCallMethod位于IOKit中,而IOKit只是一个插入函数来调用内核中的某些代码。没有任何带有内核代码的库。内核代码在内核中执行。 如果您想在内核中查找代码,您需要在目标恶意软件中查找IOSericeOpen函数并确定服务名称,然后您需要在IOConnectCallMethod函数中查找externalMethod编号。最后一步 - 找到需要的内核扩展和externalMethod。 但无论如何,你的问题并不清楚。 – progopis

+0

非常感谢!要明确,我的问题是如何找到需要的内核扩展和已知数量的externalMethod。 –

+0

btw,你研究的恶意软件名称是什么? – progopis

回答

1

如果我们在谈论iOS内核,首先您应该知道它是加密的。 @xerub在theiphonewiki上载了64位版本的密钥。你也可以使用他的奇妙工具img4来解密它。

因此,让我们假设我们已经为iPhone 5s解密了 kernelcache.release.n51,并且您需要找到GasGauge服务的方法2。

  1. 看由于IOKit /由于IOKit/IOUserClient.h从XNU内核源:

enter image description here

从我们知道externalMethod是虚拟的方法,更registerNotificationPort跟随它(读 - vtable的下一个条目)。

  • 查找一个最大虚函数表在GasGauge驱动器和定位在它registerNotificationPort方法,需要前一个条目:
  • enter image description here

    enter image description here

    :>
  • 下一步是内部externalMethod方法定位表地址

    就像在这里看到的,原始父级的IOUserClient :: externalMethod将在任何情况下被执行。所以,这是另一种找到这种方法的方法。

  • 后在表24个四字,你会看到第一个记录:
  • enter image description here

    但是你应该知道externalMethod方法,落实可从不同这在其他驱动程序中。主要的事情你应该知道 - 你需要找到这个方法和第二个参数(W1寄存器)是方法的索引。另一件事 - 有像IOHID这样的内核扩展,带有多个IOService对象。你应该确定哪一个是你的目标。