一劳永逸!更新不再替换Kext(Kexts to patch)教程 您所在的位置:网站首页 清除kext缓存 一劳永逸!更新不再替换Kext(Kexts to patch)教程

一劳永逸!更新不再替换Kext(Kexts to patch)教程

2024-07-14 15:32| 来源: 网络整理| 查看: 265

本帖最后由 syscl 于 2015-2-28 14:03 编辑

本文没有什么技术含量,只是在PCBeta(远景),没有一篇介绍给内核扩展(Kext)打补丁、修改的教程,结合自己的心得,分享给远景的朋友们。谢绝转载到远景之外的任何地方。

给内核扩展打补丁,能开启系统中被限制的功能,更接近白苹果。例如修改IOAHCIBlockStorage.kext后,可以开启第三方固态硬盘(SSD)的Trim功能、修改AppleRTC.kext解决重置BIOS的问题、修改AppleHDA.kext驱动音频......

优点:

一劳永逸:系统更新会伴随着内核扩展(Kexts)的更新,导致我们以往所做的修改失效。现在,我们不用担心系统更新导致的修改失效(除非Kext进行了重大改动)。

使用的是系统最新的驱动程序,而不用回滚到旧版本。

不需要重建缓存池。

没有破坏系统中内核扩展的完整性。(可以在『系统信息』―『功能扩展』当中看到,被修改的软件『签署方』)

需要:

含有Kextstopatch功能的Clover (如果采用其他引导工具,则忽略此项)编辑Clover配置文件(Config.plist)的程序(例如Xcode、PlistEdit Pro、Clover Configurator...)采用其他引导工具的朋友(Chameleon、XPC、Ozmosis...)若需要修改Info.plist文件,则需要FakeSMC.kext

在进行操作前,有必要粗略的了解ASCII码。以修改IOAHCIBlockStorage.kext为例:

打开『终端机』,输入

hexdump -C /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage复制代码

显示结果分为三列,文件偏移量,字节的十六进制,ASCII字符。例如说,我要替换掉APPLE SSD这个字符串以实现Trim功能,只需要用『空字符NUL(Null)』替代『APPLE SSD』。

『APPLE SSD』每个字所对应的十六进制是『41』『50』『50』『4c』『45』『20』『53』『53』『44』,摘录成『4150504c4520535344』。用空字符(NUL)去替换每个对应的字,就是『00』『00』『00』『00』『00』『00』『00』『00』『00』,摘录成『000000000000000000』。我们依次把需要替换字符的十六进制、更改后字符的十六进制分别贴入到Clover Configuration当中即可。

为了加强理解,再看一例。让AppleHDA.kext加载修改的Platform.zml.zlib文件。系统在启动的过程中会读取『AppleHDA.kext/Contents/Resources/』下面的xml.zl文件,而我们却希望AppleHDA读取

我们修改的zml.zl以驱动音频。

技巧:

1. 关于查看文件十六进制,在『终端机』中输入hexdump -C之后展开『AppleHDA.kext/Contents/MacOS/』将AppleHDA文件拖入到终端机中即可。

hexdump -C  /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA复制代码

2.『搜索特定字符串,『终端机』中利用组合键『Command+F』』

2.  『xml.zl』6个字符对应的十六进制是『78』『6d』『6c』『2e』『7a』『6c』,摘录成『786d6c2e7a6c』而『zml.zl』6个字符对应的十六进制是『7a』『6d』『6c』『2e』『7a』『6c』,摘录成『7a6d6c2e7a6c』。依次把需要替换字符的十六进制、更改后字符的十六进制分别贴入到Clover Configuration当中即可。

或用『PlistEdit Pro』来配置Clover的Config.plist:

展开『KernelAndKextPatches』,选中『KextsToPatch』并右键,选中『New Child』以创建子项

在创建好的子项『Child』下面填入:

Find,类型:Data,值:786d6c2e7a6cName,类型:String,值:AppleHDAReplace,类型:Data,值:7a6d6c2e7a6c

当然,如果你熟悉Base64,plist的构成 ,也可以抛弃Clover Configurator,Xcode,PlistEdit Pro,直接用『文本编辑器』编辑Config.plist。把『786d6c2e7a6c』转换成『eG1sLnps』,『7a6d6c2e7a6c』转换成『em1sLnps』,然后贴入即可。

当遇到修改Info.plist时:

以修改『AppleGraphicsPowerManagement.kext』实现显卡降频为例。

在终端中输入:

hexdump -C /System/Library/Extensions/AppleGraphicsPowerManagement.kext/Contents/Info.plist复制代码

找到要替换的显卡ID,例如把『Device0fea』替换成『Device0402』。『Device0fea』字对应的十六进制值分别是『44』『65』『76』『69』『63』『65』『30』『66』『65』『61』,摘录成『44657669636530666561』。『Device0402』字的十六进制值分别是『44』『65』『76』『69』『63』『65』『30』『34』『30』『32』,摘录成『44657669636530343032』。依次把需要替换字符的十六进制、更改后字符的十六进制分别贴入到Clover Configuration当中,并勾选『InfoPlist Patch』。

重建缓存后,重启两次即可。

当然,我们还有更好的方法去加载AGPM,那就是通过FakeSMC.kext。利用FakeSMC.kext可以抛弃Clover,转而采用其他的引导工具(例如Chameleon、XPC、Ozmosis...)也不需要重新建立缓存。以iMac 14,2(Mac-27ADBB7B4CEE8E61)加载Geforce 8600 GT(VenderID 0402)为例。只需要:

       从『AppleGraphicsPowerManagement.kext/Contents/Info.plist』中复制出『IOKitPersonalities』下面的『AGPM』,粘贴到『FakeSMC.kext/Contents/Info.plist』下的『IOKitPersonalities』。

        在刚才粘贴的项目下面,找到『Machines/Mac-27ADBB7B4CEE8E61/』,把『Vendor10deDevice0fea』改成『Vendor10deDevice0402』

成功加载后,我们可以看到签署方是漂亮的『Software Signing, Apple Code Signing Certification Authority, Apple Root CA』,而非『未知』。这也表明,这种加载方式不破坏系统内核扩展的完整性。

////

一些修改的模板和参考


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有