added splash screen ascii art for amd & intel

merge-requests/1/merge
xerox 4 years ago
parent df38380f68
commit cc23c9397a

@ -1,4 +1,5 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
SHITHOOK BootMgfwShitHook; SHITHOOK BootMgfwShitHook;
EFI_STATUS EFIAPI RestoreBootMgfw(VOID) EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
@ -138,9 +139,8 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE ImageHandle)
if (EFI_ERROR(Result = gBS->HandleProtocol(ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw))) if (EFI_ERROR(Result = gBS->HandleProtocol(ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw)))
return Result; return Result;
DBG_PRINT("Module base -> 0x%p\n", BootMgfw->ImageBase); Print(L"BootMgfw Image Base -> 0x%p\n", BootMgfw->ImageBase);
DBG_PRINT("Module size -> 0x%x\n", BootMgfw->ImageSize); Print(L"BootMgfw Image Size -> 0x%x\n", BootMgfw->ImageSize);
VOID* ArchStartBootApplication = VOID* ArchStartBootApplication =
FindPattern( FindPattern(
BootMgfw->ImageBase, BootMgfw->ImageBase,
@ -152,7 +152,7 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE ImageHandle)
if (!ArchStartBootApplication) if (!ArchStartBootApplication)
return EFI_ABORTED; return EFI_ABORTED;
DBG_PRINT("ArchStartBootApplication -> 0x%p\n", RESOLVE_RVA(ArchStartBootApplication, 5, 1)); Print(L"BootMgfw.ArchStartBootApplication -> 0x%p\n", ArchStartBootApplication);
MakeShitHook(&BootMgfwShitHook, RESOLVE_RVA(ArchStartBootApplication, 5, 1), &ArchStartBootApplicationHook, TRUE); MakeShitHook(&BootMgfwShitHook, RESOLVE_RVA(ArchStartBootApplication, 5, 1), &ArchStartBootApplicationHook, TRUE);
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -168,9 +168,10 @@ EFI_STATUS EFIAPI ArchStartBootApplicationHook(VOID* AppEntry, VOID* ImageBase,
LOAD_PE_IMG_MASK LOAD_PE_IMG_MASK
); );
gST->ConOut->ClearScreen(gST->ConOut);
gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"\n");
Print(L"PE PayLoad Size -> 0x%x\n", PayLoadSize()); Print(L"PE PayLoad Size -> 0x%x\n", PayLoadSize());
Print(L"winload base -> 0x%p\n", ImageBase);
Print(L"winload size -> 0x%x\n", ImageSize);
Print(L"winload.BlImgLoadPEImageEx -> 0x%p\n", RESOLVE_RVA(ImgLoadPEImageEx, 5, 1)); Print(L"winload.BlImgLoadPEImageEx -> 0x%p\n", RESOLVE_RVA(ImgLoadPEImageEx, 5, 1));
MakeShitHook(&WinLoadImageShitHook, RESOLVE_RVA(ImgLoadPEImageEx, 5, 1), &BlImgLoadPEImageEx, TRUE); MakeShitHook(&WinLoadImageShitHook, RESOLVE_RVA(ImgLoadPEImageEx, 5, 1), &BlImgLoadPEImageEx, TRUE);

@ -0,0 +1,67 @@
#include "SplashScreen.h"
unsigned char AsciiArt[1473] =
{
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00,
0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00,
0x27, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x7C, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2D, 0x00,
0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00,
0x2E, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x27, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00,
0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x2F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00,
0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x22, 0x00, 0x00
};

@ -0,0 +1,2 @@
#pragma once
unsigned char AsciiArt[1473];

@ -1,4 +1,5 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
CHAR8* gEfiCallerBaseName = "Voyager"; CHAR8* gEfiCallerBaseName = "Voyager";
const UINT32 _gUefiDriverRevision = 0x200; const UINT32 _gUefiDriverRevision = 0x200;
@ -16,16 +17,24 @@ EFI_STATUS EFIAPI UefiMain
{ {
EFI_STATUS Result; EFI_STATUS Result;
EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath; EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath;
gST->ConOut->ClearScreen(gST->ConOut);
gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"\n");
if (EFI_ERROR((Result = RestoreBootMgfw()))) if (EFI_ERROR((Result = RestoreBootMgfw())))
{ {
DBG_PRINT("unable to restore bootmgfw... reason -> %r\n", Result); Print(L"unable to restore bootmgfw... reason -> %r\n", Result);
return Result; return Result;
} }
if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle)))) if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle))))
{ {
DBG_PRINT("Failed to install bootmgfw hooks... reason -> %r\n", Result); Print(L"Failed to install bootmgfw hooks... reason -> %r\n", Result);
return Result; return Result;
} }
Print(L"Hooks installed... returning execution back to BootMgfw...\n");
gBS->Stall(5 * 1000000);
return EFI_SUCCESS; return EFI_SUCCESS;
} }

@ -179,6 +179,7 @@
<ClCompile Include="HvLoader.c" /> <ClCompile Include="HvLoader.c" />
<ClCompile Include="ShitHook.c" /> <ClCompile Include="ShitHook.c" />
<ClCompile Include="PayLoad.c" /> <ClCompile Include="PayLoad.c" />
<ClCompile Include="SplashScreen.c" />
<ClCompile Include="UefiMain.c" /> <ClCompile Include="UefiMain.c" />
<ClCompile Include="Utils.c" /> <ClCompile Include="Utils.c" />
<ClCompile Include="WinLoad.c" /> <ClCompile Include="WinLoad.c" />
@ -189,6 +190,7 @@
<ClInclude Include="HvLoader.h" /> <ClInclude Include="HvLoader.h" />
<ClInclude Include="ShitHook.h" /> <ClInclude Include="ShitHook.h" />
<ClInclude Include="PayLoad.h" /> <ClInclude Include="PayLoad.h" />
<ClInclude Include="SplashScreen.h" />
<ClInclude Include="Utils.h" /> <ClInclude Include="Utils.h" />
<ClInclude Include="WinLoad.h" /> <ClInclude Include="WinLoad.h" />
</ItemGroup> </ItemGroup>

