首页 > 解决方案 > 不要在 gdb 中转储变量

问题描述

我试图找出是否有办法在核心转储的情况下隐藏/避免打印变量值。我看到当有核心转储时,当遍历 gdb 时,我们能够找到预期的变量值,但需要一种不会发生这种情况的方法。我在寻求答案时遇到了这个特定的链接。但我仍然看到正在打印的值。

(gdb) p 数据 $1 = (void *) 0x615000 (gdb)

标签: clinuxgdb

解决方案


我试图找出是否有办法在核心转储的情况下隐藏/避免打印变量值。

实现这一点的常用方法是为所有致命信号安装信号处理程序。

在处理程序中,您会将所有秘密变量清零,然后将处理程序重置为SIG_DFL并重新raise发出信号。

说一个密码被保存在一个变量中,我不希望它在 gdb 时被泄露

当然madvise(...MADV_DONTDUMP),在您的链接答案中不会实现这一点。

您可以使用一些反调试技术,例如fork()后跟ptrace附加,让孩子和父母使用复杂的握手,并且孩子只有在知道它正在被受信任的父母追踪时才解码秘密。

当心:当程序出错时,您将很难调试程序,并且控制机器的足够积极的攻击者无论如何都会破坏您的保护。

你的努力可能会更好地花在其他地方。


推荐阅读