我有一个非常老旧的(可能是DOS).exe程序文件,该文件是从网上获得的。该程序可以完美运行,但其文本字符串为法语。我只想修改那些文本字符串以将其更改为英语。根据PEid的说法,该程序是用MS Visual C ++编写的,尽管我找不到免费的C ++反编译器,或者其他任何可以让我用Hex或机器代码以外的东西来编辑程序的C. decompiler。十六进制不那么令人生畏,所以我决定选择通过CFF Explorer对其进行编辑。
Explorer很棒,因为它允许我每次编辑文件时都更新校验和,从而消除了以前的问题,即每次尝试编辑程序文件时都会损坏程序文件,但是现在我还有一个问题:我似乎只能用CFF编辑程序的文本字符串,因为总体字符数保持不变-比原始.exe添加更多或更少的字符,并且文件的输出被覆盖。 ..或至少从我的角度来看就是这样。
因此,可以编辑.exe文件而不受其字符数完全相同的限制吗?
我真的很希望得到一个答案。谢谢!
#1 楼
好的,您显然不知道要做什么。但这不是问题,首先要了解为什么C ++ Decompiler令人奇怪。其次,如果幸运的话,可以直接从程序访问字符串。在decen hexeditor(HxD,010,Hiew,Hexworkshop)中打开应用程序,然后向下滚动以希望找到字符串。编辑它们(不要忘了使用NULL字节关闭),测试是否可以正常工作,然后从那里开始工作。 。可以和我们分享垃圾箱吗?
评论
我根本看不到要问这是多么奇怪的事情,特别是考虑到有一个明确的先例,有很多答案,再加上我昨天花了大量时间下载了很多东西:stackoverflow。 com / questions / 205059 / is-there-ac-decompiler和reverseengineering.stackexchange.com/questions/2603/…和hex-rays.com/products/decompiler/compare_vs_disassembly.shtml。
–普罗米修斯
16年1月2日,21:35
正如问题详细信息中提到的那样,我已经找到了字符串,它们是ASCII格式的-我得到的问题是,除非我放入或取出已经存在的确切数量的字符,否则我无法编辑字符串那里。我不是在做您所说的“用NULL字节关闭”,也不是我想知道的-这可能是我的问题的答案吗?
–普罗米修斯
16年1月2日在21:39
好吧,当您使用字符串“ Hallo \ 0”时,如果删除字节,则所有周围的代码都会被搞乱。因此,如果将其更改为“ Hi \ 0”,则将中断。但是您可以将其更改为“ Hi \ 0XXX”,以使所有缓冲区保持相同。如果这导致空间不足,则必须更改字符串所在的位置,并确定代码在何处查找它们。
– Stolas
16年1月3日,11:01
#2 楼
如果没有看到该程序,就无法肯定地说出一种方法。但是,只要法语文本至少与英语等效大小,您就可以使用十六进制编辑器以相应的英文文本覆盖法语文本,而不会出现任何问题(保留所有剩余的法语字符,以保持文件大小相同)。您将遇到的问题是,只要英文文本比法语文本长。内部长度),将英语文本应用于此新区域,然后找到对原始文本的所有引用,然后将其替换为对新文本的引用。
评论
PE部分中的字符串是.rsrc还是PE部分中的字符串具有不同的名称?只需使用反汇编程序即可。修改所有文本字符串,然后重新组装。如果文件不是太大且未打包,应该很容易做到。