@ -35,6 +35,9 @@
<ClCompile Include="HvLoader.c"> <ClCompile Include="HvLoader.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="SplashScreen.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="BootMgfw.h"> <ClInclude Include="BootMgfw.h">
@ -58,5 +61,8 @@
<ClInclude Include="HvLoader.h"> <ClInclude Include="HvLoader.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="SplashScreen.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -4,11 +4,10 @@
#include "PayLoad.h" #include "PayLoad.h"
extern SHITHOOK WinLoadImageShitHook; extern SHITHOOK WinLoadImageShitHook;
#if WINVER == 1703 #if WINVER == 1703
#define LOAD_PE_IMG_SIG "\xE8\x00\x00\x00\x00\x85\xC0\x79\x45" #define LOAD_PE_IMG_SIG "\xE8\x00\x00\x00\x00\x85\xC0\x79\x45"
#define LOAD_PE_IMG_MASK "x????xxxx" #define LOAD_PE_IMG_MASK "x????xxxx"
#elif WINVER <= 1607 // works for 1511 #elif WINVER <= 1607
#define LOAD_PE_IMG_SIG "\xE8\x00\x00\x00\x00\x48\x8B\x7D\xF7" #define LOAD_PE_IMG_SIG "\xE8\x00\x00\x00\x00\x48\x8B\x7D\xF7"
#define LOAD_PE_IMG_MASK "x????xxxx" #define LOAD_PE_IMG_MASK "x????xxxx"
#endif #endif

