欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

macOS内核调试介绍

来源:本站整理 作者:佚名 时间:2018-12-21 TAG: 我要投稿

对于技术大咖来说,调试内核是一件非常有趣且具有挑战的事情,除非调试过程中发生严重的异常,否则在一般情况下,他们是不会轻易放弃的。不过,技术开发商也知道这一点,他们也在想法设法让内核调试变得越来越难。比如苹果公司就已经采取了一些措施,让macOS的内核调试变得越来越难,首先,将有关debug引导参数的文档信息隐藏在lock和key下,然后将内核调试工具包转移到Developer Account-only Downloads部分。虽然目前互联网上有很多关于在macOS上调试内核的文章,但其中很多都已经不实用了,比如有的文章会告诉调试人员,通过设置的NVRAM启动参数,但这个方法已经不再有效。甚至还有的文章停留在 “现在调试人员应该设置一个有效的调试会话”这样的层面!在这篇文章中,我尽我所能为大家提供最准确和最新的调试信息,包括正确的调试命令,正确的boot-args参数,当然还有具体的调试示例。
开始在macOS上进行内核调试
调试时,要做的第一件事就是进行调试环境的设置和对测试设备的配置,调试人员需要有一个能进行调试的内核对象(在本文中,我使用的是iMac 2011作为调试器)和一个用于调试的设备(本文使用的是MacBook Pro 2009)。虽然调试人员可以使用我在以下讨论的各种方式将两者连接起来,但在本文的示例中,最好的方法(也是最可靠的)似乎是通过两者之间的火线接口(firewire)(这是因为我的两台设备都有firewire端口)而不是USB-C。
硬件部分设置好以后,我们还需要运行一些软件。理论上调试人员可以调试RELEASE内核,但调试人员不是技术大咖,只是一个初学者时,调试Development内核就会轻松得多。默认情况下,macOS里会自带一个位于/System/Library/ kernel /kernel中的RELEASE融合内核,其中kernel是Mach-O 64-bit executable x86_64。所以,我们可以通过导航到Apple Developer门户并下载内核调试工具包,来获得macOS版本的Development内核。令人惊讶的是,苹果公司只是简单将该套件置于正常的、免费的Apple开发者账户( Apple Developer Account)的lock中,按着我原来的想法,我还以为苹果公司是将其置于付费的Apple开发者账户下载之中。
无论如何,一旦调试人员进入到Apple Developer Portal下载部分,调试人员就将看到如下内容。

这个过程非常的重要,这是因为调试人员会在以上的这个列表中,找到适合于他们的特定macOS版本的内核调试工具包,下载后,里面包含调试人员将在调试中启动的内核,如果内核与调试人员的macOS版本不匹配,它将无法启动,甚至对对调试人员的文件、计算机等造成损害。
为macOS版本找到合适的内核调试工具包(Kernel Debug Kit)
要找到正确的内核调试工具包,调试人员必须知道他们的macOS版本和实际的内部版本号。调试人员可以很容易的看到你正在运行的macOS版本,只要打开苹果的图标,按下“关于这台Mac”,然后在窗口中阅读出现的版本信息,例如“10.13.6版本”。
对于实际的内部版本号,调试人员可以单击“关于这个Mac”窗口中的“版本”标签,也可以运行终端命令sw_vers | grep BuildVersion。在本文的示例中,运行sw_vers | grep BuildVersion命令会输出 “BuildVersion: 17G65”。
Last login: Sun Dec  2 03:58:16 on ttys000
Isabella:~ geosn0w$ sw_vers | grep BuildVersion
BuildVersion:    17G65
Isabella:~ geosn0w$
所以,就本文而言,我正在运行的macOS High Sierra(10.13.6)的版本号为17G65。查看刚刚下载的工具包,我可以立即找到和我的版本适应的工具,这样我就可以下载包含安装文件的.DMG文件,文件非常少。

准备调试器以供调试器调试
在调试器(即要调试其内核的设备)上下载调试工具包后,双击安装DMG文件。在DMG文件中,调试人员将找到一个名为KernelDebugKit.pkg的文件,双击它并按照安装向导进行操作。安装完毕,会出现一个询问调试人员macOS登录密码的界面。你可以不理会这个询问,但请不要将此安装程序删掉,调试人员以后还会需要它。
安装完成后的界面看起来如下:

安装完成后,调试人员会被导航到/Library/Developer/KDKs。在那里,调试人员将获得一个名为KDK_YOUR_VERSION_BUILDNUMBER.kdk的文件夹。在本文的示例中,该文件夹名为KDK_10.13.6_17G65.kdk。打开文件夹,调试人员会在其中找到另一个名为“System”的文件夹。导航到文件夹后,先进入“Library”,然后进入“Kernels”。在该文件夹中,调试人员将找到一些内核二进制文件,一些Xcode调试符号文件(.dSYM)等。一般情况下,调试人员对名为kernel.development的文件感兴趣。
将kernel.development复制并粘贴到在RELEASE内核二进制文件中运行的/ System / Library / Kernels /中。此时,调试人员的macOS上应该安装应该有两个内核,一个是RELEASE内核,另一个是DEVELOPMENT内核。
禁用调试器上的SIP
为了正确调试,调试人员可能需要在要调试其内核的计算机上禁用SIP(系统完整性保护)。为此,调试人员需在恢复模式下重新启动计算机。要做到这一点,必须重新启动设备,当调试人员看到启动界面打开时,按CMD + R,等待几秒钟,使启动进入恢复模式用户界面,然后点击“Terminal”继续。
在恢复终端中,写入csrutil disable,然后重新启动计算机,此时只需正常启动即可。
设置正确的NVRAM boot-args
由于苹果公司一直在更新boot-args,因此调试人员在互联网上找到的设置参数可能已经没有用了。以下boot-args已经过测试,确定可以在2018年的macOS High Sierra运行。

[1] [2] [3] [4] [5] [6] [7]  下一页

【声明】:黑吧安全网(http://www.ylxj.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载