take into account longer DSDT

Signed-off-by: SergeySlice <sergey.slice@gmail.com>
This commit is contained in:
SergeySlice 2020-05-06 09:21:30 +03:00
parent b7470f8638
commit 562e571d32
3 changed files with 36 additions and 35 deletions

View File

@ -5370,7 +5370,7 @@ VOID RenameDevices(UINT8* table)
MsgLog(" %lld replacements\n", Num); MsgLog(" %lld replacements\n", Num);
} }
VOID FixBiosDsdt (UINT8* temp, EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE* fadt, CHAR8 *OSVersion) VOID FixBiosDsdt(UINT8* temp, EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE* fadt, CHAR8 *OSVersion)
{ {
UINT32 DsdtLen; UINT32 DsdtLen;
@ -5386,7 +5386,7 @@ VOID FixBiosDsdt (UINT8* temp, EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE* fadt,
USBIDFIX = TRUE; USBIDFIX = TRUE;
DsdtLen = ((EFI_ACPI_DESCRIPTION_HEADER*)temp)->Length; DsdtLen = ((EFI_ACPI_DESCRIPTION_HEADER*)temp)->Length;
if ((DsdtLen < 20) || (DsdtLen > 400000)) { //fool proof (some ASUS dsdt > 300kb?) if ((DsdtLen < 20) || (DsdtLen > 1000000)) { //fool proof (some ASUS dsdt > 300kb?). Up to 1Mb
MsgLog("DSDT length out of range\n"); MsgLog("DSDT length out of range\n");
return; return;
} }

View File

@ -468,7 +468,7 @@ VOID LOADER_ENTRY::KernelPatcher_64(VOID* kernelData)
} }
} }
VOID LOADER_ENTRY::KernelPatcher_32(VOID* kernelData, CHAR8 *OSVersion) VOID LOADER_ENTRY::KernelPatcher_32(VOID* kernelData)
{ {
UINT8* bytes = (UINT8*)kernelData; UINT8* bytes = (UINT8*)kernelData;
UINT32 patchLocation=0, patchLocation1=0; UINT32 patchLocation=0, patchLocation1=0;
@ -578,11 +578,12 @@ VOID LOADER_ENTRY::KernelPatcher_32(VOID* kernelData, CHAR8 *OSVersion)
} }
//Slice - FakeCPUID substitution, (c)2014 //Slice - FakeCPUID substitution, (c)2014
// _cpuid_set_info
//TODO remake to patterns //TODO remake to patterns
//procedure location //procedure location
STATIC UINT8 StrCpuid1_tigLeo[] = {0xb9, 0x01, 0x00, 0x00, 0x00, 0x89, 0xc8, 0x0f, 0xa2}; const UINT8 StrCpuid1_tigLeo[] = {0xb9, 0x01, 0x00, 0x00, 0x00, 0x89, 0xc8, 0x0f, 0xa2};
STATIC UINT8 StrCpuid1_snowLeo[] = {0xb8, 0x01, 0x00, 0x00, 0x00, 0x31, 0xdb, 0x89, 0xd9, 0x89, 0xda, 0x0f, 0xa2}; const UINT8 StrCpuid1_snowLeo[] = {0xb8, 0x01, 0x00, 0x00, 0x00, 0x31, 0xdb, 0x89, 0xd9, 0x89, 0xda, 0x0f, 0xa2};
STATIC UINT8 StrMsr8b[] = {0xb9, 0x8b, 0x00, 0x00, 0x00, 0x0f, 0x32}; const UINT8 StrMsr8b[] = {0xb9, 0x8b, 0x00, 0x00, 0x00, 0x0f, 0x32};
// Tiger/Leopard/Snow Leopard // Tiger/Leopard/Snow Leopard
/* /*
@ -592,9 +593,9 @@ STATIC UINT8 StrMsr8b[] = {0xb9, 0x8b, 0x00, 0x00, 0x00, 0x0f, 0x32};
and replaces to and replaces to
mov eax, FakeModel | mov eax, FakeExt mov eax, FakeModel | mov eax, FakeExt
*/ */
STATIC UINT8 TigLeoSLSearchModel[] = {0x25, 0xf0, 0x00, 0x00, 0x00, 0xc1, 0xe8, 0x04}; const UINT8 TigLeoSLSearchModel[] = {0x25, 0xf0, 0x00, 0x00, 0x00, 0xc1, 0xe8, 0x04};
STATIC UINT8 TigLeoSLSearchExt[] = {0x25, 0x00, 0x00, 0x0f, 0x00, 0xc1, 0xe8, 0x10}; const UINT8 TigLeoSLSearchExt[] = {0x25, 0x00, 0x00, 0x0f, 0x00, 0xc1, 0xe8, 0x10};
STATIC UINT8 TigLeoSLReplaceModel[] = {0xb8, 0x07, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90}; const UINT8 TigLeoSLReplaceModel[] = {0xb8, 0x07, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90};
// Lion // Lion
/* /*
@ -604,9 +605,9 @@ STATIC UINT8 TigLeoSLReplaceModel[] = {0xb8, 0x07, 0x00, 0x00, 0x00, 0x90, 0x90,
and replaces to and replaces to
mov ecx, FakeModel || mov ecx, FakeExt mov ecx, FakeModel || mov ecx, FakeExt
*/ */
STATIC UINT8 LionSearchModel[] = {0x89, 0xc1, 0xc1, 0xe9, 0x04}; const UINT8 LionSearchModel[] = {0x89, 0xc1, 0xc1, 0xe9, 0x04};
STATIC UINT8 LionSearchExt[] = {0x89, 0xc1, 0xc1, 0xe9, 0x10}; const UINT8 LionSearchExt[] = {0x89, 0xc1, 0xc1, 0xe9, 0x10};
STATIC UINT8 LionReplaceModel[] = {0xb9, 0x07, 0x00, 0x00, 0x00}; const UINT8 LionReplaceModel[] = {0xb9, 0x07, 0x00, 0x00, 0x00};
// Mountain Lion/Mavericks // Mountain Lion/Mavericks
/* /*
@ -616,10 +617,10 @@ STATIC UINT8 LionReplaceModel[] = {0xb9, 0x07, 0x00, 0x00, 0x00};
and replaces to and replaces to
mov ebx, FakeModel || mov eax, FakeExt mov ebx, FakeModel || mov eax, FakeExt
*/ */
STATIC UINT8 MLMavSearchModel[] = {0x88, 0xc3, 0xc0, 0xeb, 0x04}; const UINT8 MLMavSearchModel[] = {0x88, 0xc3, 0xc0, 0xeb, 0x04};
STATIC UINT8 MLMavSearchExt[] = {0xc1, 0xe8, 0x10, 0x24, 0x0f}; const UINT8 MLMavSearchExt[] = {0xc1, 0xe8, 0x10, 0x24, 0x0f};
STATIC UINT8 MLMavReplaceModel[] = {0xbb, 0x0a, 0x00, 0x00, 0x00}; const UINT8 MLMavReplaceModel[] = {0xbb, 0x0a, 0x00, 0x00, 0x00};
STATIC UINT8 MLMavReplaceExt[] = {0xb8, 0x02, 0x00, 0x00, 0x00}; const UINT8 MLMavReplaceExt[] = {0xb8, 0x02, 0x00, 0x00, 0x00};
// Yosemite/El Capitan/Sierra // Yosemite/El Capitan/Sierra
/* /*
@ -629,11 +630,11 @@ STATIC UINT8 MLMavReplaceExt[] = {0xb8, 0x02, 0x00, 0x00, 0x00};
and replaces to and replaces to
mov ecx, FakeModel || mov ecx, FakeExt mov ecx, FakeModel || mov ecx, FakeExt
*/ */
STATIC UINT8 YosECSieSearchModel[] = {0x88, 0xc1, 0xc0, 0xe9, 0x04}; const UINT8 YosECSieSearchModel[] = {0x88, 0xc1, 0xc0, 0xe9, 0x04};
STATIC UINT8 YosECSieSearchExt[] = {0x89, 0xc1, 0xc1, 0xe9, 0x10}; const UINT8 YosECSieSearchExt[] = {0x89, 0xc1, 0xc1, 0xe9, 0x10};
// Need to use LionReplaceModel // Need to use LionReplaceModel
// High Sierra/Mojave // High Sierra/Mojave @2c4baa {89 c1 c0 e9 04}
/* /*
This patch searches This patch searches
mov ecx, ecx || mov ecx, eax mov ecx, ecx || mov ecx, eax
@ -641,7 +642,7 @@ STATIC UINT8 YosECSieSearchExt[] = {0x89, 0xc1, 0xc1, 0xe9, 0x10};
and replaces to and replaces to
mov ecx, FakeModel || mov ecx, FakeExt mov ecx, FakeModel || mov ecx, FakeExt
*/ */
STATIC UINT8 HSieMojSearchModel[] = {0x89, 0xc1, 0xc0, 0xe9, 0x04}; const UINT8 HSieMojSearchModel[] = {0x89, 0xc1, 0xc0, 0xe9, 0x04};
// Need to use YosECSieSearchExt, LionReplaceModel // Need to use YosECSieSearchExt, LionReplaceModel
// Catalina // Catalina
@ -653,13 +654,13 @@ STATIC UINT8 HSieMojSearchModel[] = {0x89, 0xc1, 0xc0, 0xe9, 0x04};
mov eax, FakeModel || mov eax, FakeExt mov eax, FakeModel || mov eax, FakeExt
nop || nop nop || nop
*/ */
STATIC UINT8 CataSearchModel[] = {0x44, 0x89, 0xE0, 0xC0, 0xE8, 0x04}; const UINT8 CataSearchModel[] = {0x44, 0x89, 0xE0, 0xC0, 0xE8, 0x04};
STATIC UINT8 CataSearchExt[] = {0x44, 0x89, 0xE0, 0xC1, 0xE8, 0x10}; const UINT8 CataSearchExt[] = {0x44, 0x89, 0xE0, 0xC1, 0xE8, 0x10};
STATIC UINT8 CataReplaceMovEax[] = {0xB8, 0x00, 0x00, 0x00, 0x00, 0x90}; // mov eax, val || nop const UINT8 CataReplaceMovEax[] = {0xB8, 0x00, 0x00, 0x00, 0x00, 0x90}; // mov eax, val || nop
BOOLEAN LOADER_ENTRY::PatchCPUID(UINT8* bytes, UINT8* Location, INT32 LenLoc, BOOLEAN LOADER_ENTRY::PatchCPUID(UINT8* bytes, const UINT8* Location, INT32 LenLoc,
UINT8* Search4, UINT8* Search10, UINT8* ReplaceModel, const UINT8* Search4, const UINT8* Search10, const UINT8* ReplaceModel,
UINT8* ReplaceExt, INT32 Len) const UINT8* ReplaceExt, INT32 Len)
{ {
INT32 patchLocation=0, patchLocation1=0; INT32 patchLocation=0, patchLocation1=0;
INT32 Adr = 0, Num; INT32 Adr = 0, Num;
@ -667,18 +668,18 @@ BOOLEAN LOADER_ENTRY::PatchCPUID(UINT8* bytes, UINT8* Location, INT32 LenLoc,
UINT8 FakeModel = (KernelAndKextPatches->FakeCPUID >> 4) & 0x0f; UINT8 FakeModel = (KernelAndKextPatches->FakeCPUID >> 4) & 0x0f;
UINT8 FakeExt = (KernelAndKextPatches->FakeCPUID >> 0x10) & 0x0f; UINT8 FakeExt = (KernelAndKextPatches->FakeCPUID >> 0x10) & 0x0f;
for (Num = 0; Num < 2; Num++) { for (Num = 0; Num < 2; Num++) {
Adr = FindBin(&bytes[Adr], 0x800000 - Adr, (const UINT8*)Location, (UINT32)LenLoc); Adr = FindBin(&bytes[Adr], 0x800000 - Adr, Location, (UINT32)LenLoc);
if (Adr < 0) { if (Adr < 0) {
break; break;
} }
DBG_RT( "found location at %x\n", Adr); DBG_RT( "found location at %x\n", Adr);
patchLocation = FindBin(&bytes[Adr], 0x100, (const UINT8*)Search4, (UINT32)Len); patchLocation = FindBin(&bytes[Adr], 0x100, Search4, (UINT32)Len);
if (patchLocation > 0 && patchLocation < 70) { if (patchLocation > 0 && patchLocation < 70) {
//found //found
DBG_RT( "found Model location at %x\n", Adr + patchLocation); DBG_RT( "found Model location at %x\n", Adr + patchLocation);
CopyMem(&bytes[Adr + patchLocation], ReplaceModel, Len); CopyMem(&bytes[Adr + patchLocation], ReplaceModel, Len);
bytes[Adr + patchLocation + 1] = FakeModel; bytes[Adr + patchLocation + 1] = FakeModel;
patchLocation1 = FindBin(&bytes[Adr], 0x100, (const UINT8*)Search10, (UINT32)Len); patchLocation1 = FindBin(&bytes[Adr], 0x100, Search10, (UINT32)Len);
if (patchLocation1 > 0 && patchLocation1 < 100) { if (patchLocation1 > 0 && patchLocation1 < 100) {
DBG_RT( "found ExtModel location at %x\n", Adr + patchLocation1); DBG_RT( "found ExtModel location at %x\n", Adr + patchLocation1);
CopyMem(&bytes[Adr + patchLocation1], ReplaceExt, Len); CopyMem(&bytes[Adr + patchLocation1], ReplaceExt, Len);
@ -1095,7 +1096,7 @@ static inline VOID applyKernPatch(UINT8 *kern, const UINT8 *find, UINTN size, co
{ {
DBG("Searching %s...\n", comment); DBG("Searching %s...\n", comment);
if (SearchAndReplace(kern, KERNEL_MAX_SIZE, find, size, repl, 0)) { if (SearchAndReplace(kern, KERNEL_MAX_SIZE, find, size, repl, 0)) {
DBG("Found %s\nApplied %s patch\n", comment, comment); DBG("Found %s\nApplied patch\n", comment);
} else { } else {
DBG("%s no found, patched already?\n", comment); DBG("%s no found, patched already?\n", comment);
} }
@ -2246,7 +2247,7 @@ LOADER_ENTRY::KernelAndKextsPatcherStart()
KernelPatcher_64(KernelData); KernelPatcher_64(KernelData);
} else { } else {
DBG_RT( "32 bit patch ...\n"); DBG_RT( "32 bit patch ...\n");
KernelPatcher_32(KernelData, OSVersion); KernelPatcher_32(KernelData);
} }
DBG_RT( " OK\n"); DBG_RT( " OK\n");
} else { } else {

View File

@ -384,10 +384,10 @@ class REFIT_ABSTRACT_MENU_ENTRY
VOID EFIAPI KernelBooterExtensionsPatch(IN UINT8 *Kernel); VOID EFIAPI KernelBooterExtensionsPatch(IN UINT8 *Kernel);
BOOLEAN KernelPanicNoKextDump(VOID *kernelData); BOOLEAN KernelPanicNoKextDump(VOID *kernelData);
VOID KernelCPUIDPatch(UINT8* kernelData); VOID KernelCPUIDPatch(UINT8* kernelData);
BOOLEAN PatchCPUID(UINT8* bytes, UINT8* Location, INT32 LenLoc, BOOLEAN PatchCPUID(UINT8* bytes, const UINT8* Location, INT32 LenLoc,
UINT8* Search4, UINT8* Search10, UINT8* ReplaceModel, const UINT8* Search4, const UINT8* Search10, const UINT8* ReplaceModel,
UINT8* ReplaceExt, INT32 Len); const UINT8* ReplaceExt, INT32 Len);
VOID KernelPatcher_32(VOID* kernelData, CHAR8 *OSVersion); VOID KernelPatcher_32(VOID* kernelData);
VOID KernelPatcher_64(VOID* kernelData); VOID KernelPatcher_64(VOID* kernelData);
VOID FilterKernelPatches(); VOID FilterKernelPatches();
VOID FilterKextPatches(); VOID FilterKextPatches();