@ -1,4 +1,5 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
SHITHOOK BootMgfwShitHook; SHITHOOK BootMgfwShitHook;
EFI_STATUS EFIAPI RestoreBootMgfw(VOID) EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
@ -12,7 +13,7 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
if (EFI_ERROR((Result = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid, NULL, &HandleCount, &Handles)))) if (EFI_ERROR((Result = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid, NULL, &HandleCount, &Handles))))
{ {
DBG_PRINT("error getting file system handles -> 0x%p\n", Result); Print(L"error getting file system handles -> 0x%p\n", Result);
return Result; return Result;
} }
@ -20,13 +21,13 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
{ {
if (EFI_ERROR((Result = gBS->OpenProtocol(Handles[Idx], &gEfiSimpleFileSystemProtocolGuid, (VOID**)&FileSystem, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL)))) if (EFI_ERROR((Result = gBS->OpenProtocol(Handles[Idx], &gEfiSimpleFileSystemProtocolGuid, (VOID**)&FileSystem, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL))))
{ {
DBG_PRINT("error opening protocol -> 0x%p\n", Result); Print(L"error opening protocol -> 0x%p\n", Result);
return Result; return Result;
} }
if (EFI_ERROR((Result = FileSystem->OpenVolume(FileSystem, &VolumeHandle)))) if (EFI_ERROR((Result = FileSystem->OpenVolume(FileSystem, &VolumeHandle))))
{ {
DBG_PRINT("error opening file system -> 0x%p\n", Result); Print(L"error opening file system -> 0x%p\n", Result);
return Result; return Result;
} }
@ -39,13 +40,13 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
// open bootmgfw as read/write then delete it... // open bootmgfw as read/write then delete it...
if (EFI_ERROR((Result = EfiOpenFileByDevicePath(&BootMgfwPathProtocol, &BootMgfwFile, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, NULL)))) if (EFI_ERROR((Result = EfiOpenFileByDevicePath(&BootMgfwPathProtocol, &BootMgfwFile, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, NULL))))
{ {
DBG_PRINT("error opening bootmgfw... reason -> %r\n", Result); Print(L"error opening bootmgfw... reason -> %r\n", Result);
return Result; return Result;
} }
if (EFI_ERROR((Result = BootMgfwFile->Delete(BootMgfwFile)))) if (EFI_ERROR((Result = BootMgfwFile->Delete(BootMgfwFile))))
{ {
DBG_PRINT("error deleting bootmgfw... reason -> %r\n", Result); Print(L"error deleting bootmgfw... reason -> %r\n", Result);
return Result; return Result;
} }
@ -53,7 +54,7 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
BootMgfwPathProtocol = FileDevicePath(Handles[Idx], WINDOWS_BOOTMGFW_BACKUP_PATH); BootMgfwPathProtocol = FileDevicePath(Handles[Idx], WINDOWS_BOOTMGFW_BACKUP_PATH);
if (EFI_ERROR((Result = EfiOpenFileByDevicePath(&BootMgfwPathProtocol, &BootMgfwFile, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, NULL)))) if (EFI_ERROR((Result = EfiOpenFileByDevicePath(&BootMgfwPathProtocol, &BootMgfwFile, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, NULL))))
{ {
DBG_PRINT("failed to open backup file... reason -> %r\n", Result); Print(L"failed to open backup file... reason -> %r\n", Result);
return Result; return Result;
} }
@ -68,13 +69,13 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
gBS->AllocatePool(EfiBootServicesData, FileInfoSize, &FileInfoPtr); gBS->AllocatePool(EfiBootServicesData, FileInfoSize, &FileInfoPtr);
if (EFI_ERROR(Result = BootMgfwFile->GetInfo(BootMgfwFile, &gEfiFileInfoGuid, &FileInfoSize, FileInfoPtr))) if (EFI_ERROR(Result = BootMgfwFile->GetInfo(BootMgfwFile, &gEfiFileInfoGuid, &FileInfoSize, FileInfoPtr)))
{ {
DBG_PRINT("get backup file information failed... reason -> %r\n", Result); Print(L"get backup file information failed... reason -> %r\n", Result);
return Result; return Result;
} }
} }
else else
{ {
DBG_PRINT("Failed to get file information... reason -> %r\n", Result); Print(L"Failed to get file information... reason -> %r\n", Result);
return Result; return Result;
} }
} }
@ -86,14 +87,14 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
// read the backup file into an allocated pool... // read the backup file into an allocated pool...
if (EFI_ERROR((Result = BootMgfwFile->Read(BootMgfwFile, &BootMgfwSize, BootMgfwBuffer)))) if (EFI_ERROR((Result = BootMgfwFile->Read(BootMgfwFile, &BootMgfwSize, BootMgfwBuffer))))
{ {
DBG_PRINT("Failed to read backup file into buffer... reason -> %r\n", Result); Print(L"Failed to read backup file into buffer... reason -> %r\n", Result);
return Result; return Result;
} }
// delete the backup file... // delete the backup file...
if (EFI_ERROR((Result = BootMgfwFile->Delete(BootMgfwFile)))) if (EFI_ERROR((Result = BootMgfwFile->Delete(BootMgfwFile))))
{ {
DBG_PRINT("unable to delete backup file... reason -> %r\n", Result); Print(L"unable to delete backup file... reason -> %r\n", Result);
return Result; return Result;
} }
@ -101,7 +102,7 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
BootMgfwPathProtocol = FileDevicePath(Handles[Idx], WINDOWS_BOOTMGFW_PATH); BootMgfwPathProtocol = FileDevicePath(Handles[Idx], WINDOWS_BOOTMGFW_PATH);
if (EFI_ERROR((Result = EfiOpenFileByDevicePath(&BootMgfwPathProtocol, &BootMgfwFile, EFI_FILE_MODE_CREATE | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, EFI_FILE_SYSTEM)))) if (EFI_ERROR((Result = EfiOpenFileByDevicePath(&BootMgfwPathProtocol, &BootMgfwFile, EFI_FILE_MODE_CREATE | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, EFI_FILE_SYSTEM))))
{ {
DBG_PRINT("unable to create new bootmgfw on disk... reason -> %r\n", Result); Print(L"unable to create new bootmgfw on disk... reason -> %r\n", Result);
return Result; return Result;
} }
@ -109,7 +110,7 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
BootMgfwSize = FileInfoPtr->FileSize; BootMgfwSize = FileInfoPtr->FileSize;
if (EFI_ERROR((Result = BootMgfwFile->Write(BootMgfwFile, &BootMgfwSize, BootMgfwBuffer)))) if (EFI_ERROR((Result = BootMgfwFile->Write(BootMgfwFile, &BootMgfwSize, BootMgfwBuffer))))
{ {
DBG_PRINT("unable to write to newly created bootmgfw.efi... reason -> %r\n", Result); Print(L"unable to write to newly created bootmgfw.efi... reason -> %r\n", Result);
return Result; return Result;
} }
@ -121,7 +122,7 @@ EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
if (EFI_ERROR((Result = gBS->CloseProtocol(Handles[Idx], &gEfiSimpleFileSystemProtocolGuid, gImageHandle, NULL)))) if (EFI_ERROR((Result = gBS->CloseProtocol(Handles[Idx], &gEfiSimpleFileSystemProtocolGuid, gImageHandle, NULL))))
{ {
DBG_PRINT("error closing protocol -> 0x%p\n", Result); Print(L"error closing protocol -> 0x%p\n", Result);
return Result; return Result;
} }
} }
@ -138,8 +139,8 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE BootMgfwPath)
if (EFI_ERROR((Result = gBS->HandleProtocol(BootMgfwPath, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw)))) if (EFI_ERROR((Result = gBS->HandleProtocol(BootMgfwPath, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw))))
return Result; return Result;
Print(L"Image Base -> 0x%p\n", BootMgfw->ImageBase); Print(L"BootMgfw Image Base -> 0x%p\n", BootMgfw->ImageBase);
Print(L"Image Size -> 0x%x\n", BootMgfw->ImageSize); Print(L"BootMgfw Image Size -> 0x%x\n", BootMgfw->ImageSize);
VOID* ArchStartBootApplication = VOID* ArchStartBootApplication =
FindPattern( FindPattern(
BootMgfw->ImageBase, BootMgfw->ImageBase,
@ -151,7 +152,7 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE BootMgfwPath)
if (!ArchStartBootApplication) if (!ArchStartBootApplication)
return EFI_ABORTED; return EFI_ABORTED;
DBG_PRINT(L"ArchStartBootApplication -> 0x%p\n", ArchStartBootApplication); Print(L"BootMgfw.ArchStartBootApplication -> 0x%p\n", ArchStartBootApplication);
MakeShitHook(&BootMgfwShitHook, ArchStartBootApplication, &ArchStartBootApplicationHook, TRUE); MakeShitHook(&BootMgfwShitHook, ArchStartBootApplication, &ArchStartBootApplicationHook, TRUE);
return Result; return Result;
} }
@ -168,21 +169,14 @@ EFI_STATUS EFIAPI ArchStartBootApplicationHook(VOID* AppEntry, VOID* ImageBase,
ALLOCATE_IMAGE_BUFFER_MASK ALLOCATE_IMAGE_BUFFER_MASK
); );
gST->ConOut->ClearScreen(gST->ConOut);
gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"\n");
Print(L"Hyper-V PayLoad Size -> 0x%x\n", PayLoadSize()); Print(L"Hyper-V PayLoad Size -> 0x%x\n", PayLoadSize());
Print(L"winload base -> 0x%p\n", ImageBase);
Print(L"winload size -> 0x%x\n", ImageSize);
Print(L"winload.BlLdrLoadImage -> 0x%p\n", LdrLoadImage); Print(L"winload.BlLdrLoadImage -> 0x%p\n", LdrLoadImage);
Print(L"winload.BlImgAllocateImageBuffer -> 0x%p\n", ImgAllocateImageBuffer); Print(L"winload.BlImgAllocateImageBuffer -> 0x%p\n", ImgAllocateImageBuffer);
if (ImgAllocateImageBuffer && LdrLoadImage)
{
MakeShitHook(&WinLoadImageShitHook, LdrLoadImage, &BlLdrLoadImage, TRUE); MakeShitHook(&WinLoadImageShitHook, LdrLoadImage, &BlLdrLoadImage, TRUE);
MakeShitHook(&WinLoadAllocateImageHook, ImgAllocateImageBuffer, &BlImgAllocateImageBuffer, TRUE); MakeShitHook(&WinLoadAllocateImageHook, ImgAllocateImageBuffer, &BlImgAllocateImageBuffer, TRUE);
}
else
{
Print(L"nullptr detected, aborting...\n");
Print(L"Please submit a screenshot of this...\n");
}
return ((IMG_ARCH_START_BOOT_APPLICATION)BootMgfwShitHook.Address)(AppEntry, ImageBase, ImageSize, BootOption, ReturnArgs); return ((IMG_ARCH_START_BOOT_APPLICATION)BootMgfwShitHook.Address)(AppEntry, ImageBase, ImageSize, BootOption, ReturnArgs);
} }

