From f3f069cb22bc62b22378df216c6dc7620baefcdf Mon Sep 17 00:00:00 2001 From: Samuel Tulach Date: Mon, 13 Apr 2020 21:27:15 +0200 Subject: [PATCH] first commit --- .vscode/c_cpp_properties.json | 19 +++ driver/Makefile | 42 +++++ driver/main.c | 293 ++++++++++++++++++++++++++++++++++ driver/main.o | Bin 0 -> 7544 bytes driver/memory.efi | Bin 0 -> 48564 bytes driver/memory.so | Bin 0 -> 2175744 bytes 6 files changed, 354 insertions(+) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 driver/Makefile create mode 100644 driver/main.c create mode 100644 driver/main.o create mode 100644 driver/memory.efi create mode 100644 driver/memory.so diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..a3d3396 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,19 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "/usr/include/efi", + "/usr/include/efi/x86_64", + "/usr/include/efi/protocol" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c11", + "cppStandard": "c++17", + "intelliSenseMode": "gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/driver/Makefile b/driver/Makefile new file mode 100644 index 0000000..e586cd9 --- /dev/null +++ b/driver/Makefile @@ -0,0 +1,42 @@ +ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,) + +OBJS = main.o +TARGET = memory.efi + +EFIINC = /usr/include/efi +EFIINCS = -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol +LIB32 = /usr/lib32 +LIB64 = /usr/lib + +CFLAGS = $(EFIINCS) -fno-stack-protector -fpic \ + -fshort-wchar -mno-red-zone -Wall + +ifeq ($(ARCH),x86_64) + CFLAGS += -DEFI_FUNCTION_WRAPPER + LIB = $(LIB64) + EFILIB = $(LIB64) +endif + +ifeq ($(ARCH),ia32) + LIB = $(LIB32) + EFILIB = $(LIB32) +endif + +EFI_CRT_OBJS = $(EFILIB)/crt0-efi-$(ARCH).o +EFI_LDS = $(EFILIB)/elf_$(ARCH)_efi.lds + +LDFLAGS = -nostdlib -znocombreloc -T $(EFI_LDS) -shared \ + -Bsymbolic -L $(EFILIB) -L $(LIB) $(EFI_CRT_OBJS) + +all: $(TARGET) + +memory.so: $(OBJS) + ld $(LDFLAGS) $(OBJS) -o $@ -lefi -lgnuefi + +%.efi: %.so + objcopy -j .text -j .sdata -j .data -j .dynamic \ + -j .dynsym -j .rel -j .rela -j .reloc \ + --target=efi-rtdrv-$(ARCH) $^ $@ + +clean: + rm -f memory.efi memory.so main.o *~ \ No newline at end of file diff --git a/driver/main.c b/driver/main.c new file mode 100644 index 0000000..94e19cd --- /dev/null +++ b/driver/main.c @@ -0,0 +1,293 @@ +// Since some retard decided to use M$ ABI in EFI standard +// instead of SysV ABI, we now have to do transitions +// GNU-EFI has a functionality for this (thanks god) +#define GNU_EFI_USE_MS_ABI 1 + +// Mandatory defines +#include +#include + +// Our protocol GUID (should be different for every driver) +static const EFI_GUID ProtocolGuid + = { 0x2b479eea, 0x0ecf, 0x4a46, {0x96, 0x84, 0x8f, 0x14, 0xed, 0x92, 0xd9, 0xec} }; + +// VirtualAddressMap GUID (gEfiEventVirtualAddressChangeGuid) +static const EFI_GUID VirtualGuid + = { 0x13FA7698, 0xC831, 0x49C7, { 0x87, 0xEA, 0x8F, 0x43, 0xFC, 0xC2, 0x51, 0x96 }}; + +// Global variable GUID (gEfiGlobalVariableGuid) +static const EFI_GUID VariableGuid + = { 0x8BE4DF61, 0x93CA, 0x11D2, { 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C }}; + +// ExitBootServices GUID (gEfiEventExitBootServicesGuid) +static const EFI_GUID ExitGuid + = { 0x27ABF055, 0xB1B8, 0x4C26, { 0x80, 0x48, 0x74, 0x8F, 0x37, 0xBA, 0xA2, 0xDF }}; + +// Dummy protocol struct +typedef struct _DummyProtocalData{ + UINTN blank; +} DummyProtocalData; + +// Pointers to original functions +EFI_SET_VARIABLE oSetVariable = NULL; + +// Global declarations +EFI_EVENT NotifyEvent = NULL; +EFI_EVENT ExitEvent = NULL; +BOOLEAN Virtual = FALSE; +BOOLEAN Runtime = FALSE; + +// Defines used to check if call is really coming from client +#define VARIABLE_NAME L"yromeMifE" // EfiMemory +#define COMMAND_MAGIC 0xDEAD + +// Struct containing data used to communicate with the client +typedef struct _MemoryCommand +{ + int magic; + int operation; + unsigned long long data1; + unsigned long long data2; + int size; +} MemoryCommand; + +// Function that actually performs the r/w +EFI_STATUS +RunCommand(MemoryCommand* cmd) +{ + // Check if the command has right magic + // (just to be sure again) + if (cmd->magic != COMMAND_MAGIC) + { + return EFI_ACCESS_DENIED; + } + + // Copy operation + if (cmd->operation == 0) + { + // Same as memcpy function + CopyMem(cmd->data1, cmd->data2, cmd->size); + return EFI_SUCCESS; + } + + // Invalid command + return EFI_UNSUPPORTED; +} + +// Hooked EFI function SetVariable() +// Can be called from Windows with NtSetSystemEnvironmentValueEx +EFI_STATUS +EFIAPI +HookedSetVariable( + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data + ) +{ + // Use our hook only after we are in virtual address-space + if (Virtual && Runtime) + { + // Check of input is not null + if (VariableName != NULL && VariableName[0] != CHAR_NULL && VendorGuid != NULL) + { + // Check if GUID is correct + if (CompareGuid(VendorGuid, &VariableGuid)) + { + // Check if variable name is same as our declared one + // this is used to check if call is really from our program + // running in the OS (client) + if (StrnCmp(VariableName, VARIABLE_NAME, + (sizeof(VARIABLE_NAME) / sizeof(CHAR16)) - 1) == 0) + { + if (DataSize == 0 && Data == NULL) + { + // Skip no data + return EFI_SUCCESS; + } + + // Check if the data size is correct + if (DataSize == sizeof(MemoryCommand)) + { + // We did it! + // Now we can call the magic function + return RunCommand((MemoryCommand*)Data); + } + } + } + } + } + + // Call the original SetVariable() function + return oSetVariable(VariableName, VendorGuid, Attributes, DataSize, Data); +} + +// Event callback when SetVitualAddressMap() is called by OS +VOID +EFIAPI +SetVirtualAddressMapEvent( + IN EFI_EVENT Event, + IN VOID* Context + ) +{ + // Null and close the event so it does not get called again + NotifyEvent = NULL; + + // We are now working in virtual address-space + Virtual = TRUE; +} + +// Event callback after boot process is started +VOID +EFIAPI +ExitBootServicesEvent( + IN EFI_EVENT Event, + IN VOID* Context + ) +{ + // This event is called only once so close it + BS->CloseEvent(ExitEvent); + ExitEvent = NULL; + + // Boot services are now not avaible + BS = NULL; + + // We are booting the OS now + Runtime = TRUE; + + // Print some text so we know it works (300iq) + ST->ConOut->SetAttribute(ST->ConOut, EFI_WHITE | EFI_BACKGROUND_BLUE); + ST->ConOut->ClearScreen(ST->ConOut); + Print(L"Driver seems to be working as expected! Windows is booting now...\n"); +} + +// Replaces service table pointer with desired one +// returns original +VOID* +SetServicePointer( + IN OUT EFI_TABLE_HEADER *ServiceTableHeader, + IN OUT VOID **ServiceTableFunction, + IN VOID *NewFunction + ) +{ + // We don't want to fuck up the system + if (ServiceTableFunction == NULL || NewFunction == NULL) + return NULL; + + // Make sure boot services pointers are not null + ASSERT(BS != NULL); + ASSERT(BS->CalculateCrc32 != NULL); + + // Raise task priority level + CONST EFI_TPL Tpl = BS->RaiseTPL(TPL_HIGH_LEVEL); + + // Swap the pointers + // GNU-EFI and InterlockedCompareExchangePointer + // are not friends + VOID* OriginalFunction = *ServiceTableFunction; + *ServiceTableFunction = NewFunction; + + // Change the table CRC32 signature + ServiceTableHeader->CRC32 = 0; + BS->CalculateCrc32((UINT8*)ServiceTableHeader, ServiceTableHeader->HeaderSize, &ServiceTableHeader->CRC32); + + // Restore task priority level + BS->RestoreTPL(Tpl); + + //return OriginalFunction; + return 0; +} + +// EFI driver unload routine +static +EFI_STATUS +EFI_FUNCTION +efi_unload(IN EFI_HANDLE ImageHandle) +{ + // We don't want our driver to be unloaded + // until complete reboot + return EFI_ACCESS_DENIED; +} + +// EFI entry point +EFI_STATUS +efi_main(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) +{ + // Initialize internal GNU-EFI functions + InitializeLib(ImageHandle, SystemTable); + + // Get handle to this image + EFI_LOADED_IMAGE *LoadedImage = NULL; + EFI_STATUS status = BS->OpenProtocol(ImageHandle, &LoadedImageProtocol, + (void**)&LoadedImage, ImageHandle, + NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + + // Return if protocol failed to open + if (EFI_ERROR(status)) + { + Print(L"Can't open protocol: %d\n", status); + return status; + } + + // Install our protocol interface + // This is needed to keep our driver loaded + DummyProtocalData dummy = { 0 }; + status = LibInstallProtocolInterfaces( + &ImageHandle, &ProtocolGuid, + &dummy, NULL); + + // Return if interface failed to register + if (EFI_ERROR(status)) + { + Print(L"Can't register interface: %d\n", status); + return status; + } + + // Set our image unload routine + LoadedImage->Unload = (EFI_IMAGE_UNLOAD)efi_unload; + + // Create global event for VirtualAddressMap + status = BS->CreateEventEx(EVT_NOTIFY_SIGNAL, + TPL_NOTIFY, + SetVirtualAddressMapEvent, + NULL, + VirtualGuid, + &NotifyEvent); + + // Return if event create failed + if (EFI_ERROR(status)) + { + Print(L"Can't create event (SetVirtualAddressMapEvent): %d\n", status); + return status; + } + + // Create global event for ExitBootServices + status = BS->CreateEventEx(EVT_NOTIFY_SIGNAL, + TPL_NOTIFY, + ExitBootServicesEvent, + NULL, + ExitGuid, + &ExitEvent); + + // Return if event create failed (yet again) + if (EFI_ERROR(status)) + { + Print(L"Can't create event (ExitBootServicesEvent): %d\n", status); + return status; + } + + // Hook SetVariable (should not fail) + oSetVariable = (EFI_SET_VARIABLE)SetServicePointer(&RT->Hdr, (VOID**)&RT->SetVariable, (VOID**)&HookedSetVariable); + + // Print confirmation text + Print(L"\n"); + Print(L" __ _ \n"); + Print(L" ___ / _(_)___ _ __ ___ _ __ ___ _ _ _ _ \n"); + Print(L" / -_) _| |___| ' \\/ -_) ' \\/ _ \\ '_| || |\n"); + Print(L" \\___|_| |_| |_|_|_\\___|_|_|_\\___/_| \\_, |\n"); + Print(L" |__/ \n"); + Print(L"Made by: Samuel Tulach\n"); + Print(L"Thanks to: @Mattiwatti (EfiGuard), Roderick W. Smith (rodsbooks.com)\n\n"); + Print(L"Driver has been loaded successfully. You can now boot to the OS.\n"); +} \ No newline at end of file diff --git a/driver/main.o b/driver/main.o new file mode 100644 index 0000000000000000000000000000000000000000..1ecd6d13944a2d7448fdaf88bf427483d5633aa0 GIT binary patch literal 7544 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 ar3_`O%YRo_+(~ECA5;E^Bu(z^*8exBO23i- literal 0 HcmV?d00001 diff --git a/driver/memory.efi b/driver/memory.efi new file mode 100644 index 0000000000000000000000000000000000000000..eb82b6bebcad4417d28f65f1c3b898eb666bbf99 GIT binary patch literal 48564 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 Nw3YS`i54&a{{W$TbgKXW literal 0 HcmV?d00001 diff --git a/driver/memory.so b/driver/memory.so new file mode 100644 index 0000000000000000000000000000000000000000..f0ee46914f74ee5292bd34dff4168da792e4d5c4 GIT binary patch literal 2175744 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 Nro8`J#dw1I{}*gRWncgR literal 0 HcmV?d00001