Python Ctypes 中的 SecureZeroMemory

SecureZeroMemory in Python Ctypes

我正在尝试将以下 C 代码行转换为 ctypes。这是我尝试翻译的 C 程序的片段:

pIfRow = (MIB_IF_ROW2 *) malloc(sizeof(MIB_IF_ROW2));
SecureZeroMemory((PVOID)pIfRow, sizeof(MIB_IF_ROW2));

(注意MIB_IF_ROW2是一个结构体,在Netioapi.h中定义)

无论如何,我可以在 ctypes 中翻译第一行,假设 MIB_IF_ROW2 已经被定义为 ctypes 结构:

from ctypes import *

# Translate first line of C Code
buff = create_string_buffer(sizeof(MIB_IF_ROW2))
p_if_row = cast(buff, POINTER(MIB_IF_ROW2))

# Second Line... ?

但是当我到达第二行时,我卡住了。我无法在文档或网上找到任何与该函数等效的 ctypes。解决此问题的最佳方法是什么?

SecureZeroMemory 只会用零填充您传递给它的内存。您应该使用 ZeroMemory/memset 或 python 中的普通循环获得完全相同的结果。使它成为 "secure" 的是它不应该被编译器优化掉(当在像 C/C++ 这样的较低级别编程时)。

在你刚刚 malloc 的内存上使用它不是它的预期目的(虽然无害),它应该像这样使用:

char password[100];
AskUserForPassword(password);
DoSomething(password);
SecureZeroMemory(password, sizeof(password)); // Make sure password is no longer visible in memory in case the application is paged out or creates a memory dump in a crash