@ -44,18 +44,18 @@ unsigned char PayLoad[3072] =
0x6A, 0xDE, 0x5F, 0x8E, 0xDC, 0xAF, 0x5D, 0x8F, 0x6A, 0xDE, 0x5F, 0x8E, 0x6A, 0xDE, 0x5F, 0x8E, 0xDC, 0xAF, 0x5D, 0x8F, 0x6A, 0xDE, 0x5F, 0x8E,
0x52, 0x69, 0x63, 0x68, 0x6B, 0xDE, 0x5F, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x52, 0x69, 0x63, 0x68, 0x6B, 0xDE, 0x5F, 0x8E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0x45, 0x00, 0x00, 0x64, 0x86, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x45, 0x00, 0x00, 0x64, 0x86, 0x05, 0x00,
0x13, 0xB9, 0x72, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x77, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF0, 0x00, 0x22, 0x20, 0x0B, 0x02, 0x0E, 0x1B, 0x00, 0x02, 0x00, 0x00, 0xF0, 0x00, 0x22, 0x20, 0x0B, 0x02, 0x0E, 0x1B, 0x00, 0x02, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xD4, 0x8A, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x2D, 0x00, 0x00,
0x01, 0x00, 0x60, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00,
0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
@ -69,7 +69,7 @@ unsigned char PayLoad[3072] =
0xA2, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x68, 0x2E, 0x72, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x68, 0x2E, 0x72, 0x64, 0x61,
0x74, 0x61, 0x00, 0x00, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x74, 0x61, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x48,
0x2E, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2E, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
@ -79,7 +79,7 @@ unsigned char PayLoad[3072] =
0x0C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x48, 0x2E, 0x65, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x48, 0x2E, 0x65, 0x64, 0x61,
0x74, 0x61, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x74, 0x61, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00,
0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -156,30 +156,30 @@ unsigned char PayLoad[3072] =
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x13, 0xB9, 0x72, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x77, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00,
0x38, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xB9, 0x72, 0x5F, 0x38, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x77, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x90, 0x20, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x52, 0x53, 0x44, 0x53, 0x94, 0x20, 0x00, 0x00, 0x94, 0x06, 0x00, 0x00, 0x52, 0x53, 0x44, 0x53,
0xD4, 0x11, 0x42, 0x7D, 0x4D, 0x15, 0x9E, 0x40, 0xAD, 0x44, 0xBC, 0xDA, 0x29, 0x18, 0x5B, 0x58, 0xF1, 0x50, 0x02, 0x48, 0x86, 0x42, 0x02, 0x28,
0x99, 0x36, 0xE3, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x43, 0x3A, 0x5C, 0x55, 0xE8, 0x50, 0x11, 0x93, 0x01, 0x00, 0x00, 0x00, 0x43, 0x3A, 0x5C, 0x55,
0x73, 0x65, 0x72, 0x73, 0x5C, 0x78, 0x65, 0x72, 0x6F, 0x78, 0x5C, 0x44, 0x73, 0x65, 0x72, 0x73, 0x5C, 0x78, 0x65, 0x72, 0x6F, 0x78, 0x5C, 0x44,
0x65, 0x73, 0x6B, 0x74, 0x6F, 0x70, 0x5C, 0x76, 0x6F, 0x79, 0x61, 0x67, 0x65, 0x73, 0x6B, 0x74, 0x6F, 0x70, 0x5C, 0x76, 0x6F, 0x79, 0x61, 0x67,
0x65, 0x72, 0x5C, 0x78, 0x36, 0x34, 0x5C, 0x52, 0x65, 0x6C, 0x65, 0x61, 0x65, 0x72, 0x5C, 0x56, 0x6F, 0x79, 0x61, 0x67, 0x65, 0x72, 0x2D, 0x31,
0x73, 0x65, 0x5C, 0x50, 0x61, 0x79, 0x4C, 0x6F, 0x61, 0x64, 0x28, 0x49, 0x5C, 0x78, 0x36, 0x34, 0x5C, 0x52, 0x65, 0x6C, 0x65, 0x61, 0x73, 0x65,
0x6E, 0x74, 0x65, 0x6C, 0x29, 0x2E, 0x70, 0x64, 0x62, 0x00, 0x00, 0x00, 0x5C, 0x50, 0x61, 0x79, 0x4C, 0x6F, 0x61, 0x64, 0x2E, 0x70, 0x64, 0x62,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0x2E, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6D, 0x6E, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0x2E, 0x74, 0x65, 0x78, 0x74, 0x24, 0x6D, 0x6E,
0x00, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2E, 0x72, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x74, 0x61, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x2E, 0x72, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00,
0x2E, 0x72, 0x64, 0x61, 0x74, 0x61, 0x24, 0x7A, 0x7A, 0x7A, 0x64, 0x62, 0xDC, 0x00, 0x00, 0x00, 0x2E, 0x72, 0x64, 0x61, 0x74, 0x61, 0x24, 0x7A,
0x67, 0x00, 0x00, 0x00, 0x10, 0x21, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x7A, 0x7A, 0x64, 0x62, 0x67, 0x00, 0x00, 0x00, 0x14, 0x21, 0x00, 0x00,
0x2E, 0x78, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x2E, 0x78, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2E, 0x62, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2E, 0x62, 0x73, 0x73,
0x00, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x2E, 0x70, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x74, 0x61, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x2E, 0x70, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00,
0x2E, 0x65, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x02, 0x0E, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, 0x2E, 0x65, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00,
0x01, 0x16, 0x00, 0x06, 0x0E, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0E, 0x03, 0x00, 0x01, 0x16, 0x00, 0x06, 0x0E, 0xA2, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -199,7 +199,7 @@ unsigned char PayLoad[3072] =
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0xA2, 0x10, 0x00, 0x00, 0x10, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x10, 0x00, 0x00, 0x14, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -245,11 +245,10 @@ unsigned char PayLoad[3072] =
0x00, 0x00, 0x00, 0x00, 0x32, 0x50, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x50, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x50, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x50, 0x00, 0x00,
0x2C, 0x50, 0x00, 0x00, 0x30, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x2C, 0x50, 0x00, 0x00, 0x30, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
0x45, 0x50, 0x00, 0x00, 0x00, 0x00, 0x50, 0x61, 0x79, 0x4C, 0x6F, 0x61, 0x3E, 0x50, 0x00, 0x00, 0x00, 0x00, 0x50, 0x61, 0x79, 0x4C, 0x6F, 0x61,
0x64, 0x28, 0x49, 0x6E, 0x74, 0x65, 0x6C, 0x29, 0x2E, 0x64, 0x6C, 0x6C, 0x64, 0x2E, 0x64, 0x6C, 0x6C, 0x00, 0x3F, 0x76, 0x6F, 0x79, 0x61, 0x67,
0x00, 0x3F, 0x76, 0x6F, 0x79, 0x61, 0x67, 0x65, 0x72, 0x5F, 0x63, 0x6F, 0x65, 0x72, 0x5F, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x40, 0x40,
0x6E, 0x74, 0x65, 0x78, 0x74, 0x40, 0x40, 0x33, 0x55, 0x5F, 0x56, 0x4F, 0x33, 0x55, 0x5F, 0x76, 0x6F, 0x79, 0x61, 0x67, 0x65, 0x72, 0x5F, 0x74,
0x59, 0x41, 0x47, 0x45, 0x52, 0x5F, 0x44, 0x41, 0x54, 0x41, 0x5F, 0x54,
0x40, 0x40, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -283,5 +282,6 @@ unsigned char PayLoad[3072] =
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}; };

