Как изменить исполняемый файл, не повредив его?
Существует ли определенный нулевой символ или последовательность байтов, которые не повредили бы исполняемый файл, если бы он был добавлен в FRONT файла? Я попытался добавить NUL (00 hex), но он каждый раз портит исполняемый файл. Есть ли какой-нибудь байт-код для NOP (без операции) или что-то подобное?
Короче говоря, я хочу испортить "хак", который изменяет значение в памяти при &process+fixed offset. Увеличение размера стека памяти (или я так думаю) не позволит ему работать.
3 ответа
Нет, формат файла PE, который используют исполняемые файлы Windows, имеет очень специфический заголовок. См. http://en.wikipedia.org/wiki/Portable_Executable для получения более подробной информации.
Вы можете попробовать использовать ASLR, чтобы сделать ваш код более устойчивым к исправлениям в памяти.
Вам придется полностью разобрать его в разные разделы и сегменты, изменить тот, который вы ищете, но вы не сможете вставить код перед любым сегментом кода: вам лучше иметь сегмент, который будет выполняться первым, затем перейдем к старому стартовому сегменту.
В конце вам придется воссоздать новый полный исполняемый файл.
Возможно, вы можете использовать декомпилятор, чтобы преобразовать его в более высокий язык, затем вставить какую-нибудь произвольную функцию или данные и перекомпилировать его. Возможно, вам придется отключить некоторые флаги оптимизации в компиляторе, чтобы произвольная функция не исключалась из результирующего двоичного файла.