diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2019-10-20 17:05:30 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2019-10-20 22:17:04 +0200 |
commit | 31a87c2e5ff2d6a66d72dea662bb2beb7a7de6f1 (patch) | |
tree | cbe39f5f060b2ac7a69d94c24a3aa69c25ed65d3 /src/Common | |
parent | cca08e1ed5fc70cd56a262b7782d970663c8208a (diff) | |
download | VeraCrypt-31a87c2e5ff2d6a66d72dea662bb2beb7a7de6f1.tar.gz VeraCrypt-31a87c2e5ff2d6a66d72dea662bb2beb7a7de6f1.zip |
Windows: add more checks to correctly identify Microsoft original bootloader.
Diffstat (limited to 'src/Common')
-rw-r--r-- | src/Common/BootEncryption.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/Common/BootEncryption.cpp b/src/Common/BootEncryption.cpp index e93415aa..50fd23d2 100644 --- a/src/Common/BootEncryption.cpp +++ b/src/Common/BootEncryption.cpp @@ -3204,8 +3204,18 @@ namespace VeraCrypt // check that it is not bootmgfw.efi if (0 != _wcsicmp (loaderPath.c_str(), L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi")) { - bFound = true; - EfiBootInst.RenameFile(loaderPath.c_str(), L"\\EFI\\Microsoft\\Boot\\bootmgfw_ms.vc", TRUE); + // look for bootmgfw.efi identifiant string + EfiBootInst.GetFileSize(loaderPath.c_str(), loaderSize); + std::vector<byte> bootLoaderBuf ((size_t) loaderSize); + + EfiBootInst.ReadFile(loaderPath.c_str(), &bootLoaderBuf[0], (DWORD) loaderSize); + + // look for bootmgfw.efi identifiant string + if (BufferHasPattern (bootLoaderBuf.data (), (size_t) loaderSize, g_szMsBootString, strlen (g_szMsBootString))) + { + bFound = true; + EfiBootInst.RenameFile(loaderPath.c_str(), L"\\EFI\\Microsoft\\Boot\\bootmgfw_ms.vc", TRUE); + } } } } @@ -4307,7 +4317,18 @@ namespace VeraCrypt && (0 != _wcsicmp (loaderPath.c_str(), L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi")) ) { - EfiBootInst.RenameFile(loaderPath.c_str(), L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi", TRUE); + const char* g_szMsBootString = "bootmgfw.pdb"; + unsigned __int64 loaderSize = 0; + EfiBootInst.GetFileSize(loaderPath.c_str(), loaderSize); + std::vector<byte> bootLoaderBuf ((size_t) loaderSize); + + EfiBootInst.ReadFile(loaderPath.c_str(), &bootLoaderBuf[0], (DWORD) loaderSize); + + // look for bootmgfw.efi identifiant string + if (BufferHasPattern (bootLoaderBuf.data (), (size_t) loaderSize, g_szMsBootString, strlen (g_szMsBootString))) + { + EfiBootInst.RenameFile(loaderPath.c_str(), L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi", TRUE); + } } } } |