@ -0,0 +1,67 @@
#include "SplashScreen.h"
unsigned char AsciiArt[1473] =
{
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00,
0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00,
0x27, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x7C, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2D, 0x00,
0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00,
0x2E, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x27, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00,
0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x2F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00,
0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x22, 0x00, 0x00
};

@ -0,0 +1,2 @@
#pragma once
unsigned char AsciiArt[1473];

@ -1,4 +1,5 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
CHAR8* gEfiCallerBaseName = "Voyager"; CHAR8* gEfiCallerBaseName = "Voyager";
const UINT32 _gUefiDriverRevision = 0x200; const UINT32 _gUefiDriverRevision = 0x200;
@ -6,7 +7,9 @@ const UINT32 _gUefiDriverRevision = 0x200;
EFI_STATUS EFIAPI UefiUnload( EFI_STATUS EFIAPI UefiUnload(
IN EFI_HANDLE ImageHandle IN EFI_HANDLE ImageHandle
) )
{ return EFI_SUCCESS; } {
return EFI_SUCCESS;
}
EFI_STATUS EFIAPI UefiMain EFI_STATUS EFIAPI UefiMain
( (
@ -17,16 +20,22 @@ EFI_STATUS EFIAPI UefiMain
EFI_STATUS Result; EFI_STATUS Result;
EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath; EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath;
gST->ConOut->ClearScreen(gST->ConOut);
gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"\n");
if (EFI_ERROR((Result = RestoreBootMgfw()))) if (EFI_ERROR((Result = RestoreBootMgfw())))
{ {
DBG_PRINT("unable to restore bootmgfw... reason -> %r\n", Result); Print(L"unable to restore bootmgfw... reason -> %r\n", Result);
return Result; return Result;
} }
if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle)))) if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle))))
{ {
DBG_PRINT("Failed to install bootmgfw hooks... reason -> %r\n", Result); Print(L"Failed to install bootmgfw hooks... reason -> %r\n", Result);
return Result; return Result;
} }
gBS->Stall(5 * 1000000);
return EFI_SUCCESS; return EFI_SUCCESS;
} }

