Взломать какой-нибудь exe файл - как удалить байты

Сегодня я пытаюсь удалить несколько байтов из EXE-файла.

Внутри EXE я нашел путь к файлу, который EXE должен загрузить. Я хочу изменить путь, и для этого мне нужно удалить некоторые символы ../../. Когда я делаю это и сохраняю файл, он теряет свою иконку, и при попытке выполнить его отображается 'неизвестная ошибка формата win32'.

Если я не удалю эти байты, а заменю их на 0, значок не потеряется, и файл будет выглядеть правильно. Тем не менее, путь неверный.

Итак, похоже, что когда я удаляю байты, позиция другой информации внутри файла теряется, включая ресурсы (значок). После удаления этих байтов мне нужно добавить еще 6 байтов, чтобы сохранить тот же размер и положение других данных. Где я должен это сделать? Если я добавлю эти байты в конец файла, это не сработает. Не могли бы вы дать мне некоторые подсказки? Спасибо!


person ali    schedule 11.06.2012    source источник


Ответы (1)


После удаления ../../ из начала строки вставьте шесть нулевых байтов в конец строки (я предполагаю, что вы можете определить конец вручную). Таким образом, смещение всего в файле останется прежним. Полностью удалив 6 байтов, смещение вещей после строки изменится. Заменив 6 байтов на 0, смещение строки изменилось бы (теперь оно действительно было бы там, где было + 6).

person dave    schedule 11.06.2012
comment
Спасибо! Основная идея состоит в том, чтобы изменить ссылку на файл с двух каталогов назад на фактический каталог. Вставка шести нулей не добавит ли это еще 6 байтов в файл? - person ali; 12.06.2012
comment
@ali Я имел в виду после удаления ../../ с самого начала - person dave; 12.06.2012
comment
ХОРОШО. Я понимаю. Некоторые инструменты отладки для EXE, чтобы я мог видеть другие возможные ошибки? Спасибо! - person ali; 12.06.2012
comment
@ali dumpbin (входит в состав Visual Studio Express) — это простой, но полезный инструмент для поиска внутри библиотек DLL/EXE. Это, вероятно, идентифицирует некоторые ошибки - person dave; 12.06.2012