Как безопасно редактировать исполняемый файл в шестнадцатеричном формате? - PullRequest
2 голосов
/ 27 июля 2011

Я работаю над небольшой головоломкой / варгеймом, которая включает в себя кодирование Windows Forms в C # ..

Чтобы добраться до определенного уровня, мне нужен пароль, который хранится в exe. Тот же exe позволяет мне отправить этот пароль человеку по умолчанию, который хранится в переменной . Отправка пароля осуществляется путем обновления данных данного пользователя в базе данных MySQL.

Проблема заключалась в том, что пользователь должен отредактировать exe-файл и изменить получателя по умолчанию на желаемое имя пользователя. Но когда я hex отредактировал файл, поставил желаемое имя пользователя и попытался его запустить, он выдал ошибку " x.exe не является допустимым приложением win32 " ..

Есть ли способ безопасно редактировать файл в шестнадцатеричном формате, не встречая эту ошибку. Или есть способ изменить источник так, чтобы с помощью шестнадцатеричного редактора можно было безопасно редактировать только одну переменную ...

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

Редактирование PE-изображения в шестнадцатеричном формате будет затруднено, поскольку вам потребуется обновить различные части PE-образа, если вы измените длину раздела или если EXE-файл подписан, вы также лишите его законной силы. Спецификацию PE-изображения можно найти здесь , если вы хотите понять все поля, которые вам нужно обновить. Если вы хотите хороший интерфейс, я бы использовал что-то вроде CFF Explorer для правильного редактирования изображения PE.

Вы также можете использовать ildasm, только для сборок .NET, чтобы разобрать EXE, отредактировать IL, а затем использовать ilasm, чтобы собрать и запустить его. Это избавит от необходимости редактировать изображение PE и будет более безопасным.

0 голосов
/ 27 июля 2011

Когда я делал что-то подобное, прежде чем я помню, мне приходилось заменять переменные на строки одинаковой длины, чтобы это работало должным образом.например, «somebody@example.com» можно заменить на «другой@example.net» или «myname@anexample.us».Если вы используете Gmail, это будет проще, поскольку «mynameis@gmail.com» совпадает с «my.name.is ... + slim.shady@gmail.com».

Хотя, я думаю, что идея Дэвида Страттона, вероятно, более актуальна для exe.Я почти уверен, что файлы, которые я редактировал, были просто файлами данных (это было давно), но я знаю, что тогда у меня все работало, пока я не добавил и не удалил ни одного байта в середине файла.

0 голосов
/ 27 июля 2011

Предполагая, что это не является незаконным изменением исполняемого файла ... (Это звучит как вызов в конкурсе, так, как вы его сформулировали.)

Скорее всего, ваше изменение привело к тому, что программа перестала работатьбыть в состоянии проверить контрольную сумму .Если вы хотите успешно изменить исполняемый файл, вам необходимо пересчитать контрольную сумму.(Это всего лишь одно возможное объяснение того, почему исполняемый файл был поврежден.)

Изменение скомпилированного исполняемого файла и обеспечение его работы, по меньшей мере, сложно.Это довольно сложная тема, и вряд ли на нее можно ответить полностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...