@ -178,6 +178,7 @@
<ClCompile Include="Hvix64.c" /> <ClCompile Include="Hvix64.c" />
<ClCompile Include="ShitHook.c" /> <ClCompile Include="ShitHook.c" />
<ClCompile Include="PayLoad.c" /> <ClCompile Include="PayLoad.c" />
<ClCompile Include="SplashScreen.c" />
<ClCompile Include="UefiMain.c" /> <ClCompile Include="UefiMain.c" />
<ClCompile Include="Utils.c" /> <ClCompile Include="Utils.c" />
<ClCompile Include="WinLoad.c" /> <ClCompile Include="WinLoad.c" />
@ -187,6 +188,7 @@
<ClInclude Include="Hvix64.h" /> <ClInclude Include="Hvix64.h" />
<ClInclude Include="ShitHook.h" /> <ClInclude Include="ShitHook.h" />
<ClInclude Include="PayLoad.h" /> <ClInclude Include="PayLoad.h" />
<ClInclude Include="SplashScreen.h" />
<ClInclude Include="Utils.h" /> <ClInclude Include="Utils.h" />
<ClInclude Include="WinLoad.h" /> <ClInclude Include="WinLoad.h" />
</ItemGroup> </ItemGroup>

@ -32,6 +32,9 @@
<ClCompile Include="PayLoad.c"> <ClCompile Include="PayLoad.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="SplashScreen.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="BootMgfw.h"> <ClInclude Include="BootMgfw.h">
@ -52,5 +55,8 @@
<ClInclude Include="PayLoad.h"> <ClInclude Include="PayLoad.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="SplashScreen.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -1,4 +1,5 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
SHITHOOK BootMgfwShitHook; SHITHOOK BootMgfwShitHook;
EFI_STATUS EFIAPI RestoreBootMgfw(VOID) EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
@ -138,9 +139,8 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE ImageHandle)
if (EFI_ERROR(Result = gBS->HandleProtocol(ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw))) if (EFI_ERROR(Result = gBS->HandleProtocol(ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw)))
return Result; return Result;
DBG_PRINT("Module base -> 0x%p\n", BootMgfw->ImageBase); Print(L"Module base -> 0x%p\n", BootMgfw->ImageBase);
DBG_PRINT("Module size -> 0x%x\n", BootMgfw->ImageSize); Print(L"Module size -> 0x%x\n", BootMgfw->ImageSize);
VOID* ArchStartBootApplication = VOID* ArchStartBootApplication =
FindPattern( FindPattern(
BootMgfw->ImageBase, BootMgfw->ImageBase,
@ -152,7 +152,7 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE ImageHandle)
if (!ArchStartBootApplication) if (!ArchStartBootApplication)
return EFI_ABORTED; return EFI_ABORTED;
DBG_PRINT("ArchStartBootApplication -> 0x%p\n", RESOLVE_RVA(ArchStartBootApplication, 5, 1)); Print(L"ArchStartBootApplication -> 0x%p\n", RESOLVE_RVA(ArchStartBootApplication, 5, 1));
MakeShitHook(&BootMgfwShitHook, RESOLVE_RVA(ArchStartBootApplication, 5, 1), &ArchStartBootApplicationHook, TRUE); MakeShitHook(&BootMgfwShitHook, RESOLVE_RVA(ArchStartBootApplication, 5, 1), &ArchStartBootApplicationHook, TRUE);
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -168,11 +168,12 @@ EFI_STATUS EFIAPI ArchStartBootApplicationHook(VOID* AppEntry, VOID* ImageBase,
LOAD_PE_IMG_MASK LOAD_PE_IMG_MASK
); );
Print(L"PE PayLoad Size -> 0x%x\n", PayLoadSize()); gST->ConOut->ClearScreen(gST->ConOut);
Print(L"winload base -> 0x%p\n", ImageBase); gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"winload size -> 0x%x\n", ImageSize); Print(L"\n");
Print(L"winload.BlImgLoadPEImageEx -> 0x%p\n", RESOLVE_RVA(ImgLoadPEImageEx, 5, 1));
Print(L"Hyper-V PayLoad Size -> 0x%x\n", PayLoadSize());
Print(L"winload.BlImgLoadPEImageEx -> 0x%p\n", RESOLVE_RVA(ImgLoadPEImageEx, 5, 1));
MakeShitHook(&WinLoadImageShitHook, RESOLVE_RVA(ImgLoadPEImageEx, 5, 1), &BlImgLoadPEImageEx, TRUE); MakeShitHook(&WinLoadImageShitHook, RESOLVE_RVA(ImgLoadPEImageEx, 5, 1), &BlImgLoadPEImageEx, TRUE);
return ((IMG_ARCH_START_BOOT_APPLICATION)BootMgfwShitHook.Address)(AppEntry, ImageBase, ImageSize, BootOption, ReturnArgs); return ((IMG_ARCH_START_BOOT_APPLICATION)BootMgfwShitHook.Address)(AppEntry, ImageBase, ImageSize, BootOption, ReturnArgs);
} }

@ -0,0 +1,67 @@
#include "SplashScreen.h"
unsigned char AsciiArt[1473] =
{
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00,
0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00,
0x27, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x7C, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2D, 0x00,
0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00,
0x2E, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x27, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00,
0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x2F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00,
0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x22, 0x00, 0x00
};

@ -0,0 +1,2 @@
#pragma once
unsigned char AsciiArt[1473];

