我正在尝试使用十六进制编辑器修改一个exe(我的)。它最初是用Python编写的,并通过py2exe转换为exe。我丢失了源代码(呃),需要更改下拉菜单中的一个项目。这是一个简单的一个字符更改,从“6”到“9”。 (让我想起Jimi Hendrix)
我使用了几个十六进制编辑器,我可以找到字符串并进行更改并保存文件。但是,当我打开修改后的exe时,下拉条目没有改变。我可以通过再次在十六进制编辑器中打开并检查来验证exe是不同的,并将字符串设置为我需要的新值。它只是在运行应用程序时不显示。
我显然不会使用十六进制编辑器(或十六进制)。我错过了什么? TIA。
答案 0 :(得分:0)
你可能会发现这几乎不可能这样做,因为在exe中可能有数千个这样的字符。你可能最好先在你的下拉列表中搜索一个不太常见的项目,以便更好地找到它可能发生的“区域”。然后在附近进行更为本地化的搜索“6”。即使这样,也不能保证这些下拉项目会在可执行文件中彼此靠近(但我认为可能)。
答案 1 :(得分:0)
首先,你确定字符串实际上在.exe文件中,而不是在library.zip文件中吗?如果字符串在library.zip中,您将有一个更容易的时间。根据py2exe FAQ(http://www.py2exe.org/index.cgi/FAQ),您的输入脚本将进行字节编译并作为资源嵌入.exe中,而其导入的其他Python模块将位于library.zip文件中。
假设输入脚本中的字符串是,字节编译过程(我认为使用编组模块)应该将字符串的实际内容保留为ASCII或UTF-8。您搜索的字符串是否超过您要搜索的“6”字符?我认为你可能只是改变了错误的字符串(或者甚至不是字符串的一部分,这可能非常糟糕)。如果你非常确定它看起来是正确的(即字符串长度至少为5或6个字符并且非常独特),那么它是否只是在文件中多次出现并且您更改了错误的实例?
如果你想更进一步,你可以获得一个Windows资源编辑器并从.exe中提取资源以恢复.pyo文件,然后使用marshal和dis模块将字节码转换回Python操作码和文字。这可能会让您更好地了解文件中的字符串:
http://nedbatchelder.com/blog/200804/the_structure_of_pyc_files.html