我知道Windows可以选择在关闭时清除页面文件.
当Windows进入或超出范围时,Windows是否对实际的物理/虚拟内存做了什么特别的事情?
例如,假设我运行应用程序A,它将可识别的字符串写入内存中的变量,然后关闭应用程序.然后我运行应用程序B.它分配一大块内存,保留未初始化的内容,并在其中搜索由应用程序A写入的已知字符串.
应用程序B是否有可能获取应用程序A写入的字符串?或者Windows在使内存可用之前擦除内存?
在将进程分配给其他进程之前,Windows 会 "擦除"进程返回的已释放内存.仅有一个内核线程专门用于此任务.
在零页面线程运行在最低优先级,并负责将它们移动到归零页面列表之前清零空闲页
[1].

您不必担心在页面文件中保留敏感数据,而应该担心首先将其保留在内存中(使用后).关闭时清除页面文件不是默认行为.系统崩溃转储还将包含RAM中"纯文本"中可能包含的任何敏感信息.
只要将内存分配给进程(显然),Windows就不会 "清理"内存.而是由程序(mer)来做.为此目的,可以使用该SecureZeroMemory()功能.
该函数定义为
RtlSecureZeroMemory()函数(参见参考资料WinBase.h).RtlSecureZeroMemory()内联提供的实现可以在任何版本的Windows上使用(请参阅参考资料WinNT.h)
使用此函数而不是ZeroMemory()在您希望确保及时覆盖数据时,因为某些C++编译器可以ZeroMemory()通过完全删除它来优化调用.
WCHAR szPassword[MAX_PATH];
/* Obtain the password */
if (GetPasswordFromUser(szPassword, MAX_PATH))
{
UsePassword(szPassword);
}
/* Before continuing, clear the password from memory */
SecureZeroMemory(szPassword, sizeof(szPassword));
Run Code Online (Sandbox Code Playgroud)
别忘了阅读Raymond Chen的这篇有趣的文章.
| 归档时间: |
|
| 查看次数: |
2929 次 |
| 最近记录: |