2016-11-20 55 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對象。你應該確定哪一個是你的目標。

    相關問題