【发布时间】:2017-06-05 05:19:14
【问题描述】:
我的程序允许用户输入密码。密码立即使用 sha1 和常量盐进行哈希处理并存储在内存中。 假设攻击者对运行我的应用程序的计算机具有物理访问权限,并且想要检索最后一个用户的密码。
他有可能通过逆向工程和一些内存监视魔法找到内存中的哈希吗?我的应用程序使用 MFC 图形界面并在 Windows 上运行。如果他自己输入密码,他会看到什么?他能监控哈希过程吗?
如果我的用户密码真的很糟糕,比如“1234”,那么 SHA1 哈希的所有安全性都取决于 SALT。 salt 还必须存储在内存中的某个位置(现在它是一个#defined char* 数组)。他能通过足够的努力找到它吗?
输入过程:
用户在文本编辑中输入密码。完成后,用户单击“确定”按钮,发出BN_CLICKED 消息,调用OnOK 函数。该函数从编辑字段中获取文本,调用哈希函数,它是(在代码中)另一个库的一部分,所以我认为它必须放在内存中的其他地方。散列字符串也存储在其他地方。如果重要的话,项目结构如下所示:
- 解决方案
- GUI 项目
- 数据存储项目
- 加密库
【问题讨论】:
-
如果我想窃取密码,我只需从编辑输入字段中“窃取”它,而无需费心在内存中的某处查找哈希值。部分答案可能是“是”。
-
@MichaelWalz 请假设攻击者与应用程序中的用户不同时。每次输入后,编辑字段都会被清除。
标签: c++ security hash mfc reverse-engineering