@ -1,6 +1,7 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
CHAR8* gEfiCallerBaseName = "Voyager"; CHAR8* gEfiCallerBaseName = "Voyager 2";
const UINT32 _gUefiDriverRevision = 0x200; const UINT32 _gUefiDriverRevision = 0x200;
EFI_STATUS EFIAPI UefiUnload( EFI_STATUS EFIAPI UefiUnload(
@ -16,16 +17,23 @@ EFI_STATUS EFIAPI UefiMain
{ {
EFI_STATUS Result; EFI_STATUS Result;
EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath; EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath;
gST->ConOut->ClearScreen(gST->ConOut);
gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"\n");
if (EFI_ERROR((Result = RestoreBootMgfw()))) if (EFI_ERROR((Result = RestoreBootMgfw())))
{ {
DBG_PRINT("unable to restore bootmgfw... reason -> %r\n", Result); Print(L"unable to restore bootmgfw... reason -> %r\n", Result);
return Result; return Result;
} }
if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle)))) if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle))))
{ {
DBG_PRINT("Failed to install bootmgfw hooks... reason -> %r\n", Result); Print(L"Failed to install bootmgfw hooks... reason -> %r\n", Result);
return Result; return Result;
} }
gBS->Stall(5 * 1000000);
return EFI_SUCCESS; return EFI_SUCCESS;
} }

@ -179,6 +179,7 @@
<ClCompile Include="HvLoader.c" /> <ClCompile Include="HvLoader.c" />
<ClCompile Include="ShitHook.c" /> <ClCompile Include="ShitHook.c" />
<ClCompile Include="PayLoad.c" /> <ClCompile Include="PayLoad.c" />
<ClCompile Include="SplashScreen.c" />
<ClCompile Include="UefiMain.c" /> <ClCompile Include="UefiMain.c" />
<ClCompile Include="Utils.c" /> <ClCompile Include="Utils.c" />
<ClCompile Include="WinLoad.c" /> <ClCompile Include="WinLoad.c" />
@ -189,6 +190,7 @@
<ClInclude Include="HvLoader.h" /> <ClInclude Include="HvLoader.h" />
<ClInclude Include="ShitHook.h" /> <ClInclude Include="ShitHook.h" />
<ClInclude Include="PayLoad.h" /> <ClInclude Include="PayLoad.h" />
<ClInclude Include="SplashScreen.h" />
<ClInclude Include="Utils.h" /> <ClInclude Include="Utils.h" />
<ClInclude Include="WinLoad.h" /> <ClInclude Include="WinLoad.h" />
</ItemGroup> </ItemGroup>

@ -35,6 +35,9 @@
<ClCompile Include="Hvax64.c"> <ClCompile Include="Hvax64.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="SplashScreen.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="BootMgfw.h"> <ClInclude Include="BootMgfw.h">
@ -58,5 +61,8 @@
<ClInclude Include="Hvax64.h"> <ClInclude Include="Hvax64.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="SplashScreen.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -1,4 +1,5 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
SHITHOOK BootMgfwShitHook; SHITHOOK BootMgfwShitHook;
EFI_STATUS EFIAPI RestoreBootMgfw(VOID) EFI_STATUS EFIAPI RestoreBootMgfw(VOID)
@ -138,8 +139,8 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE BootMgfwPath)
if (EFI_ERROR((Result = gBS->HandleProtocol(BootMgfwPath, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw)))) if (EFI_ERROR((Result = gBS->HandleProtocol(BootMgfwPath, &gEfiLoadedImageProtocolGuid, (VOID**)&BootMgfw))))
return Result; return Result;
DBG_PRINT("Image Base -> 0x%p\n", BootMgfw->ImageBase); Print(L"Image Base -> 0x%p\n", BootMgfw->ImageBase);
DBG_PRINT("Image Size -> 0x%x\n", BootMgfw->ImageSize); Print(L"Image Size -> 0x%x\n", BootMgfw->ImageSize);
VOID* ArchStartBootApplication = VOID* ArchStartBootApplication =
FindPattern( FindPattern(
BootMgfw->ImageBase, BootMgfw->ImageBase,
@ -148,7 +149,7 @@ EFI_STATUS EFIAPI InstallBootMgfwHooks(EFI_HANDLE BootMgfwPath)
START_BOOT_APPLICATION_MASK START_BOOT_APPLICATION_MASK
); );
DBG_PRINT("ArchStartBootApplication -> 0x%p\n", ArchStartBootApplication); Print(L"ArchStartBootApplication -> 0x%p\n", ArchStartBootApplication);
MakeShitHook(&BootMgfwShitHook, ArchStartBootApplication, &ArchStartBootApplicationHook, TRUE); MakeShitHook(&BootMgfwShitHook, ArchStartBootApplication, &ArchStartBootApplicationHook, TRUE);
return Result; return Result;
} }
@ -165,22 +166,15 @@ EFI_STATUS EFIAPI ArchStartBootApplicationHook(VOID* AppEntry, VOID* ImageBase,
ALLOCATE_IMAGE_BUFFER_MASK ALLOCATE_IMAGE_BUFFER_MASK
); );
gST->ConOut->ClearScreen(gST->ConOut);
gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"\n");
Print(L"Hyper-V PayLoad Size -> 0x%x\n", PayLoadSize()); Print(L"Hyper-V PayLoad Size -> 0x%x\n", PayLoadSize());
Print(L"winload base -> 0x%p\n", ImageBase);
Print(L"winload size -> 0x%x\n", ImageSize);
Print(L"winload.BlLdrLoadImage -> 0x%p\n", LdrLoadImage); Print(L"winload.BlLdrLoadImage -> 0x%p\n", LdrLoadImage);
Print(L"winload.BlImgAllocateImageBuffer -> 0x%p\n", ImgAllocateImageBuffer); Print(L"winload.BlImgAllocateImageBuffer -> 0x%p\n", ImgAllocateImageBuffer);
if (ImgAllocateImageBuffer && LdrLoadImage)
{
MakeShitHook(&WinLoadImageShitHook, LdrLoadImage, &BlLdrLoadImage, TRUE); MakeShitHook(&WinLoadImageShitHook, LdrLoadImage, &BlLdrLoadImage, TRUE);
MakeShitHook(&WinLoadAllocateImageHook, ImgAllocateImageBuffer, &BlImgAllocateImageBuffer, TRUE); MakeShitHook(&WinLoadAllocateImageHook, ImgAllocateImageBuffer, &BlImgAllocateImageBuffer, TRUE);
}
else
{
DBG_PRINT("some signature for winload found nothing (0), aborting...\n");
Print(L"nullptr detected, aborting...\n");
Print(L"Please submit a screenshot of this...\n");
}
return ((IMG_ARCH_START_BOOT_APPLICATION)BootMgfwShitHook.Address)(AppEntry, ImageBase, ImageSize, BootOption, ReturnArgs); return ((IMG_ARCH_START_BOOT_APPLICATION)BootMgfwShitHook.Address)(AppEntry, ImageBase, ImageSize, BootOption, ReturnArgs);
} }

