【发布时间】:2011-10-02 04:36:16
【问题描述】:
我有一个字符串文字,它在我的可执行文件周围的许多不同地方使用。
让我们这样说:
const char *formatString = "Something I don't want to make obvious: %d";
int format1(char *buf) { sprintf(buf, formatString, 1); }
int format2(char *buf) { sprintf(buf, formatString, 2); }
//...
现在,这个字符串文字在可执行代码中变得非常很明显,因为它是按字面嵌入的。
有什么方法可以避免这种情况,例如强制编译器生成汇编指令(例如mov [ptr + 4], 0x65)指令来创建字符串,而不是按字面嵌入字符串?
我不想做任何形式的混淆——我只是想避免在可执行文件中制作字符串 obvious。 (我也不想在使用字符串的每个地方都修改我的代码。)
这可能吗?
【问题讨论】:
-
我这样做的方法是在运行时从加密版本开始构建字符串。但这和混淆是一样的......
-
同意神秘主义。这正是混淆的定义。如果您的程序是安全的,您就不必担心人们知道格式字符串。
-
@Downvoters:嗯,愿意发表评论吗?
-
当我读到这样的问题时,我不禁想:你真正想要达到什么目标?似乎您担心(恶意?)用户足够聪明,可以在您的可执行文件中观看,但不愿意非常努力地尝试。我没有投反对票,但会在投赞成票之前了解一些背景知识......
-
@Francesco:它不是商业程序或任何东西,所以它只是为了我的学习,控制编译器的二进制输出。
标签: c visual-c++ executable portable-executable string-literals