【问题标题】:C object code file shows string values in plain textC 目标代码文件以纯文本形式显示字符串值
【发布时间】:2015-06-15 17:24:49
【问题描述】:

我使用 gcc(在 Ubuntu 上)来编译一个 c 程序,该程序的字符串值很少,我不想让最终用户知道。就像身份验证中使用的字符串、密码文件路径/密码等一样,但是当我编译程序时,目标文件具有可读(文本)格式的这些字符串值。还有其他机器可读的字符,但这些字符串也存在于文件中。这是预期的吗?有没有办法告诉编译器不要将值打印为纯文本。我想在程序中加密字符串,但这看起来像是过度工程。

【问题讨论】:

  • 字符串字面量等常量值通常存储在可执行代码文件的字面量区域中。在源代码中使用加密字符串并将加密例程放入代码中可能是解决问题的最严格的方法。
  • gcc 不能为你做。在你的程序中加密它并不过分——这就是这样做的方法。
  • 我将加密字符串,可能会进一步限制对可执行文件的访问.. 感谢 cmets 的帮助..

标签: c string security object gcc


【解决方案1】:

...但这些字符串也存在于文件中。这是预期的吗?

是的,这是意料之中的。字符串文字保存在可执行文件中。你可以看到这一切。例如,GNU strings 打印至少 4 个字符长的可打印字符序列...

How to hide strings in a exe or a dll?

【讨论】:

  • 谢谢。该链接解释了不同的方法。做 MD5 散列会阻止任何人知道代码中存储的实际密码。
【解决方案2】:

即使你以某种方式隐藏了字符串——即使你对它们进行了加密——你的可执行文件也必须重新组合或解密这些字符串才能使用它们。

而且您将可执行文件提供给您不想知道这些身份验证字符串的人?

那是行不通的。

“这是一本书,里面有我所有的银行数据。我在它周围放了一条橡皮筋,以防止所有人阅读它。”

你会把那本书送出去吗?

嗯,这就是您对身份验证字符串进行硬编码时所做的事情——即使您对它们进行了混淆或加密。因为您还必须提供生成实际字符串的工具,以便可以使用它们。

【讨论】:

  • 确实如此,但这并不需要一些黑客系统调用等方面的专业知识。现在只需对可执行文件执行 Vi 即可显示连接详细信息。
  • 专业知识?比如运行 strace 来捕获整个 IO 流?或者对使用 gcore 捕获的核心文件运行“字符串”?还是“窥探”来捕捉网络流量的内容?如果您确实在您的可执行文件中分发了此类数据并且没有人挖掘该数据,那意味着没有人关心。然而。即使是最小程度的成功,也会有人关心。您真的想从只有失败才能保证数据安全的位置开始吗?
猜你喜欢
  • 1970-01-01
  • 2017-01-27
  • 2019-01-20
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2012-01-31
相关资源
最近更新 更多