Hexedit ASCII в EXE не меняется в приложении - PullRequest
0 голосов
/ 15 февраля 2012

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

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

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

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Прежде всего, вы уверены, что строка на самом деле находится в файле .exe, а не в файле library.zip? Если строка находится в файле library.zip, вам будет намного легче. В соответствии с часто задаваемыми вопросами по py2exe (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

0 голосов
/ 15 февраля 2012

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

...