MaxFuwin 2023-05-13 20:41 采纳率: 0%
浏览 102
已结题

有会libbde的人吗?

我现在想要调用libbde用BitLocker恢复密钥解密VMK获得明文VMK,可惜我不会C++

  • 写回答

6条回答 默认 最新

  • 最可爱的凡凡2814 2023-05-13 21:42
    关注

    由于涉及到第三方库libbde和BitLocker,我无法提供完整的可运行代码。但是,我可以给您提供一个大致的实现思路:

    1. 导入libbde库,调用库中的函数,实现对加密的VMK的解密,得到明文VMK。
    2. 在C++代码中使用Windows API相关函数调用BitLocker恢复密钥,得到加密的VMK。
    3. 将加密的VMK传递给libbde库中的对应函数,对VMK进行解密,得到明文VMK。

    下面是一个简单的示例代码,仅供参考:

    #include <windows.h>
    #include <stdio.h>
    #include <libbde/libbde.h>
    
    int main()
    {
        // 读取加密的VMK
        BYTE encryptedVMK[256];
        // TODO: 读取加密的VMK到encryptedVMK数组中
    
        // 恢复BitLocker密钥
        HANDLE hVolume = CreateFileW(L"\\\\.\\C:", GENERIC_READ | GENERIC_WRITE,
                                     FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
        BOOL bResult = DeviceIoControl(hVolume, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, NULL, NULL);
        bResult = DeviceIoControl(hVolume, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, NULL, NULL);
        bResult = DeviceIoControl(hVolume, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, NULL, NULL);
        HANDLE hKey = NULL;
        bResult = OpenEncryptedFileRaw(L"\\\\.\\C:", 0, &hKey);
        BYTE vmk[256];
        DWORD dwSize = sizeof(vmk);
        bResult = ReadEncryptedFileRaw(NULL, hKey, vmk, &dwSize, NULL);
    
        // 解密VMK
        BYTE decryptedVMK[256];
        bde_decrypt_vmk(vmk, sizeof(vmk), encryptedVMK, sizeof(encryptedVMK), decryptedVMK, sizeof(decryptedVMK));
    
        // 将解密后的VMK用于其他操作
        // TODO: 在此处添加代码
    }
    

    在上一段代码中,我使用了libbde库中的bde_decrypt_vmk函数对加密的VMK进行了解密,并得到了明文VMK。如果您需要将该明文VMK用于其他操作,可以在下面的代码中继续编写。

    例如,您可以使用明文VMK来解密BitLocker加密的磁盘映像文件。以下是一个简单的示例代码,用于解密BitLocker加密的磁盘映像文件:

    #include <windows.h>
    #include <stdio.h>
    #include <libbde/libbde.h>
    
    int main()
    {
        // 读取加密的VMK
        BYTE encryptedVMK[256];
        // TODO: 读取加密的VMK到encryptedVMK数组中
    
        // 恢复BitLocker密钥
        HANDLE hVolume = CreateFileW(L"\\\\.\\C:", GENERIC_READ | GENERIC_WRITE,
                                     FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
        BOOL bResult = DeviceIoControl(hVolume, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, NULL, NULL);
        bResult = DeviceIoControl(hVolume, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, NULL, NULL);
        bResult = DeviceIoControl(hVolume, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, NULL, NULL);
        HANDLE hKey = NULL;
        bResult = OpenEncryptedFileRaw(L"\\\\.\\C:", 0, &hKey);
        BYTE vmk[256];
        DWORD dwSize = sizeof(vmk);
        bResult = ReadEncryptedFileRaw(NULL, hKey, vmk, &dwSize, NULL);
    
        // 解密VMK
        BYTE decryptedVMK[256];
        bde_decrypt_vmk(vmk, sizeof(vmk), encryptedVMK, sizeof(encryptedVMK), decryptedVMK, sizeof(decryptedVMK));
    
        // 使用明文VMK解密磁盘映像文件
        HANDLE hFile = CreateFileW(L"encrypted_image.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
        LARGE_INTEGER liFileSize;
        bResult = GetFileSizeEx(hFile, &liFileSize);
        DWORD dwSizeToRead = (DWORD)liFileSize.QuadPart;
        BYTE* pBuffer = new BYTE[dwSizeToRead];
        DWORD dwBytesRead = 0;
        bResult = ReadFile(hFile, pBuffer, dwSizeToRead, &dwBytesRead, NULL);
        CloseHandle(hFile);
    
        // 解密磁盘映像文件
        bde_decrypt_volume(pBuffer, dwSizeToRead, decryptedVMK, sizeof(decryptedVMK));
    
        // 将解密后的数据写入新文件
        hFile = CreateFileW(L"decrypted_image.bin", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
        DWORD dwBytesWritten = 0;
        bResult = WriteFile(hFile, pBuffer, dwBytesRead, &dwBytesWritten, NULL);
        CloseHandle(hFile);
    
        // 释放缓冲区
        delete[] pBuffer;
    
        return 0;
    }
    

    在上面的代码中,我打开了一个加密的磁盘映像文件,并将其读入缓冲区。然后,使用libbde库中的bde_decrypt_volume函数对缓冲区中的数据进行了解密,并将解密后的数据写入了一个新文件中。

    评论

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 创建了问题 5月13日

悬赏问题

  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView
  • ¥15 .net core 同时编辑怎么防止数据串了
  • ¥20 微信小程序播放直播流
  • ¥15 关于迷宫自走单片机循迹小车的知识
  • ¥15 python使用selenium工具爬取网站的问题
  • ¥15 visual studio中c语言用ODBC链接SQL SERVER
  • ¥15 关于#python#的问题:如何通过pywinauto获取到图中“窗格”内部的内容
  • ¥15 visionMaster4.3.0 与QT 的二次开发异常
  • ¥50 关于#pcb工艺#的问题:这个设计电路中,最终组合起来起到了什么作用