我使用gcc(在Ubuntu上)编译一个c程序,该程序具有很少的字符串值,我不想让最终用户知道。像验证中使用的字符串,密码文件路径/密码等,但是当我编译程序时,目标文件具有可读(文本)格式的这些字符串值。还有其他机器只有可读字符,但这些字符串也存在于文件中。这是预期的吗?有没有办法告诉编译器不要将值打印为纯文本。我想在程序中加密字符串,但这看起来像是工程设计。
答案 0 :(得分:0)
...但这些字符串也存在于文件中。这是预期的吗?
是的,这是预期的。字符串文字保存在可执行文件中。你可以看到所有。例如,GNU strings
打印长度至少为4个字符的可打印字符序列...
答案 1 :(得分:0)
即使您以某种方式隐藏字符串 - 即使您加密它们 - 您的可执行文件也必须重新组合或解密字符串才能使用它们。
您是否将可执行文件提供给那些您不想知道这些身份验证字符串的人?
那不行。
“这里有一本书,里面有我所有的银行数据。我在它周围放了一个橡皮筋,让每个人都不读它。”
你会把那本书给出来吗?
嗯,这就是你对身份验证字符串进行硬编码时所做的事情 - 即使你对它们进行模糊处理或加密。因为您还必须提供生成实际字符串的工具,以便可以使用它们。