Normalerweise bin ich hier ja nicht bekannt dafür mit Clover unterwegs zu sein. Trotzdem hier mal was für die Clover Gemeinde.
Ich habe in der Vergangenheit schon das ein oder andere mal KernelPatches verfasst, meistens im Bezug auf Ozmosis. Da ich mir mit dem Release von Big Sur wieder KextInjection Patches nach Clover/Ozmosis- (allgemein KernelBooterExtension-) Methode rausgeschrieben habe, dachte ich mir implementier ich sie doch einfach mal in Clover und schau ob Clover mit Big Sur umgehen kann. Ich habe ein paar Tests zusammen mit CMMChris unternommen und nach ein paar Versuchen war es möglich seine bestehende Installation von Big Sur zu booten.
Daraufhin habe ich mich daran versucht die nötigen Mechanismen in Clover einzubauen. Leider habe ich es bis zum jetzigen Zeitpunkt nicht schaffen können die internen Mechanismen, die mit Big Sur kaputt gegangen sind, wieder zum Leben zu erwecken. Da ich mich nie wirklich mit Clover, insbesondere Clover Source Code beschäftigt habe und letzterer leider mehr als unstrukturiert ist, fehlt mir hier der Durchblick um eine saubere und dauerhafte Lösung in Clover zu implementieren. Ich denke hier ist die Arbeit von langjährigen Clover Devs gefragt, die ihren eigenen Code kennen. Trotzdem will ich die Zwischenergebnisse hier mal veröffentlichen, damit andere darauf aufbauen können und jeder der will ein bisschen rumtesten kann.
Technischer Hintergrund:
Die Clover Version im Anhang setzt beim Boot von macOS Big Sur automatisch die NVRam Variablen booter-fileset-kernel und booter-fileset-basesystem, sodass beim Boot einer bestehenden Installation von Big Sur automatisch der prelinked kernel forciert wird. Der Boot eines Installers ist so nicht möglich, da kein passender prelinkedkernel existiert und auf diese Weise geladen werden kann. Selbst bei forciertem prelinkedkernel versagen leider Clovers interne KernelBooterExtension Patches, laut meinen Tests wird die Prozedur nicht gestartet da OnExitBootServices in den Tests wohl nicht eintritt. Beim forcieren des KernelPatchers ohne Event wird der Kernel nicht gefunden. Was hingegen schon funktioniert sind User KernelPatches. Deswegen stelle ich die nötigen KernelBooterExtension-Patches für Big Sur als KernelToPatch Einträge bereit. Die Patches könnten bei Bedarf noch symbolbasiert implementiert werden. In der angehängten Clover Version sind die eigentlichen internen Patchingmechanismen für den Boot von Big Sur (10.16) deaktiviert um Dopplungen zu meiden.
Alle Patches suchen nach dem Anfang des entsprechenden Procedures und danach nach der passenden Patching Location. Ebenfalls sind alle Patches mit einfachen Wildcards implementiert.
KbeBS-EXT sucht nach readStartupExtensions (010031FFBE140005), der Patch lautet:
E8 ?? 00 00 00 EB 05 E8 -->
E8 ?? 00 00 00 90 90 E8.
KbeBS-SIP sucht nach loadExecutable (02000041BF010000DC), der Patch lautet:
E8 ?? ?? ?? 00 85 C0 0F 84 ?? 00 00 00 49 8B 45 -->
E8 ?? ?? ?? 00 85 C0 90 90 90 90 90 90 49 8B 45.
KbeBS-KxldUnmap sucht nach removeKextBootstrap (488D152B262500), der Patch lautet:
FF 80 3D ?? ?? ?? 00 00 0F 85 ?? 01 00 00 41 -->
FF 80 3D ?? ?? ?? 00 00 90 E9 ?? 01 00 00 41.
Veränderungen und Plist für macOS Big Sur BETA 3+: KernelToPatch Einträge BETA 3
1. OSVersion lautet mit Beta 3+ 11.0 und nicht mehr 10.16. Die bisherigen Patches werden nur auf 10.16 angewandt. 11.0 muss also durch ein Komma getrennt zu MatchOS hinzugefügt werden.
2. Die Suche nach dem StartPattern (488D152B262500) für Kxld ist verändert, das StartPattern heißt jetzt 488d157c542500. Dieses Bytepattern wird sich in der Zukunft weiter verändern und die Suche wieder kaputt gehen!
Einfacher Fix:
komplett aus der Plist entfernen, der Patch ist auch so einmalig und somit unproblematisch, da er relativ präzise gewählt ist.
Alternativ die alten Werte durch das neue StartPattern ersetzen:
Sinnvoller Fix: Symbolbasierte Suche mit procedure = removeKextBootstrap oder StartPattern mit Wildcards implementieren (00 00 00 00 c7 45 ?? 00 00 00 00 48 8d 15). Für Ersteres muss die MACH-O Bibliothek wieder funktionieren und für Letzteres muss die Suche nach StartPattern mit Wildcards möglich sein.
Allgemein: Es ist nicht eindeutig, ob der Kxld Patch unter Big Sur auf allen Systemen notwendig ist, oder ob die dahinterliegende Race Condition garnicht erst entsteht. Eventuell kann der Fix also sogar ganz weg gelassen werden bzw. booten System auch ohne Kxld Patch.
Des Weiteren ist die Nutzung von OCQuirks zwingende Voraussetzung zum Boot von Big Sur, da jegliche alte AptioFix Varianten nicht kompatibel sind. In dem neuesten OCQuirks Release sind Änderungen zu AvoidRuntimeDefrag enthalten, ohne die der Boot von macOS Big Sur 10.16/11 nicht möglich ist.
Benutzung:
- CLOVERX64.efi (r5119 Mod) auf der EFI durch den Anhang ersetzen
- Folgende KernelToPatch Einträge in die config.plist einfügen: (Wer nicht weiß wie das geht ist fehl am Platz – sorry)
- <key>KernelAndKextPatches</key>
- <dict>
- <key>KernelToPatch</key>
- <array>
- <dict>
- <key>Comment</key>
- <string>KbeBS-EXT (kuckkuck)</string>
- <key>Count</key>
- <integer>1</integer>
- <key>Disabled</key>
- <false/>
- <key>Find</key>
- <data>
- 6NQAAADrBeg=
- </data>
- <key>MaskFind</key>
- <data>
- /wD///////8=
- </data>
- <key>MaskReplace</key>
- <data>
- AAAAAAD///8=
- </data>
- <key>MatchOS</key>
- <string>10.16</string>
- <key>Replace</key>
- <data>
- 6NQAAACQkOg=
- </data>
- <key>StartPattern</key>
- <data>
- AQAx/74UAAU=
- </data>
- </dict>
- <dict>
- <key>Comment</key>
- <string>KbeBS-SIP (kuckkuck)</string>
- <key>Count</key>
- <integer>1</integer>
- <key>Disabled</key>
- <false/>
- <key>Find</key>
- <data>
- 6HXmDgCFwA+E+gAAAEmLRQ==
- </data>
- <key>MaskFind</key>
- <data>
- /wAAAP//////AP///////w==
- </data>
- <key>MaskReplace</key>
- <data>
- AAAAAAAAAP///////wAAAA==
- </data>
- <key>MatchOS</key>
- <string>10.16</string>
- <key>Replace</key>
- <data>
- 6HXmDgCFwJCQkJCQkEmLRQ==
- </data>
- <key>StartPattern</key>
- <data>
- AgAAQb8BAADc
- </data>
- </dict>
- <dict>
- <key>Comment</key>
- <string>KbeBS-KxldUnmap (vit9696, kuckkuck)</string>
- <key>Count</key>
- <integer>1</integer>
- <key>Disabled</key>
- <false/>
- <key>Find</key>
- <data>
- /4A9JZxOAAAPhRcBAABB
- </data>
- <key>MaskFind</key>
- <data>
- ////AAAA/////wD/////
- </data>
- <key>MaskReplace</key>
- <data>
- AAAAAAAAAAD//wAAAAAA
- </data>
- <key>MatchOS</key>
- <string>10.16</string>
- <key>Replace</key>
- <data>
- /4A9JZxOAACQ6RcBAABB
- </data>
- <key>StartPattern</key>
- <data>
- SI0VKyYlAA==
- </data>
- </dict>
- </array>
- </dict>
- Jegliche benutzten OsxAptioFix.efi oder AptioMemoryFix.efi UEFI Treiber durch den neuesten OCQuirks Release ersetzen und OCQuirks.efi, OpenRuntime.efi und OcQuirks.plist nach /Clover/drivers/UEFI legen.
- Acidanthera Kexts durch neu kompilierte Versionen ersetzen, oder lilubetaall benutzen.
Es können ausschließlich vorhandene Installationen von Big Sur gebootet werden. Die Installation von Big Sur per Installer ist nicht möglich.
Viel Spaß beim Testen und ansonsten mal Abwarten wann etwas von den Clover Entwicklern kommt.