Macos 反编译Mac内核扩展?

Macos 反编译Mac内核扩展?,macos,Macos,可以反编译Mac内核扩展吗?理论上,可以反编译任何二进制代码 内核扩展有点棘手,因为 A)它们是C++,所以虚拟方法使代码更难遵循。 b) 链接在内核扩展中发生的方式不同,因此任何反编译器都需要专门设计来处理内核扩展,以便找到依赖项和符号名。您可以使用gdb(正如nate c建议的那样)检查内核扩展的汇编代码。我不知道有专门针对内核扩展的反编译器 您可以使用kextload工具创建一个可以加载到gdb中的符号文件。这将让您看到函数的解码符号名,&c。这里有一个崩溃(哈哈,明白吗?)教程: 为什么

可以反编译Mac内核扩展吗?

理论上,可以反编译任何二进制代码

内核扩展有点棘手,因为 A)它们是C++,所以虚拟方法使代码更难遵循。 b) 链接在内核扩展中发生的方式不同,因此任何反编译器都需要专门设计来处理内核扩展,以便找到依赖项和符号名。

您可以使用gdb(正如nate c建议的那样)检查内核扩展的汇编代码。我不知道有专门针对内核扩展的反编译器

您可以使用kextload工具创建一个可以加载到gdb中的符号文件。这将让您看到函数的解码符号名,&c。这里有一个崩溃(哈哈,明白吗?)教程:


为什么要这样做?

使用

反编译C++代码,意味着你必须正确地定义结构:当对象有虚拟方法时,对象中的第一个项将是指向对象的VTABLE的指针。 如果您也在IDA或hexrays中声明vtable,并确保所有类型的函数指针都是正确的,那么hexrays将生成可读性很强的代码


但是,你感兴趣的KEXT部分是用C类C++编写的,你根本不需要担心。< /P> < P>求64位KEXT的反转,获得IDA Pro和X64 Decompiler(Mac/LIN/Win)。 此外,通常可以使用lldb远程设置调试kext(不带符号)。(gdb不见了。)

如果你碰巧在一家大型的安全商店工作,那么就做一些简单的工作:签署保密协议,给第一个孩子权利,然后获得OSX源代码

此外,这里还有大量反编译器:


< /P>我更感兴趣的是,你需要做的事情是,需要反编译一个MAC内核扩展。不是Objyto.OSX内核模块是用C++的一个子集编写的。虽然你可能会得到相反的答案,但是反编译是不可能的。C编译是有损的,例如不是1到1的映射,所以一些工具可以声称给出。一个可能是C代码的程序,没有工具可以肯定地再现实际的C代码。调试器是对可执行文件进行逆向工程的工具。我也很感兴趣,如果你发现了,请告诉我你可以用纯C编写一个OS X kext。肯:kextload句柄a)和b)它们非常容易理解,因为许多kext都是纯C和开源的。(IOKit kexts更多/更少需要一个C++的子集),此外,你可以抓住几乎所有开源的KDK,为什么你会质疑某人的好奇心?自由修补!我认为这更像是“也许我能给你一个更好的答案”,对于32位的版本,ida演示包含了32位的反编译器。