我有一个奇怪的问题,我想知道是否有一种方法可以在编译后添加/编辑字符串(或者可以通过C程序(内部,即非外部文件)访问的内容)?
目的是在Linux上通过PHP更改Windows程序的URL(显然我不能只编译它)。
答案 0 :(得分:1)
十六进制编辑器可能是你最好的选择。
答案 1 :(得分:1)
十六进制编辑器可以工作,但是你必须小心不要改变可执行文件的大小。如果字符串恰好位于.res文件中,则可以使用ResEdit。
答案 2 :(得分:1)
许多posix平台附带程序strings
,它将读取搜索字符串的二进制文件。可以选择打印字符串的偏移量。例如:
strings -td myexec
从那里你可以使用十六进制编辑器,但主要问题是你将无法创建一个更大的字符串。
答案 3 :(得分:1)
有专门的工具可以修改现有的可执行文件。一个值得注意的工具是 Resource Tuner,可用于编辑可执行文件中的各种资源。
另一种选择是使用文本编辑器(如Hex Workshop)来编辑可执行文件字符串中的字符。但是,请记住,使用此方法,您只能编辑可执行文件中的现有字符串,并且替换的字符串必须具有与原始字符串相同或更小的长度,否则您将最终修改可执行代码。
答案 4 :(得分:1)
正如其他人所建议的那样,您可以使用二进制文件编辑器(十六进制编辑器)来更改可执行文件中的字符串。您需要在字符串中嵌入一个标记(唯一的字节序列),以便您可以在文件中找到该字符串。并且您需要确保以正确的偏移量读取/写入文件。
由于OP声明计划在linux上使用PHP来重写文件,您需要使用fseek将文件指针定位到此URL字符串的起始位置,确保在替换字节时保持在字符串大小范围内,然后使用fseek / rewind和fwrite来更改文件。
此技术可用于更改嵌入在二进制文件中的URL,也可用于将许可证密钥嵌入到二进制文件中,或将应用程序校验和值嵌入到二进制文件中,以便可以检测到何时二进制已经改变了。
正如一些海报所建议的那样,您可能需要重新计算校验和或重新签名二进制文件。检查此行为的一种快速方法是使用不同的URL值编译二进制文件的两个版本。然后比较这些文件,看看除了URL值之外是否存在差异。
答案 5 :(得分:0)
除非你想在生成的十六进制或汇编代码中找到它。
答案 6 :(得分:0)
要在已编译程序中正确编辑字符串,您需要:
很幸运,我制作了一个程序在Windows上执行此操作,它仅适用于32位程序here