在 Windows 内核模式下打开 SSL

Openssl in Windows Kernel Mode

有什么方法可以在 windows 内核模式下使用 OpenSSL 库?我想制作一个 windows 过滤器驱动程序来拦截读写操作并对缓冲区进行加密和解密。我已经制作了一个可以用一些任意内容替换缓冲区的驱动程序,但现在我需要加密原始内容。我试图在项目中包含 OpenSSL dll-s 并且我可以编译和安装驱动程序但是当我尝试启动它时我得到这个错误 发生系统错误2。 系统找不到指定的文件。

这是加密的代码。我知道使用静态密钥不安全,但它仅用于测试。

void encrypt_aes_ctr(unsigned char* key, unsigned char* iv, unsigned char* data, unsigned char* out_data,int in_len,int*out_len)
{
   int  len;
   EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();;
   EVP_EncryptInit_ex(ctx, EVP_aes_256_ctr(), NULL, key, iv);
   EVP_EncryptUpdate(ctx, out_data, out_len, data, in_len);
   EVP_EncryptFinal_ex(ctx, out_data + *out_len, &len);
   *out_len += len;
}

这是我在 SwapPreWriteBuffers 函数中进行的调用

unsigned char key[32] = { 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8 };
unsigned char iv[16] = { 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4 };
int len;
encrypt_aes_ctr(key, iv, origBuf, newBuf, writeLen, &len);

您应该使用 CNG API,这是 Microsoft 标准 API For Crypto。

例如 Encrypt

Here 是在内核中使用 BCrypt 的代码示例(随机)