c - 不要在 gdb 中转储变量
问题描述
我试图找出是否有办法在核心转储的情况下隐藏/避免打印变量值。我看到当有核心转储时,当遍历 gdb 时,我们能够找到预期的变量值,但需要一种不会发生这种情况的方法。我在寻求答案时遇到了这个特定的链接。但我仍然看到正在打印的值。
(gdb) p 数据 $1 = (void *) 0x615000 (gdb)
解决方案
我试图找出是否有办法在核心转储的情况下隐藏/避免打印变量值。
实现这一点的常用方法是为所有致命信号安装信号处理程序。
在处理程序中,您会将所有秘密变量清零,然后将处理程序重置为SIG_DFL
并重新raise
发出信号。
说一个密码被保存在一个变量中,我不希望它在 gdb 时被泄露
当然madvise(...MADV_DONTDUMP)
,在您的链接答案中不会实现这一点。
您可以使用一些反调试技术,例如fork()
后跟ptrace
附加,让孩子和父母使用复杂的握手,并且孩子只有在知道它正在被受信任的父母追踪时才解码秘密。
当心:当程序出错时,您将很难调试程序,并且控制机器的足够积极的攻击者无论如何都会破坏您的保护。
你的努力可能会更好地花在其他地方。
推荐阅读
- angular - 更新 .snapshotChanges() 代码以使用 angularfire2 5.0..0 rc-8、firebase 5.0.2
- java - 存储在 SharedPreferences 中的字符串在每个应用程序关闭时都会被修改?
- wordpress - 使用传递登录凭据从 .Net Core 重定向到 Wordpress 页面
- java - java.lang.OutOfMemoryError:即使使用 -Xms1024M -Xmx2048M,也会超出 GC 开销限制
- virtualbox - 与 VirtualBox 和 ReactOS 共享文件夹
- wordpress - 在不更改 URL 的情况下将目录重写为域
- python - keras 中的 BatchNormalization 层导致验证精度波动
- c# - 为什么隐式转换运算符来自
接受_ ? - matlab - CNN 的一维卷积
- ios - 按下单独的 UIButton 后禁用 UITableViewCell 中的所有 UIButton