我希望安全地删除(甚至内存中的痕迹)用户键入文本框的任何内容。我想知道将它设置为""
是否足够安全。
SetWindowText
是Win32 API中的一个函数,位于 user32.dll 。
在该计划中:
SetWindowText(myHandle, "Hello");
SetWindowText(myHandle, "Goodbye");
//Was the buffer containing chars "Hello" overwritten by the
//series of chars "Goodb"?
//Or was another chunk of buffer being allocated to store "Goodbye",
//hence "Hello" still exist somewhere in the memory?
SetWindowText(myHandle, "");
//What does Windows do to the buffer that used to store chars "Goodbye"?
//Does it wipe out and replace the data in the buffer to all 0s here?
//Or does "Goodbye" actually still stays in the memory?
答案 0 :(得分:2)
这是正式未指明的,在实践中相当复杂。因此,简单的答案是“不,它不安全”
答案 1 :(得分:1)
不,它不安全,因为GDI多次复制你的字符串,例如使它成为宽字符串字符串:你使用SetWindowTextA但它只是SetWindowTextW的包装器,所以SetWindowTextA将你的字符串复制到wide-char字符串。
对于安全的解决方案,您应该使用自定义用户输入处理(WM_KEY *等)和自定义渲染(WM_DRAW)来实现自己的文本框。
要检查其安全性,请在OllyDbg下运行程序并扫描整个内存中的字符串(Alt-M,Ctrl-B)。