diff --git a/CHANGELOG.md b/CHANGELOG.md index edb377bbc..d2ecedda7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,15 @@ # OpenCore Legacy Patcher changelog ## 0.3.2 +- Implement spoofless support (ie. no SMBIOS patching) + - Requires macOS 11.3 or newer, for 11.2.3 and older use Minimal or higher spoofing + - See additional notes before updating: [VMM usage notes](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/543#issuecomment-953441283) ## 0.3.1 +- Increment Binaries: + - OpenCorePkg 0.7.4 release + - RestrictEvents 1.0.5 release + - WhateverGreen 1.5.4 release - Allow for setting custom SIP values via TUI - Drop `CSR_ALLOW_EXECUTABLE_POLICY_OVERRIDE` requirement for root patching - Lowers default SIP Disabled value to 0xA03 diff --git a/payloads/Config/config.plist b/payloads/Config/config.plist index 05cc62cf4..e4ef87826 100644 --- a/payloads/Config/config.plist +++ b/payloads/Config/config.plist @@ -216,7 +216,56 @@ MmioWhitelist Patch - + + + Arch + x86_64 + Comment + Skip Board ID check + Count + 0 + Enabled + + Find + AFAAbABhAHQAZgBvAHIAbQBTAHUAcABwAG8AcgB0AC4AcABsAGkAcwB0 + Identifier + Apple + Limit + 0 + Mask + + Replace + AC4ALgAuAC4ALgAuAC4ALgAuAC4ALgAuAC4ALgAuAC4ALgAuAC4ALgAu + ReplaceMask + + Skip + 0 + + + Arch + x86_64 + Comment + Reroute HW_BID to OC_BID + Count + 0 + Enabled + + Find + SABXAF8AQgBJAEQA + Identifier + Apple + Limit + 0 + Mask + + Replace + TwBDAF8AQgBJAEQA + ReplaceMask + + Skip + 0 + + Quirks AllowRelocationBlock @@ -1262,6 +1311,96 @@ Skip 0 + + Arch + x86_64 + Base + + Comment + Reroute kern.hv_vmm_present patch (1) + Count + 1 + Enabled + + Find + AGRpcmVjdF9oYW5kb2ZmAEVuYWJsZSBkaXJlY3QgaGFuZG9mZiBmb3IgcmVhbHRpbWUgdGhyZWFkcwA= + Identifier + kernel + Limit + 0 + Mask + + MaxKernel + + MinKernel + 20.4.0 + Replace + AGh2X3ZtbV9wcmVzZW50AEVuYWJsZSBkaXJlY3QgaGFuZG9mZiBmb3IgcmVhbHRpbWUgdGhyZWFkcwA= + ReplaceMask + + Skip + 0 + + + Arch + x86_64 + Base + + Comment + Reroute kern.hv_vmm_present patch (2) + Count + 1 + Enabled + + Find + AGh2X2Rpc2FibGUAaHZfdm1tX3ByZXNlbnQA + Identifier + kernel + Limit + 0 + Mask + + MaxKernel + + MinKernel + 20.4.0 + Replace + AGh2X2Rpc2FibGUAZGlyZWN0X2hhbmRvZmYA + ReplaceMask + + Skip + 0 + + + Arch + x86_64 + Base + _IOGetVMMPresent + Comment + Force IOGetVMMPresent + Count + 0 + Enabled + + Find + + Identifier + kernel + Limit + 0 + Mask + + MaxKernel + + MinKernel + 20.4.0 + Replace + uAEAAADD + ReplaceMask + + Skip + 0 + Quirks @@ -1278,7 +1417,7 @@ DisableIoMapper DisableLinkeditJettison - + DisableRtcChecksum ExtendBTFeatureFlags @@ -1401,7 +1540,7 @@ ScanPolicy 0 SecureBootModel - j137 + Default Vault Optional @@ -1710,6 +1849,8 @@ Drivers + Comment + Path OpenRuntime.efi Enabled @@ -1718,6 +1859,8 @@ + Comment + Path OpenCanopy.efi Enabled @@ -1726,6 +1869,8 @@ + Comment + Path NvmExpressDxe.efi Enabled @@ -1734,6 +1879,8 @@ + Comment + Path ExFatDxeLegacy.efi Enabled @@ -1742,6 +1889,8 @@ + Comment + Path XhciDxe.efi Enabled @@ -1750,6 +1899,8 @@ + Comment + Path OpenLinuxBoot.efi Enabled diff --git a/payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3.zip b/payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3-DEBUG.zip similarity index 100% rename from payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3.zip rename to payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3-DEBUG.zip diff --git a/payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3-RELEASE.zip b/payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3-RELEASE.zip new file mode 100644 index 000000000..f224023d7 Binary files /dev/null and b/payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/AppleALC-v1.6.3.zip b/payloads/Kexts/Acidanthera/AppleALC-v1.6.3-DEBUG.zip similarity index 100% rename from payloads/Kexts/Acidanthera/AppleALC-v1.6.3.zip rename to payloads/Kexts/Acidanthera/AppleALC-v1.6.3-DEBUG.zip diff --git a/payloads/Kexts/Acidanthera/AppleALC-v1.6.3-RELEASE.zip b/payloads/Kexts/Acidanthera/AppleALC-v1.6.3-RELEASE.zip new file mode 100644 index 000000000..a4354425f Binary files /dev/null and b/payloads/Kexts/Acidanthera/AppleALC-v1.6.3-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip b/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip deleted file mode 100644 index d56c4bf30..000000000 Binary files a/payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip and /dev/null differ diff --git a/payloads/Kexts/Acidanthera/CPUFriend-v1.2.4.zip b/payloads/Kexts/Acidanthera/CPUFriend-v1.2.4-DEBUG.zip similarity index 100% rename from payloads/Kexts/Acidanthera/CPUFriend-v1.2.4.zip rename to payloads/Kexts/Acidanthera/CPUFriend-v1.2.4-DEBUG.zip diff --git a/payloads/Kexts/Acidanthera/CPUFriend-v1.2.4-RELEASE.zip b/payloads/Kexts/Acidanthera/CPUFriend-v1.2.4-RELEASE.zip new file mode 100644 index 000000000..20dcaa931 Binary files /dev/null and b/payloads/Kexts/Acidanthera/CPUFriend-v1.2.4-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4.zip b/payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4-DEBUG.zip similarity index 100% rename from payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4.zip rename to payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4-DEBUG.zip diff --git a/payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4-RELEASE.zip b/payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4-RELEASE.zip new file mode 100644 index 000000000..c11988c20 Binary files /dev/null and b/payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3.zip b/payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3-DEBUG.zip similarity index 100% rename from payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3.zip rename to payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3-DEBUG.zip diff --git a/payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3-RELEASE.zip b/payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3-RELEASE.zip new file mode 100644 index 000000000..be99b2ea7 Binary files /dev/null and b/payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/Lilu-v1.5.6.zip b/payloads/Kexts/Acidanthera/Lilu-v1.5.6-DEBUG.zip similarity index 100% rename from payloads/Kexts/Acidanthera/Lilu-v1.5.6.zip rename to payloads/Kexts/Acidanthera/Lilu-v1.5.6-DEBUG.zip diff --git a/payloads/Kexts/Acidanthera/Lilu-v1.5.6-RELEASE.zip b/payloads/Kexts/Acidanthera/Lilu-v1.5.6-RELEASE.zip new file mode 100644 index 000000000..6abc29e88 Binary files /dev/null and b/payloads/Kexts/Acidanthera/Lilu-v1.5.6-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/NVMeFix-v1.0.9.zip b/payloads/Kexts/Acidanthera/NVMeFix-v1.0.9-DEBUG.zip similarity index 100% rename from payloads/Kexts/Acidanthera/NVMeFix-v1.0.9.zip rename to payloads/Kexts/Acidanthera/NVMeFix-v1.0.9-DEBUG.zip diff --git a/payloads/Kexts/Acidanthera/NVMeFix-v1.0.9-RELEASE.zip b/payloads/Kexts/Acidanthera/NVMeFix-v1.0.9-RELEASE.zip new file mode 100644 index 000000000..62ce4d810 Binary files /dev/null and b/payloads/Kexts/Acidanthera/NVMeFix-v1.0.9-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.5-DEBUG.zip b/payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.5-DEBUG.zip new file mode 100644 index 000000000..287bf0c61 Binary files /dev/null and b/payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.5-DEBUG.zip differ diff --git a/payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.5.zip b/payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.5.zip index 287bf0c61..67b748aed 100644 Binary files a/payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.5.zip and b/payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.5.zip differ diff --git a/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5-DEBUG.zip b/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5-DEBUG.zip new file mode 100644 index 000000000..2bfec5841 Binary files /dev/null and b/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5-DEBUG.zip differ diff --git a/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5-RELEASE.zip b/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5-RELEASE.zip new file mode 100644 index 000000000..b30992f71 Binary files /dev/null and b/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5-RELEASE.zip differ diff --git a/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5.zip b/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5.zip deleted file mode 100644 index e239d0437..000000000 Binary files a/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.5.zip and /dev/null differ diff --git a/payloads/Kexts/Acidanthera/SidecarFixup-v1.0.2.zip b/payloads/Kexts/Acidanthera/SidecarFixup-v1.0.2.zip deleted file mode 100644 index f9c5c936b..000000000 Binary files a/payloads/Kexts/Acidanthera/SidecarFixup-v1.0.2.zip and /dev/null differ diff --git a/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.3.zip b/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.3.zip deleted file mode 100644 index d1412b19a..000000000 Binary files a/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.3.zip and /dev/null differ diff --git a/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.4-DEBUG.zip b/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.4-DEBUG.zip new file mode 100644 index 000000000..6074aeaca Binary files /dev/null and b/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.4-DEBUG.zip differ diff --git a/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.4-RELEASE.zip b/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.4-RELEASE.zip new file mode 100644 index 000000000..9ca63d82f Binary files /dev/null and b/payloads/Kexts/Acidanthera/WhateverGreen-v1.5.4-RELEASE.zip differ diff --git a/payloads/OpenCore/OpenCore-DEBUG.zip b/payloads/OpenCore/OpenCore-DEBUG.zip index a5c70cc49..6cb2a7041 100644 Binary files a/payloads/OpenCore/OpenCore-DEBUG.zip and b/payloads/OpenCore/OpenCore-DEBUG.zip differ diff --git a/payloads/OpenCore/OpenCore-RELEASE.zip b/payloads/OpenCore/OpenCore-RELEASE.zip index 2876b53dd..3a784e944 100644 Binary files a/payloads/OpenCore/OpenCore-RELEASE.zip and b/payloads/OpenCore/OpenCore-RELEASE.zip differ diff --git a/payloads/Tools/ocvalidate b/payloads/Tools/ocvalidate index d6a7c75e6..0d105f8a7 100755 Binary files a/payloads/Tools/ocvalidate and b/payloads/Tools/ocvalidate differ diff --git a/resources/build.py b/resources/build.py index 3629284b5..6e699f652 100644 --- a/resources/build.py +++ b/resources/build.py @@ -98,13 +98,11 @@ class BuildOpenCore: for name, version, path, check in [ # Essential kexts ("Lilu.kext", self.constants.lilu_version, self.constants.lilu_path, lambda: True), - ("WhateverGreen.kext", self.constants.whatevergreen_version, self.constants.whatevergreen_path, lambda: self.constants.allow_oc_everywhere is False), + ("WhateverGreen.kext", self.constants.whatevergreen_version, self.constants.whatevergreen_path, lambda: self.constants.allow_oc_everywhere is False and self.constants.serial_settings != "None"), ("RestrictEvents.kext", self.constants.restrictevents_version, self.constants.restrictevents_path, lambda: self.model in model_array.MacPro), - # Modded RestrictEvents with displaypolicyd blocked to fix dGPU switching - ("RestrictEvents.kext", self.constants.restrictevents_mbp_version, self.constants.restrictevents_mbp_path, lambda: self.model in ["MacBookPro6,1", "MacBookPro6,2", "MacBookPro9,1"]), - ("SMC-Spoof.kext", self.constants.smcspoof_version, self.constants.smcspoof_path, lambda: self.constants.allow_oc_everywhere is False), + ("SMC-Spoof.kext", self.constants.smcspoof_version, self.constants.smcspoof_path, lambda: self.constants.allow_oc_everywhere is False and self.constants.serial_settings != "None"), # CPU patches - ("AppleMCEReporterDisabler.kext", self.constants.mce_version, self.constants.mce_path, lambda: self.model.startswith("MacPro") or self.model.startswith("Xserve")), + ("AppleMCEReporterDisabler.kext", self.constants.mce_version, self.constants.mce_path, lambda: (self.model.startswith("MacPro") or self.model.startswith("Xserve")) and self.constants.serial_settings != "None"), ("AAAMouSSE.kext", self.constants.mousse_version, self.constants.mousse_path, lambda: smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.cpu_data.penryn.value), ( "telemetrap.kext", @@ -116,7 +114,7 @@ class BuildOpenCore: "CPUFriend.kext", self.constants.cpufriend_version, self.constants.cpufriend_path, - lambda: self.model not in ["iMac7,1", "Xserve2,1", "Dortania1,1"] and self.constants.allow_oc_everywhere is False and self.constants.disallow_cpufriend is False, + lambda: self.model not in ["iMac7,1", "Xserve2,1", "Dortania1,1"] and self.constants.allow_oc_everywhere is False and self.constants.disallow_cpufriend is False and self.constants.serial_settings != "None", ), # Ethernet patches ("nForceEthernet.kext", self.constants.nforce_version, self.constants.nforce_path, lambda: smbios_data.smbios_dictionary[self.model]["Ethernet Chipset"] == "Nvidia"), @@ -143,7 +141,37 @@ class BuildOpenCore: self.enable_kext(name, version, path, check) if self.constants.allow_oc_everywhere is False: - self.get_item_by_kv(self.config["Kernel"]["Patch"], "Identifier", "com.apple.driver.AppleSMC")["Enabled"] = True + if self.constants.serial_settings == "None": + # Credit to Parrotgeek1 for boot.efi and hv_vmm_present patch sets + # print("- Enabling Board ID exemption patch") + # self.get_item_by_kv(self.config["Booter"]["Patch"], "Comment", "Skip Board ID check")["Enabled"] = True + + print("- Enabling VMM exemption patch") + self.get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (1)")["Enabled"] = True + self.get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (2)")["Enabled"] = True + + # Patch HW_BID to OC_BID + # Set OC_BID to MacPro6,1 Board ID (Mac-F60DEB81FF30ACF6) + # Goal is to only allow OS booting through OCLP, otherwise failing + print("- Enabling HW_BID reroute") + self.get_item_by_kv(self.config["Booter"]["Patch"], "Comment", "Reroute HW_BID to OC_BID")["Enabled"] = True + self.config["NVRAM"]["Add"]["4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14"]["OC_BID"] = "Mac-F60DEB81FF30ACF6" + self.config["NVRAM"]["Delete"]["4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14"] += ["OC_BID"] + else: + print("- Enabling SMC exemption patch") + self.get_item_by_kv(self.config["Kernel"]["Patch"], "Identifier", "com.apple.driver.AppleSMC")["Enabled"] = True + + if self.get_kext_by_bundle_path("Lilu.kext")["Enabled"] is True: + # Required for Lilu in 11.0+ + self.config["Kernel"]["Quirks"]["DisableLinkeditJettison"] = True + + if self.model in ["MacBookPro6,1", "MacBookPro6,2", "MacBookPro9,1", "MacBookPro10,1"]: + # Modded RestrictEvents with displaypolicyd blocked to fix dGPU switching + if self.model in ["MacBookPro6,1", "MacBookPro6,2", "MacBookPro9,1"]: + self.enable_kext("RestrictEvents.kext", self.constants.restrictevents_version, self.constants.restrictevents_path) + elif self.constants.serial_settings == "None": + # MacBookPro10,1 without SMBIOS spoof needs RestrictEvents + self.enable_kext("RestrictEvents.kext", self.constants.restrictevents_version, self.constants.restrictevents_path) # Ethernet Patch Sets if smbios_data.smbios_dictionary[self.model]["Ethernet Chipset"] == "Broadcom": @@ -152,13 +180,6 @@ class BuildOpenCore: # Applicable for pre-Ivy Bridge models self.enable_kext("CatalinaBCM5701Ethernet.kext", self.constants.bcm570_version, self.constants.bcm570_path) - if self.constants.allow_oc_everywhere is False: - if (smbios_data.smbios_dictionary[generate_smbios.set_smbios_model_spoof(self.model) or self.constants.override_smbios]["SecureBootModel"]) != None: - # Monterey T2 SMBIOS don't get OS updates without a T2 SBM - # Forces VMM patch instead - if self.get_kext_by_bundle_path("RestrictEvents.kext")["Enabled"] is False: - self.enable_kext("RestrictEvents.kext", self.constants.restrictevents_version, self.constants.restrictevents_path) - if smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.cpu_data.sandy_bridge.value: # Ref: https://github.com/reenigneorcim/SurPlus # Enable for all systems missing RDRAND support @@ -308,8 +329,8 @@ class BuildOpenCore: self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += f" -brcmfxwowl" # CPUFriend - pp_map_path = Path(self.constants.platform_plugin_plist_path) / Path(f"{self.model}/Info.plist") - if self.model not in ["iMac7,1", "Xserve2,1", "Dortania1,1"] and self.constants.allow_oc_everywhere is False: + if self.model not in ["iMac7,1", "Xserve2,1", "Dortania1,1"] and self.constants.allow_oc_everywhere is False and self.constants.serial_settings != "None": + pp_map_path = Path(self.constants.platform_plugin_plist_path) / Path(f"{self.model}/Info.plist") Path(self.constants.pp_kext_folder).mkdir() Path(self.constants.pp_contents_folder).mkdir() shutil.copy(pp_map_path, self.constants.pp_contents_folder) @@ -337,7 +358,6 @@ class BuildOpenCore: # USB Map usb_map_path = Path(self.constants.plist_folder_path) / Path("AppleUSBMaps/Info.plist") - # iMac7,1 kernel panics with USB map installed, remove for time being until properly debugged if ( usb_map_path.exists() and self.constants.allow_oc_everywhere is False @@ -351,52 +371,54 @@ class BuildOpenCore: self.get_kext_by_bundle_path("USB-Map.kext")["Enabled"] = True if self.constants.allow_oc_everywhere is False: - if self.model == "MacBookPro9,1": - print("- Adding AppleMuxControl Override") - amc_map_path = Path(self.constants.plist_folder_path) / Path("AppleMuxControl/Info.plist") - self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "vit9696"} - Path(self.constants.amc_kext_folder).mkdir() - Path(self.constants.amc_contents_folder).mkdir() - shutil.copy(amc_map_path, self.constants.amc_contents_folder) - self.get_kext_by_bundle_path("AMC-Override.kext")["Enabled"] = True + if self.constants.serial_settings != "None": + if self.model == "MacBookPro9,1": + print("- Adding AppleMuxControl Override") + amc_map_path = Path(self.constants.plist_folder_path) / Path("AppleMuxControl/Info.plist") + self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "vit9696"} + Path(self.constants.amc_kext_folder).mkdir() + Path(self.constants.amc_contents_folder).mkdir() + shutil.copy(amc_map_path, self.constants.amc_contents_folder) + self.get_kext_by_bundle_path("AMC-Override.kext")["Enabled"] = True - if self.model not in model_array.NoAGPMSupport: - print("- Adding AppleGraphicsPowerManagement Override") - agpm_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsPowerManagement/Info.plist") - Path(self.constants.agpm_kext_folder).mkdir() - Path(self.constants.agpm_contents_folder).mkdir() - shutil.copy(agpm_map_path, self.constants.agpm_contents_folder) - self.get_kext_by_bundle_path("AGPM-Override.kext")["Enabled"] = True + if self.model not in model_array.NoAGPMSupport: + print("- Adding AppleGraphicsPowerManagement Override") + agpm_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsPowerManagement/Info.plist") + Path(self.constants.agpm_kext_folder).mkdir() + Path(self.constants.agpm_contents_folder).mkdir() + shutil.copy(agpm_map_path, self.constants.agpm_contents_folder) + self.get_kext_by_bundle_path("AGPM-Override.kext")["Enabled"] = True - if self.model in model_array.AGDPSupport: - print("- Adding AppleGraphicsDevicePolicy Override") - agdp_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsDevicePolicy/Info.plist") - Path(self.constants.agdp_kext_folder).mkdir() - Path(self.constants.agdp_contents_folder).mkdir() - shutil.copy(agdp_map_path, self.constants.agdp_contents_folder) - self.get_kext_by_bundle_path("AGDP-Override.kext")["Enabled"] = True + if self.model in model_array.AGDPSupport: + print("- Adding AppleGraphicsDevicePolicy Override") + agdp_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsDevicePolicy/Info.plist") + Path(self.constants.agdp_kext_folder).mkdir() + Path(self.constants.agdp_contents_folder).mkdir() + shutil.copy(agdp_map_path, self.constants.agdp_contents_folder) + self.get_kext_by_bundle_path("AGDP-Override.kext")["Enabled"] = True + + if self.constants.serial_settings != "None": + # AGPM Patch + if self.model in model_array.DualGPUPatch: + print("- Adding dual GPU patch") + if not self.constants.custom_model and self.computer.dgpu and self.computer.dgpu.pci_path: + self.gfx0_path = self.computer.dgpu.pci_path + print(f"- Found GFX0 Device Path: {self.gfx0_path}") + else: + if not self.constants.custom_model: + print("- Failed to find GFX0 Device path, falling back on known logic") + self.gfx0_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)" - # AGPM Patch - if self.model in model_array.DualGPUPatch: - print("- Adding dual GPU patch") - if not self.constants.custom_model and self.computer.dgpu and self.computer.dgpu.pci_path: - self.gfx0_path = self.computer.dgpu.pci_path - print(f"- Found GFX0 Device Path: {self.gfx0_path}") - else: - if not self.constants.custom_model: - print("- Failed to find GFX0 Device path, falling back on known logic") - self.gfx0_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)" - - if self.model in model_array.IntelNvidiaDRM and self.constants.drm_support is True: - print("- Prioritizing DRM support over Intel QuickSync") - self.config["DeviceProperties"]["Add"][self.gfx0_path] = {"agdpmod": "vit9696", "shikigva": 256} - self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = { - "name": binascii.unhexlify("23646973706C6179"), - "IOName": "#display", - "class-code": binascii.unhexlify("FFFFFFFF"), - } - else: - self.config["DeviceProperties"]["Add"][self.gfx0_path] = {"agdpmod": "vit9696"} + if self.model in model_array.IntelNvidiaDRM and self.constants.drm_support is True: + print("- Prioritizing DRM support over Intel QuickSync") + self.config["DeviceProperties"]["Add"][self.gfx0_path] = {"agdpmod": "vit9696", "shikigva": 256} + self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = { + "name": binascii.unhexlify("23646973706C6179"), + "IOName": "#display", + "class-code": binascii.unhexlify("FFFFFFFF"), + } + elif self.constants.serial_settings != "None": + self.config["DeviceProperties"]["Add"][self.gfx0_path] = {"agdpmod": "vit9696"} # Audio Patch if self.constants.set_alc_usage is True: @@ -464,6 +486,9 @@ class BuildOpenCore: self.gfx0_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)" def nvidia_patch(self, backlight_path): + if not self.get_kext_by_bundle_path("WhateverGreen.kext")["Enabled"] is True: + # Ensure WEG is enabled as we need if for Backlight patching + self.enable_kext("WhateverGreen.kext", self.constants.whatevergreen_version, self.constants.whatevergreen_path) if self.model in ["iMac11,1", "iMac11,2", "iMac11,3", "iMac10,1"]: print("- Adding Nvidia Brightness Control and DRM patches") self.config["DeviceProperties"]["Add"][backlight_path] = { @@ -490,8 +515,11 @@ class BuildOpenCore: "@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000"), "shikigva": 256, - "agdpmod": "vit9696", } + if self.constants.serial_settings != "None": + self.config["DeviceProperties"]["Add"][backlight_path] += { + "agdpmod": "vit9696", + } print("- Disabling unsupported iGPU") self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = { "name": binascii.unhexlify("23646973706C6179"), @@ -505,11 +533,14 @@ class BuildOpenCore: def amd_patch(self, backlight_path): print("- Adding AMD DRM patches") - self.config["DeviceProperties"]["Add"][backlight_path] = {"shikigva": 80, "unfairgva": 1} + if not self.get_kext_by_bundle_path("WhateverGreen.kext")["Enabled"] is True: + # Ensure WEG is enabled as we need if for Backlight patching + self.enable_kext("WhateverGreen.kext", self.constants.whatevergreen_version, self.constants.whatevergreen_path) + self.config["DeviceProperties"]["Add"][backlight_path] = {"shikigva": 128, "unfairgva": 1} if self.constants.custom_model and self.model == "iMac11,2": # iMac11,2 can have either PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0) or PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0) # Set both properties when we cannot run hardware detection - self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"] = {"shikigva": 80, "unfairgva": 1} + self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"] = {"shikigva": 128, "unfairgva": 1} if self.model in ["iMac12,1", "iMac12,2"]: print("- Disabling unsupported iGPU") self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = { @@ -712,6 +743,10 @@ class BuildOpenCore: if self.constants.secure_status is False: print("- Disabling SecureBootModel") self.config["Misc"]["Security"]["SecureBootModel"] = "Disabled" + if self.constants.force_vmm is True: + print("- Forcing VMM patchset to support OTA updates") + self.get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (1)")["Enabled"] = True + self.get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (2)")["Enabled"] = True if self.constants.serial_settings in ["Moderate", "Advanced"]: print("- Enabling USB Rename Patches") self.get_item_by_kv(self.config["ACPI"]["Patch"], "Comment", "XHC1 to SHC1")["Enabled"] = True @@ -762,8 +797,9 @@ class BuildOpenCore: def set_smbios(self): spoofed_model = self.model if self.constants.override_smbios == "Default": - print("- Setting macOS Monterey Supported SMBIOS") - spoofed_model = generate_smbios.set_smbios_model_spoof(self.model) + if self.constants.serial_settings != "None": + print("- Setting macOS Monterey Supported SMBIOS") + spoofed_model = generate_smbios.set_smbios_model_spoof(self.model) else: spoofed_model = self.constants.override_smbios print(f"- Using Model ID: {spoofed_model}") @@ -845,6 +881,7 @@ class BuildOpenCore: self.config["PlatformInfo"]["Generic"]["SystemSerialNumber"] = macserial_output[0] self.config["PlatformInfo"]["Generic"]["MLB"] = macserial_output[1] self.config["PlatformInfo"]["Generic"]["SystemUUID"] = str(uuid.uuid4()).upper() + if self.constants.serial_settings == "Moderate": print("- Using Moderate SMBIOS patching") @@ -872,7 +909,7 @@ class BuildOpenCore: else: try: map_config["IOKitPersonalities_x86_64"][entry]["model"] = self.spoofed_model - if self.constants.serial_settings == "Minimal": + if self.constants.serial_settings in ["Minimal", "None"]: if map_config["IOKitPersonalities_x86_64"][entry]["IONameMatch"] == "EH01": map_config["IOKitPersonalities_x86_64"][entry]["IONameMatch"] = "EHC1" if map_config["IOKitPersonalities_x86_64"][entry]["IONameMatch"] == "EH02": @@ -882,7 +919,7 @@ class BuildOpenCore: except KeyError: continue plistlib.dump(map_config, Path(new_map_ls).open("wb"), sort_keys=True) - if self.constants.allow_oc_everywhere is False and self.model not in ["iMac7,1", "Xserve2,1", "Dortania1,1"] and self.constants.disallow_cpufriend is False: + if self.constants.allow_oc_everywhere is False and self.model not in ["iMac7,1", "Xserve2,1", "Dortania1,1"] and self.constants.disallow_cpufriend is False and self.constants.serial_settings != "None": # Adjust CPU Friend Data to correct SMBIOS new_cpu_ls = Path(self.constants.pp_contents_folder) / Path("Info.plist") cpu_config = plistlib.load(Path(new_cpu_ls).open("rb")) @@ -892,7 +929,7 @@ class BuildOpenCore: cpu_config["IOKitPersonalities"]["CPUFriendDataProvider"]["cf-frequency-data"] = string_stuff plistlib.dump(cpu_config, Path(new_cpu_ls).open("wb"), sort_keys=True) - if self.constants.allow_oc_everywhere is False: + if self.constants.allow_oc_everywhere is False and self.constants.serial_settings != "None": if self.model == "MacBookPro9,1": new_amc_ls = Path(self.constants.amc_contents_folder) / Path("Info.plist") amc_config = plistlib.load(Path(new_amc_ls).open("rb")) @@ -973,6 +1010,9 @@ class BuildOpenCore: for entry in list(self.config["ACPI"]["Patch"]): if not entry["Enabled"]: self.config["ACPI"]["Patch"].remove(entry) + for entry in list(self.config["Booter"]["Patch"]): + if not entry["Enabled"]: + self.config["Booter"]["Patch"].remove(entry) for entry in list(self.config["Kernel"]["Add"]): if not entry["Enabled"]: self.config["Kernel"]["Add"].remove(entry) diff --git a/resources/cli_menu.py b/resources/cli_menu.py index 61101e529..8677d1cfa 100644 --- a/resources/cli_menu.py +++ b/resources/cli_menu.py @@ -46,8 +46,10 @@ class MenuOptions: change_menu = input("Enable Kext DEBUG mode(y/n/q): ") if change_menu in {"y", "Y", "yes", "Yes"}: self.constants.kext_debug = True + self.constants.kext_variant = "DEBUG" elif change_menu in {"n", "N", "no", "No"}: self.constants.kext_debug = False + self.constants.kext_variant = "RELEASE" elif change_menu in {"q", "Q", "Quit", "quit"}: print("Returning to previous menu") else: @@ -95,6 +97,7 @@ Recommended for adanced users who want control how serials are handled Valid options: +0. None:\tOnly update FirmwareFeatures 1. Minimal:\tUse original serials and minimally update SMBIOS 2. Moderate:\tReplace entire SMBIOS but keep original serials 3. Advanced:\tReplace entire SMBIOS and generate new serials @@ -104,7 +107,9 @@ Note: For new users we recommend leaving as default(1. Minimal) """ ) change_menu = input("Set SMBIOS Spoof Level(ie. 1): ") - if change_menu == "1": + if change_menu == "0": + self.constants.serial_settings = "None" + elif change_menu == "1": self.constants.serial_settings = "Minimal" elif change_menu == "2": self.constants.serial_settings = "Moderate" @@ -191,7 +196,7 @@ Q. Return to previous menu print( """SecureBootModel is used to ensure best firmware security, however to patch the root volume this must be disabled. -Only disable is absolutely necessary. SIP value = 0xFEF +Only recommended to enable for users with T2 SMBIOS spoofs. Valid options: diff --git a/resources/constants.py b/resources/constants.py index 0aa9c201e..b3e21a123 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -20,14 +20,14 @@ class Constants: # OpenCore Versioning # https://github.com/acidanthera/OpenCorePkg - self.opencore_commit = "ff4b099 - 09-06-2021" - self.opencore_version = "0.7.3" + self.opencore_commit = "bd3f7a1 - 10-04-2021" + self.opencore_version = "0.7.4" # Kext Versioning ## Acidanthera ## https://github.com/acidanthera self.lilu_version = "1.5.6" # Lilu - self.whatevergreen_version = "1.5.3" # WhateverGreen + self.whatevergreen_version = "1.5.4" # WhateverGreen self.airportbcrmfixup_version = "2.1.3" # AirPortBrcmFixup self.nvmefix_version = "1.0.9" # NVMeFix self.applealc_version = "1.6.3" # AppleALC @@ -104,6 +104,7 @@ class Constants: ## Kext Settings self.kext_debug = False # Enables Lilu debug and DebugEnhancer + self.kext_variant = "RELEASE" ## NVRAM Settings self.verbose_debug = False # -v @@ -111,7 +112,7 @@ class Constants: ## SMBIOS Settings self.custom_cpu_model = 2 # Patch type value self.custom_cpu_model_value = "" # New CPU name within About This Mac - self.serial_settings = "Minimal" # Set SMBIOS level used + self.serial_settings = "None" # Set SMBIOS level used self.override_smbios = "Default" # Set SMBIOS model used ## Latebloom Settings @@ -157,6 +158,7 @@ class Constants: self.force_latest_psp = False # Force latest PatcherSupportPkg self.disable_msr_power_ctl = False # Disable MSR Power Control (missing battery throttling) self.software_demux = False # Enable Software Demux patch set + self.force_vmm = False # Force VMM patch self.custom_sip_value = None # Set custom SIP value # OS Versions @@ -231,19 +233,19 @@ class Constants: @property def lilu_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/Lilu-v{self.lilu_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/Lilu-v{self.lilu_version}-{self.kext_variant}.zip") @property def whatevergreen_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/WhateverGreen-v{self.whatevergreen_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/WhateverGreen-v{self.whatevergreen_version}-{self.kext_variant}.zip") @property def airportbcrmfixup_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/AirportBrcmFixup-v{self.airportbcrmfixup_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/AirportBrcmFixup-v{self.airportbcrmfixup_version}-{self.kext_variant}.zip") @property def restrictevents_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/RestrictEvents-v{self.restrictevents_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/RestrictEvents-v{self.restrictevents_version}-{self.kext_variant}.zip") @property def efi_disabler_path(self): @@ -251,7 +253,7 @@ class Constants: @property def restrictevents_mbp_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/RestrictEvents-MBP91-v{self.restrictevents_mbp_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/RestrictEvents-MBP91-v{self.restrictevents_mbp_version}-{self.kext_variant}.zip") @property def bcm570_path(self): @@ -295,7 +297,7 @@ class Constants: @property def applealc_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/AppleALC-v{self.applealc_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/AppleALC-v{self.applealc_version}-{self.kext_variant}.zip") @property def piixata_path(self): @@ -307,7 +309,7 @@ class Constants: @property def cpufriend_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/CPUFriend-v{self.cpufriend_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/CPUFriend-v{self.cpufriend_version}-{self.kext_variant}.zip") @property def smcspoof_path(self): @@ -319,15 +321,15 @@ class Constants: @property def nvmefix_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/NVMeFix-v{self.nvmefix_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/NVMeFix-v{self.nvmefix_version}-{self.kext_variant}.zip") @property def featureunlock_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/FeatureUnlock-v{self.featureunlock_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/FeatureUnlock-v{self.featureunlock_version}-{self.kext_variant}.zip") @property def debugenhancer_path(self): - return self.payload_kexts_path / Path(f"Acidanthera/DebugEnhancer-v{self.debugenhancer_version}.zip") + return self.payload_kexts_path / Path(f"Acidanthera/DebugEnhancer-v{self.debugenhancer_version}-{self.kext_variant}.zip") @property def bluetool_path(self): diff --git a/resources/defaults.py b/resources/defaults.py index ac15328f3..b97d95fa0 100644 --- a/resources/defaults.py +++ b/resources/defaults.py @@ -1,6 +1,6 @@ # Generate Default Data -from resources import utilities, device_probe -from data import model_array +from resources import utilities, device_probe, generate_smbios +from data import model_array, smbios_data class generate_defaults: @@ -15,6 +15,7 @@ class generate_defaults: if utilities.check_metal_support(device_probe, settings.computer) is False: settings.disable_cs_lv = True if settings.computer.dgpu and settings.computer.dgpu.arch == device_probe.NVIDIA.Archs.Kepler: + # 12.0 (B7+): Kepler are now unsupported settings.sip_status = False settings.amfi_status = True settings.allow_fv_root = True # Allow FileVault on broken seal @@ -22,8 +23,25 @@ class generate_defaults: isinstance(settings.computer.wifi, device_probe.Broadcom) and settings.computer.wifi.chipset in [device_probe.Broadcom.Chipsets.AirPortBrcm4331, device_probe.Broadcom.Chipsets.AirPortBrcm43224] ) or (isinstance(settings.computer.wifi, device_probe.Atheros) and settings.computer.wifi.chipset == device_probe.Atheros.Chipsets.AirPortAtheros40): + # 12.0: Legacy Wireless chipsets require root patching settings.sip_status = False settings.allow_fv_root = True # Allow FileVault on broken seal + + if settings.computer.dgpu and settings.computer.dgpu.arch in [ + device_probe.AMD.Archs.Legacy_GCN_7000, + device_probe.AMD.Archs.Legacy_GCN_8000, + device_probe.AMD.Archs.Legacy_GCN_9000, + device_probe.AMD.Archs.Polaris, + device_probe.AMD.Archs.Vega, + device_probe.AMD.Archs.Navi, + ]: + # Allow H.265 on AMD + settings.serial_settings = "Minimal" + elif model in ["MacPro4,1", "MacPro5,1"]: + # Allow H.265 on AMD + # Assume 2009+ machines have Polaris on pre-builts (internal testing) + # Hardware Detection will never hit this + settings.serial_settings = "Minimal" elif model in model_array.LegacyGPU: settings.disable_cs_lv = True @@ -34,10 +52,6 @@ class generate_defaults: settings.sip_status = False # settings.secure_status = True # Monterey settings.allow_fv_root = True # Allow FileVault on broken seal - else: - settings.sip_status = True - # settings.secure_status = True # Monterey - settings.amfi_status = True else: settings.sip_status = False # Unsigned kexts settings.secure_status = False # Root volume modified @@ -50,10 +64,6 @@ class generate_defaults: settings.allow_fv_root = True # Allow FileVault on broken seal # settings.amfi_status = True # Signed bundles, Don't need to explicitly set currently - if model == "MacBook8,1": - # MacBook8,1 has an odd bug where it cannot install Monterey with Minimal spoofing - settings.serial_settings = "Moderate" - custom_cpu_model_value = utilities.get_nvram("revcpuname", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True) if custom_cpu_model_value is not None: # TODO: Fix to not use two separate variables @@ -73,3 +83,22 @@ class generate_defaults: # Check if running in RecoveryOS settings.recovery_status = utilities.check_recovery() + + # Check if model uses T2 SMBIOS, if so see if it needs root patching (determined earlier on via SIP variable) + # If not, allow SecureBootModel usage, otherwise force VMM patching + # Needed for macOS Monterey to allow OTA updates + try: + spoof_model = generate_smbios.set_smbios_model_spoof(model) + except: + # Native Macs (mainly M1s) will error out as they don't know what SMBIOS to spoof to + # As we don't spoof on native models, we can safely ignore this + spoof_model = model + if smbios_data.smbios_dictionary[spoof_model]["SecureBootModel"] is not None: + if settings.sip_status is False: + # Force VMM as root patching breaks .im4m signature + settings.secure_status = False + settings.force_vmm = True + else: + # Allow SecureBootModel + settings.secure_status = True + settings.force_vmm = False diff --git a/resources/validation.py b/resources/validation.py index 33fe9ba54..3130cb028 100644 --- a/resources/validation.py +++ b/resources/validation.py @@ -59,6 +59,8 @@ def validate(settings): settings.opencore_debug = True settings.opencore_build = "DEBUG" settings.kext_debug = True + settings.kext_variant = "DEBUG" + settings.kext_debug = True settings.showpicker = False settings.sip_status = False settings.secure_status = True @@ -68,5 +70,6 @@ def validate(settings): settings.disable_tb = True settings.force_surplus = True settings.software_demux = True + settings.serial_settings = "Minimal" build_prebuilt() build_dumps()