【问题标题】:Hexedit of ASCII in exe not changing in appexe中ASCII的十六进制编辑在应用程序中没有改变
【发布时间】:2012-03-06 05:28:47
【问题描述】:

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

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

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

【问题讨论】:

  • 你改错地方了。还有其他一些地方,可能是多个地方。

标签: python exe hex-editors


【解决方案1】:

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

【讨论】:

  • 谢谢。是的,我正在搜索一个更大的字符串,它只返回一个匹配项,然后只更改“6”。 IE。我将搜索这个:“唯一字符串 6”,然后只更改那个 6。
  • ...您基本上是在该字符串中将 0x36 替换为 0x39,对吧?
  • 是的。在十六进制方面,只需将 36 更改为 39 并将文件保存出来。
【解决方案2】:

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

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

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

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

【讨论】:

  • 没有 library.zip 文件。我想我将它编译为单个文件可执行文件。是的,字符串更长。假设它的“下拉项目 6”我正在搜索该字符串的 exe,它只返回一个匹配项。那是我要更改的字符串,并且在应用程序中没有更改。呃
猜你喜欢
  • 1970-01-01
  • 2018-02-01
  • 2012-03-10
  • 2011-11-20
  • 2011-12-09
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多