我已经反汇编了有问题的函数(_utilPurgeDiskBuffers
)来自 CHUD 框架。该函数似乎不是很复杂,但由于我不是 MacOS 程序员,因此导入和调用的 sys API 对我来说没有多大意义。
API 做的第一件事是调用另一个函数,即_miscUtilsUserClientConnect_internal
。该函数似乎建立了与 CHUD 内核扩展的连接。
为此,它调用_getCHUDUtilsKextService
它尝试通过使用以下命令枚举所有 kext 来定位 CHUD 内核扩展:IORegistryCreateIterator
从 I/O 套件导入。找到kext后,通过以下方式打开它_IOServiceOpen
.
此时,我们已经连接到 CHUD kext(至少这是我从反汇编列表中了解到的)。
最后一个电话IOConnectMethodStructureIStructureO
就这样完成了,我猜它发挥了真正的魔力。
在不知道该函数的一些内部细节或签名的情况下,这些参数对我来说没有意义。
不过,这是反汇编:
__text:4B0157A7 lea eax, [ebp+var_1C]
__text:4B0157AA mov dword ptr [esp+14h], 0
__text:4B0157B2 mov [esp+10h], eax
__text:4B0157B6 mov [esp+0Ch], eax
__text:4B0157BA mov dword ptr [esp+8], 0
__text:4B0157C2 mov dword ptr [esp+4], 0Eh
__text:4B0157CA mov [esp], edx
__text:4B0157CD call _IOConnectMethodStructureIStr
注意var_1C
之前已经被清零了。
希望你们中的一些人能够从这些系统调用中获得更多意义。如果您想了解更多信息,请告诉我。
Update:
要开始使用,只需采取AppleSamplePCIClient.c
IO 套件 SDK 中的示例。这基本上与 CHUD 工具中的清除应用程序的作用相同。
您唯一需要更改的是最终参数_IOConnectMethodStructureIStr
称呼。从上面的反汇编列表中获取它们。我无法测试所有这些东西,因为我没有 Mac。