2012-02-14 3 views
0

Я пытаюсь изменить exe (моего) с помощью шестнадцатеричного редактора. Он был первоначально написан на Python с использованием wx и превращен в exe через py2exe. Я потерял исходный код (ugh) и вам нужно изменить один из элементов в выпадающем меню. Это простое изменение персонажа, от «6» до «9». (Заставляет меня думать о Jimi Hendrix)Hexedit из ASCII в exe не меняется в приложении

Я использовал несколько шестнадцатеричных редакторов, и я могу найти строку и внести изменения и сохранить файл. Однако, когда я открываю измененный exe, выпадающая запись не изменилась. Я могу проверить, что exe отличается, открыв его снова в шестнадцатеричном редакторе и проверив, и строка будет установлена ​​на новое значение, которое мне нужно. Это просто не отображается при запуске приложения.

Я, очевидно, не играю с шестнадцатеричными редакторами (или шестнадцатеричными, если на то пошло). Что мне не хватает? ТИА.

+2

Вы меняющегося его в неправильном месте. Есть другое место, где он установлен, возможно, несколько мест. – kindall

ответ

0

Вы можете найти это практически невозможно, так как в exe могут быть тысячи таких символов. Вероятно, вам лучше сначала поискать менее общий элемент в раскрывающемся списке, чтобы дать вам больше шансов найти «область», где это может произойти. Затем выполните более локализованный поиск поблизости для «6». Даже тогда нет никакой гарантии, что эти выпадающие элементы будут расположены рядом друг с другом в исполняемом файле (но я думаю, что это возможно).

+0

Спасибо. Да, я ищу большую строку, которая возвращает только одно совпадение, а затем меняет «6». то есть. Я буду искать это: «Уникальная строка 6», а затем только изменить это 6. –

+0

... и вы в основном заменяете 0x36 на 0x39 внутри этой строки, не так ли? – Gerrat

+0

Да. В шестнадцатеричной стороне просто измените 36 до 39 и сохраните файл. –

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, а затем использовать модули маршала и dis для преобразования байт-кода обратно в коды и литералы Python , Это может дать вам лучшее представление о том, что строки в файле:

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

+0

Нет файла library.zip. Я думаю, что я скомпилировал его как один исполняемый файл. Да, строка длиннее. Давайте скажем его «Dropdown Item 6». Я ищу exe для этой строки, и она возвращает только одно совпадение. Это строка, которую я меняю, и она не меняется в приложении. uggh –