0

我正在尝试使用十六进制编辑器修改(我的)exe。它最初是使用 wx 用 Python 编写的,然后通过 py2exe 变成了一个 exe。我丢失了源代码(呃),需要更改下拉菜单中的一项。这是一个简单的字符变化,从“6”到“9”。(让我想起吉米亨德里克斯)

我使用了几个十六进制编辑器,我可以找到字符串并进行更改并保存文件。但是,当我打开修改后的 exe 时,下拉条目并没有改变。我可以通过再次在十六进制编辑器中打开它并检查来验证exe是否不同,并将字符串设置为我需要的新值。它只是在运行应用程序时不会以这种方式显示。

我显然不怎么玩十六进制编辑器(或十六进制,就此而言)。我错过了什么?TIA。

4

2 回答 2

0

首先,您确定字符串实际上在 .exe 文件中,而不是在 library.zip 文件中吗?如果字符串在 library.zip 中,您将有更轻松的时间。根据 py2exe 常见问题解答 ( http://www.py2exe.org/index.cgi/FAQ ),您的入口脚本将被字节编译并作为资源嵌入到 .exe 中,而它导入的其他 Python 模块将在library.zip 文件。

假设字符串您的输入脚本中,字节编译过程(我相信它使用 marshal 模块)应该将字符串的实际内容保留为 ASCII 或 UTF-8。您要搜索的字符串是否比您要搜索的“6”字符长?我认为您可能只是更改了错误的字符串(或者实际上甚至不是字符串的一部分,这可能非常糟糕)。如果您非常确定它看起来正确(即字符串至少有 5 或 6 个字符长并且非常独特),是否它只是在文件中多次出现并且您更改了错误的实例?

如果你想更进一步,你可以得到一个 Windows 资源编辑器并从 .exe 中提取资源以恢复 .pyo 文件,然后使用 marshal 和 dis 模块将字节码转换回 Python 操作码和文字。这可能会让您更好地了解文件中的字符串:

http://nedbatchelder.com/blog/200804/the_structure_of_pyc_files.html

于 2012-02-14T21:08:44.117 回答
0

您可能会发现这样做几乎是不可能的,因为 exe 中可能有数千个这样的字符。您最好先在下拉列表中搜索不太常见的项目,以便更好地找到可能发生的“区域”。然后在“6”附近进行更本地化的搜索。即使那样,也不能保证这些下拉项在可执行文件中彼此靠近(但我认为很有可能)。

于 2012-02-14T20:54:09.997 回答