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
我正在尝试将以下 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