如何在不覆盖以前信息的情况下编辑 .exe 文件

逆向工程 视窗 可执行 dos-exe
2021-06-15 08:58:08

一个限定词——我所知道的我将要解释的内容都是从过去几个小时的研究中收集到的,以解决我的问题,所以请原谅一个非专家在这个特定技术领域的天真和笨拙……包括标题。

我有一个非常旧的小(可能是 DOS).exe 程序文件,它是从网上获得的。该程序运行良好,但其文本字符串是法语。我只想修改那些文本字符串以将它们更改为英语。根据 PEid 的说法,该程序是用 MS Visual C++ 编写的,尽管我找不到免费的 C++ 反编译器,或者其他任何可以让我以十六进制或机器代码以外的任何方式编辑程序的程序。Hex 没有那么吓人,所以我决定选择通过 CFF Explorer 编辑它。

Explorer 很棒,因为它允许我在每次编辑文件时更新校验和,这消除了以前每次尝试编辑程序文件时损坏程序文件的问题,但现在我遇到了另一个问题:我只能似乎使用 CFF 编辑程序的文本字符串,因为总字符数保持不变 - 添加比原始 .exe 多或少的字符,并且文件的输出被覆盖......或者至少,这就是它看起来像从我的末端。

那么,是否可以编辑 .exe 文件而不受保持其中字符数量完全相同的限制?

我真的很感激答案。谢谢!

3个回答

好吧,你显然不知道你在做什么。然而这不是问题,首先了解为什么 C++ 反编译器是一个奇怪的要求。其次,如果幸运的话,可以直接从程序中访问这些字符串。在十进制十六进制编辑器(HxD、010、Hiew、Hexworkshop)中打开应用程序并向下滚动,希望能找到字符串。编辑它们(不要忘记用 NULL 字节关闭),测试它是否有效并从那里开始工作。

但是,如果文本是用位图编写的,则您必须反汇编该应用程序。你能和我们分享垃圾桶吗?

如果没有看到该程序,我们就无法确定是否可行。

但是,只要法语文本的大小至少与英语等效文本的大小相同,您就可以简单地使用十六进制编辑器用相应的英语文本覆盖法语文本而不会出现任何问题(保留任何剩余的法语字符,以便以保持文件大小相同)。您将遇到的问题是,只要英文文本比法文文本长。

在这种情况下,您将不得不扩展文件的大小(包括调整内部指定长度的标题字段),将英文文本应用于这个新区域,然后找到对原始文本的所有引用,并将它们替换为对新文本的引用。