/umap

UEFI bootkit for driver manual mapping

Primary LanguageC

umap

Windows UEFI bootkit that loads a generic driver manual mapper without using a UEFI runtime driver.

Usage

  1. Setup a FAT32 formatted flashdrive with the following filesystem structure: \EFI\Boot\bootx64.efi where bootx64.efi is the compiled bootkit.

  2. Boot from the flashdrive.

  3. Use the usermode program umap to manually map a driver. The driver must be designed to function without a real driver object. However, in place of the driver object parameter is a pointer to the pool allocated for the driver if needed.

    • For example: umap test.sys

Compiling

The mapper and umap projects can both be compiled using standard Visual Studio (with WDK for mapper). Keep in mind that any changes to mapper must be updated in its corresponding bootkit resource. One could also just replace mapper with their own driver (make sure to undo the bootkit hook), which renders the usermode component irrelevant. By default, the mapper's DriverEntry is called before the boot-time driver acpiex.sys is initialized (typically the 2nd driver in the load order after WDF). This can be easily changed if needed.

The bootkit by default expects an edk2 directory in the repository's root with the EDK2 header and library files combined. You can use VisualUEFI for both of these, then simply combine the directories. Or, change the project layout to fit your UEFI development environment.

Note

This PoC was only tested on Windows 10 1803, 1809, 1903, 1909, and 2004.