position in installer bigsur

Signed-off-by: SergeySlice <sergey.slice@gmail.com>
This commit is contained in:
SergeySlice 2020-06-24 07:20:45 +03:00
parent a0948b2515
commit 1856b519e5
9 changed files with 110 additions and 14 deletions

View File

@ -738,9 +738,10 @@ OvrSetKeyStrokeBufferKeys (
{
EFI_STATUS Status;
Status = gOrgAppleKeyMapDb.SetKeyStrokeBufferKeys(This, Index, Modifiers, NumberOfKeys, Keys);
#if SET_KEY_STROKE
PRINT("->SetKeyStrokeBufferKeys => Index=%d, Modifiers=%x, NoKeys=%d, Keys={%x, %x}, Status=%r\n",
Index, Modifiers, NumberOfKeys, Keys?*Keys:0, (Keys && NumberOfKeys>1)?Keys[1]:0, Status);
#endif
return Status;
}

View File

@ -180,7 +180,7 @@ OvrSetTimer(
EFI_STATUS Status;
Status = gOrgBS.SetTimer(Event, Type, TriggerTime);
PRINT("->SetTimer(%p, %d, 0x%x) = %r\n", Event, Type, TriggerTime, Status);
// PRINT("->SetTimer(%p, %d, 0x%x) = %r\n", Event, Type, TriggerTime, Status);
return Status;
}
@ -288,7 +288,9 @@ OvrHandleProtocol(
EFI_STATUS Status;
Status = gOrgBS.HandleProtocol(Handle, Protocol, Interface);
#if HANDLE_PROTOCOL
PRINT("->HandleProtocol(%p, %s, %p) = %r\n", Handle, GuidStr(Protocol), *Interface, Status);
#endif
return Status;
}
@ -563,10 +565,13 @@ OvrOpenProtocol(
)
{
EFI_STATUS Status;
#if OPEN_PROTOCOL
VOID *InterfaceIn = *Interface;
#endif
Status = gOrgBS.OpenProtocol(Handle, Protocol, Interface, AgentHandle, ControllerHandle, Attributes);
#if OPEN_PROTOCOL
PRINT("->OpenProtocol(%p, %s, %p/%p, %p, %p, %x) = %r\n", Handle, GuidStr(Protocol), InterfaceIn, *Interface, AgentHandle, ControllerHandle, Attributes, Status);
#endif
return Status;
}
@ -581,7 +586,9 @@ OvrCloseProtocol(
EFI_STATUS Status;
Status = gOrgBS.CloseProtocol(Handle, Protocol, AgentHandle, ControllerHandle);
#if OPEN_PROTOCOL
PRINT("->CloseProtocol(%p, %s, %p, %p) = %r\n", Handle, GuidStr(Protocol), AgentHandle, ControllerHandle, Status);
#endif
return Status;
}

View File

@ -144,6 +144,10 @@
//
#define BOOT_LOADERS { L"boot.efi", L"bootmgfw.efi", L"grub.efi", L"grubx64.efi", L"bootx64.efi", NULL }
#define HANDLE_PROTOCOL 0
#define LOCATE_PROTOCOL 0
#define OPEN_PROTOCOL 0
#define SET_KEY_STROKE 0
#include "Lib.h"
#include "Log.h"

View File

@ -354,6 +354,7 @@ OnReadyToBoot (
}
// printf("MSR 0xE2 on ReadyToBoot %08x\n", msr);
*/
gST->ConOut->OutputString (gST->ConOut, L"-- ReadyToBoot --\n");
}
VOID

View File