@ -0,0 +1,67 @@
#include "SplashScreen.h"
unsigned char AsciiArt[1473] =
{
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00,
0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x22, 0x00,
0x27, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x7C, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x27, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3B, 0x00,
0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2D, 0x00,
0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00,
0x5C, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x22, 0x00, 0x2D, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5C, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x3A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2F, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00,
0x5F, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00,
0x2E, 0x00, 0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x27, 0x00, 0x20, 0x00, 0x22, 0x00, 0x2D, 0x00,
0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x5C, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x2F, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x20, 0x00, 0x7C, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2E, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x5F, 0x00, 0x20, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00,
0x60, 0x00, 0x2D, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x27, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x2C, 0x00, 0x2D, 0x00,
0x27, 0x00, 0x0D, 0x00, 0x0A, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x2E, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x5F, 0x00,
0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x22, 0x00, 0x00
};

@ -0,0 +1,2 @@
#pragma once
unsigned char AsciiArt[1473];

@ -1,6 +1,7 @@
#include "BootMgfw.h" #include "BootMgfw.h"
#include "SplashScreen.h"
CHAR8* gEfiCallerBaseName = "Voyager"; CHAR8* gEfiCallerBaseName = "Voyager 2";
const UINT32 _gUefiDriverRevision = 0x200; const UINT32 _gUefiDriverRevision = 0x200;
EFI_STATUS EFIAPI UefiUnload( EFI_STATUS EFIAPI UefiUnload(
@ -17,19 +18,22 @@ EFI_STATUS EFIAPI UefiMain
EFI_STATUS Result; EFI_STATUS Result;
EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath; EFI_DEVICE_PATH_PROTOCOL* BootMgfwPath;
gST->ConOut->ClearScreen(gST->ConOut);
gST->ConOut->OutputString(gST->ConOut, AsciiArt);
Print(L"\n");
if (EFI_ERROR((Result = RestoreBootMgfw()))) if (EFI_ERROR((Result = RestoreBootMgfw())))
{ {
DBG_PRINT("unable to restore bootmgfw... reason -> %r\n", Result); Print(L"unable to restore bootmgfw... reason -> %r\n", Result);
return Result; return Result;
} }
DBG_PRINT("restored bootmgfw on disk...\n");
if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle)))) if (EFI_ERROR((Result = InstallBootMgfwHooks(ImageHandle))))
{ {
DBG_PRINT("Failed to install bootmgfw hooks... reason -> %r\n", Result); Print(L"Failed to install bootmgfw hooks... reason -> %r\n", Result);
return Result; return Result;
} }
DBG_PRINT("installed bootmgfw hooks...\n"); gBS->Stall(5 * 1000000);
return EFI_SUCCESS; return EFI_SUCCESS;
} }

@ -178,6 +178,7 @@
<ClCompile Include="Hvax64.c" /> <ClCompile Include="Hvax64.c" />
<ClCompile Include="ShitHook.c" /> <ClCompile Include="ShitHook.c" />
<ClCompile Include="PayLoad.c" /> <ClCompile Include="PayLoad.c" />
<ClCompile Include="SplashScreen.c" />
<ClCompile Include="UefiMain.c" /> <ClCompile Include="UefiMain.c" />
<ClCompile Include="Utils.c" /> <ClCompile Include="Utils.c" />
<ClCompile Include="WinLoad.c" /> <ClCompile Include="WinLoad.c" />
@ -187,6 +188,7 @@
<ClInclude Include="Hvax64.h" /> <ClInclude Include="Hvax64.h" />
<ClInclude Include="ShitHook.h" /> <ClInclude Include="ShitHook.h" />
<ClInclude Include="PayLoad.h" /> <ClInclude Include="PayLoad.h" />
<ClInclude Include="SplashScreen.h" />
<ClInclude Include="Utils.h" /> <ClInclude Include="Utils.h" />
<ClInclude Include="WinLoad.h" /> <ClInclude Include="WinLoad.h" />
</ItemGroup> </ItemGroup>

@ -32,6 +32,9 @@
<ClCompile Include="Hvax64.c"> <ClCompile Include="Hvax64.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="SplashScreen.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="BootMgfw.h"> <ClInclude Include="BootMgfw.h">
@ -52,5 +55,8 @@
<ClInclude Include="Hvax64.h"> <ClInclude Include="Hvax64.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="SplashScreen.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>
Loading…
Cancel
Save