【发布时间】:2022-01-13 09:50:08
【问题描述】:
有没有办法在 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);
【问题讨论】:
-
请发布您收到的完整错误消息。
-
这是完整的错误信息。我用来启动驱动程序的命令是 net start
-
那么错误信息并没有指定找不到哪个文件?该文件是否是您的驱动程序本身?
-
不,它没有指定文件。我确信该文件不是驱动程序本身,因为如果我使用相同的代码启动驱动程序但删除了 encrypt_aes_ctr 函数调用,我不会收到任何错误。我认为丢失的文件是 openssl 库
-
我在网上查到net start命令是用来启动一个服务的。我发现这个帖子看起来很相似。见stackoverflow.com/a/19845423/4688321。
标签: c encryption openssl kernel driver