@ -79,6 +79,37 @@ EFI_GUID GPT_EMPTY_PARTITION = \
// 24B73556-2197-4702-82A8-3E1337DAFBF3
// 1BAD711C-D451-4241-B1F3-8537812E0C70 GUID for MeBiosExtensionSetup variable
// 36C28AB5-6566-4C50-9EBD-CBB920F83843:preferred-networks gAppleWirelessNetworkVariableGuid
// ->SetVariable(boot-feature-usage, 62BF9B1C-8568-48EE-85DC-DD3057660863, 7, 8, 4C4ABBE8) = Success
// 00 00 08 00 00 00 00 00 | ........
/*
->SetVariable(ApECID, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 8, 4C4ABC90) = Success
1C 02 1B 03 0D 04 66 05 | ......f.
->SetVariable(ApChipID, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 4, 4C4ABCB4) = Success
12 80 00 00 | ....
->SetVariable(ApBoardID, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 4, 4C4ABCB0) = Success
F0 00 00 00 | ....
->SetVariable(ApSecurityDomain, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 4, 4C4ABCB8) = Success
01 00 00 00 | ....
->SetVariable(ApProductionStatus, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 1, 4C4ABCBD) = Success
01 | .
->SetVariable(ApSecurityMode, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 1, 4C4ABCBD) = Success
01 | .
->SetVariable(EffectiveProductionStatus, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 1, 4C4ABCBD) = Success
01 | .
->SetVariable(EffectiveSecurityMode, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 1, 4C4ABCBD) = Success
01 | .
->SetVariable(CertificateEpoch, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 1, 4C4ABCBF) = Success
02 | .
->SetVariable(MixNMatchPreventionStatus, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 1, 4C4ABCBE) = Success
00 | .
->SetVariable(CryptoDigestMethod, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 10, 4C4ABC70) = Success
73 68 61 32 2D 33 38 34 00 00 00 00 00 00 00 00 | sha2-384........
->SetVariable(HardwareModel, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 10, 4C4ABC60) = Success
78 38 36 6C 65 67 61 63 79 61 70 00 00 00 00 00 | x86legacyap.....
->SetVariable(InternalUseOnlyUnit, 94B73556-2197-4702-82A8-3E1337DAFBFB, 6, 1, 4C4ABCBD) = Success
01 | .
*/
/*
* Copyright (c) 2007 Apple Inc. All rights reserved.

View File

@ -190,6 +190,8 @@ UINTN LOADER_ENTRY::searchProc(const char *procedure)
bool found = false;
for (i=0; i<SizeVtable; ++i) {
size_t Offset = vArray[i].NameOffset;
if (Offset == 0) break;
// DBG_RT("Offset %lx Seg=%x\n", Offset, vArray[i].Seg);
// DBG_RT("Name to compare %s\n", &Names[Offset]);
// Stall(3000000);
@ -2053,7 +2055,7 @@ LOADER_ENTRY::FindBootArgs()
// check bootargs for 10.7 and up
bootArgs2 = (BootArgs2*)ptr;
if (bootArgs2->Version==2 && bootArgs2->Revision==0
if (bootArgs2->Version==2 && (bootArgs2->Revision==0 || bootArgs2->Revision==1)
// plus additional checks - some values are not inited by boot.efi yet
&& bootArgs2->efiMode == archMode
&& bootArgs2->kaddr == 0 && bootArgs2->ksize == 0
@ -2072,7 +2074,7 @@ LOADER_ENTRY::FindBootArgs()
DBG_RT( "bootArgs2->kslide = 0x%x\n", bootArgs2->kslide);
DBG_RT( "bootArgs2->bootMemStart = 0x%llx\n", bootArgs2->bootMemStart);
if (KernelAndKextPatches && KernelAndKextPatches->KPDebug)
gBS->Stall(2000000);
gBS->Stall(5000000);
// disable other pointer
bootArgs1 = NULL;
@ -2080,6 +2082,7 @@ LOADER_ENTRY::FindBootArgs()
}
// check bootargs for 10.4 - 10.6.x
/*
bootArgs1 = (BootArgs1*)ptr;
if (bootArgs1->Version==1
@ -2101,8 +2104,43 @@ LOADER_ENTRY::FindBootArgs()
bootArgs2 = NULL;
break;
}
*/
ptr += 0x1000;
if ((UINTN)ptr > 0x10000000ull) {
DBG_RT("bootArgs not found\n");
bootArgs2 = 0;
break;
}
}
if (bootArgs2 == 0) {
ptr = (UINT8*)0x200000ull;
while(TRUE) {
// check bootargs for 10.16
bootArgs2 = (BootArgs2*)ptr;
if (strstr(&bootArgs2->CommandLine[0], "big=sur")
&& bootArgs2->efiMode == archMode) {
dtRoot = (CHAR8*)(UINTN)bootArgs2->deviceTreeP;
dtLength = &bootArgs2->deviceTreeLength;
KernelSlide = bootArgs2->kslide;
DBG_RT( "Found bootArgs at 0x%llX, DevTree at 0x%llX\n", (UINTN)ptr, (UINTN)bootArgs2->deviceTreeP);
DBG_RT( "bootArgs2->CommandLine = %s\n", bootArgs2->CommandLine);
DBG_RT( "bootArgs2->Version = 0x%x\n", bootArgs2->Version);
DBG_RT( "bootArgs2->Revision = 0x%x\n", bootArgs2->Revision);
DBG_RT( "bootArgs2->flags = 0x%hx\n", bootArgs2->flags);
if (KernelAndKextPatches && KernelAndKextPatches->KPDebug)
gBS->Stall(20000000);
break;
}
ptr += 0x1000;
if ((UINTN)ptr > 0x10000000ull) {
DBG_RT("bootArgs 2 not found\n");
bootArgs2 = 0;
break;
}
}
}
}
@ -2250,13 +2288,13 @@ LOADER_ENTRY::KernelAndKextPatcherInit()
// KernelRelocBase will normally be 0
// but if OsxAptioFixDrv is used, then it will be > 0
SetKernelRelocBase();
DBG("KernelRelocBase = %llx\n", KernelRelocBase);
DBG_RT("KernelRelocBase = %llx\n", KernelRelocBase);
// Find bootArgs - we need then for proper detection
// of kernel Mach-O header
FindBootArgs();
if (bootArgs1 == NULL && bootArgs2 == NULL) {
DBG("BootArgs not found - skipping patches!\n");
DBG_RT("BootArgs not found - skipping patches!\n");
return;
}
@ -2267,6 +2305,7 @@ LOADER_ENTRY::KernelAndKextPatcherInit()
// for AptioFix booting - it's always at KernelRelocBase + 0x00200000
UINT64 os_version = AsciiOSVersionToUint64(OSVersion);
DBG_RT("os_version=%s\n", OSVersion);
if (os_version < AsciiOSVersionToUint64("10.6")) {
KernelData = (UINT8*)(UINTN)(KernelSlide + KernelRelocBase + 0x00111000);
} else {
@ -2275,7 +2314,7 @@ LOADER_ENTRY::KernelAndKextPatcherInit()
// check that it is Mach-O header and detect architecture
if(MACH_GET_MAGIC(KernelData) == MH_MAGIC || MACH_GET_MAGIC(KernelData) == MH_CIGAM) {
DBG("Found 32 bit kernel at 0x%llx\n", (UINTN)KernelData);
DBG_RT("Found 32 bit kernel at 0x%llx\n", (UINTN)KernelData);
is64BitKernel = FALSE;
} else if (MACH_GET_MAGIC(KernelData) == MH_MAGIC_64 || MACH_GET_MAGIC(KernelData) == MH_CIGAM_64) {
DBG_RT( "Found 64 bit kernel at 0x%llx\n", (UINTN)KernelData);
@ -2490,6 +2529,7 @@ LOADER_ENTRY::KernelAndKextsPatcherStart()
);
if (KextPatchesNeeded && gSettings.KextPatchesAllowed) {
DBG_RT( "\nKext patching INIT\n");
KernelAndKextPatcherInit();
if (KernelData == NULL) goto NoKernelData;
DBG_RT( "\nKext patching STARTED\n");

View File

@ -1000,6 +1000,14 @@ VOID EFIAPI LOADER_ENTRY::KernelBooterExtensionsPatch()
// }
// DBG_RT("\n");
// Stall(10000000);
//second attempt brute force for 10.16
const UINT8 findJmp2[] = {0xEB, 0x05, 0xE8, 0x7D, 0x03};
const UINT8 patchJmp2[] = {0x90, 0x90, 0xE8, 0x7D, 0x03};
if (!SearchAndReplace(&KernelData[0], KERNEL_MAX_SIZE, findJmp2, 5, patchJmp2, 1)) {
DBG_RT("load kexts 2 not patched\n");
} else {
DBG_RT("load kexts 2 patched !!!\n");
}
} else {
DBG_RT("load kexts patched\n");
// for (UINTN j=procLocation+0x3b; j<procLocation+0x5b; ++j) {
@ -1079,7 +1087,7 @@ VOID EFIAPI LOADER_ENTRY::KernelBooterExtensionsPatch()
//ffffff80009a227b
UINTN taskLocation = searchProc("IOTaskHasEntitlement");
procLocation = searchProc("loadExecutable");
patchLocation2 = FindMemMask(&KernelData[procLocation], 0x500, find3, sizeof(find3), mask3, sizeof(mask3));
patchLocation2 = FindMemMask(&KernelData[procLocation], 0x1000, find3, sizeof(find3), mask3, sizeof(mask3));
if (patchLocation2 != KERNEL_MAX_SIZE) {
DBG_RT("=> patch SIP applied\n");
patchLocation2 += procLocation;
@ -1090,11 +1098,13 @@ VOID EFIAPI LOADER_ENTRY::KernelBooterExtensionsPatch()
KernelData[patchLocation2 + 4] = 0x12;
}
} else {
patchLocation2 = FindRelative32(KernelData, procLocation, 0x500, taskLocation);
patchLocation2 = FindRelative32(KernelData, procLocation, 0x1000, taskLocation);
if (patchLocation2 != 0) {
DBG_RT("=> patch2 SIP applied\n");
KernelData[patchLocation2] = 0xEB;
KernelData[patchLocation2 + 1] = 0x06;
} else {
DBG_RT("=> patch2 SIP not applied\n");
}
}
Stall(10000000);
@ -1173,7 +1183,7 @@ VOID EFIAPI LOADER_ENTRY::KernelBooterExtensionsPatch()
}
*/
if (patchLocation3 == KERNEL_MAX_SIZE) {
DBG_RT("==> can't find KxldUnmap (10.14 - recent macOS), kernel patch aborted.\n");
DBG_RT("==> can't find KxldUnmap (10.14 - recent macOS)\n");
Stall(3000000);
} else {
DBG_RT("==> patched KxldUnmap (10.14 - recent macOS)\n");

View File

@ -206,7 +206,8 @@ CONST XStringW OSXInstallerPaths[] = {
L"\\Mac OS X Install Data\\boot.efi"_XSW, // 10.7
L"\\OS X Install Data\\boot.efi"_XSW, // 10.8 - 10.11
L"\\macOS Install Data\\boot.efi"_XSW, // 10.12 - 10.12.3
L"\\macOS Install Data\\Locked Files\\Boot Files\\boot.efi"_XSW // 10.12.4+
L"\\macOS Install Data\\Locked Files\\Boot Files\\boot.efi"_XSW, // 10.12.4-10.15
L"\\macOS Install Data\\Locked Files\\boot.efi"_XSW // 10.16+
};
STATIC CONST UINTN OSXInstallerPathsCount = (sizeof(OSXInstallerPaths) / sizeof(OSXInstallerPaths[0]));
@ -1362,6 +1363,7 @@ VOID ScanLoader(VOID)
AddLoaderEntry(L"\\OS X Install Data\\boot.efi"_XSW, NullXStringArray, L"OS X Install"_XSW, Volume, NULL, OSTYPE_OSX_INSTALLER, 0); // 10.8 - 10.11
AddLoaderEntry(L"\\macOS Install Data\\boot.efi"_XSW, NullXStringArray, L"macOS Install"_XSW, Volume, NULL, OSTYPE_OSX_INSTALLER, 0); // 10.12 - 10.12.3
AddLoaderEntry(L"\\macOS Install Data\\Locked Files\\Boot Files\\boot.efi"_XSW, NullXStringArray, L"macOS Install"_XSW, Volume, NULL, OSTYPE_OSX_INSTALLER, 0); // 10.12.4+
AddLoaderEntry(L"\\macOS Install Data\\Locked Files\\boot.efi"_XSW, NullXStringArray, L"macOS Install"_XSW, Volume, NULL, OSTYPE_OSX_INSTALLER, 0); // 10.16+
AddPRSEntry(Volume); // 10.12+
// Netinstall

View File

@ -718,7 +718,7 @@ VOID LOADER_ENTRY::StartLoader()
}
OSVersion = (__typeof__(OSVersion))AllocateCopyPool(AsciiStrLen(InstallerVersion)+1, InstallerVersion);
OSVersion[AsciiStrLen(InstallerVersion)] = '\0';
// DBG("Corrected OSVersion: %s\n", OSVersion);
DBG("Corrected OSVersion: %s\n", OSVersion);
}
}
}