Изменение частей скомпилированных двоичных файлов

выучил английский как второй язык, извините за ошибки и неловкость

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

Таким образом, одним из возможных решений будет компиляция кода C и каким-то образом - после переписывания адресов - исправление его в реальном двоичном коде, в идеале замена кода, к которому переходит инструкция CALL, или вставка JMP в мой код.

Есть ли способ сделать это с помощью MingW32? Если да, можете ли вы привести простой пример? Я также интересуюсь книгами, которые могли бы помочь мне выполнить задачу.

Спасибо за вашу помощь

3 ответа

Я использую OllyDBG для такого рода вещей. Он позволяет вам увидеть разборку и отладку, вы можете установить точки останова и т. Д., А также отредактировать двоичный файл. Таким образом, вы можете отредактировать PE-заголовок этой программы, добавив фрагмент кода с вашим (скомпилированным) кодом внутри, а затем вызвать его из исходной программы.
Я не могу дать вам совет, потому что никогда не пробовал, хотя много раз думал об этом. Вы знаете, лень..:)

Я бы разбирал программу с помощью высококачественного дизассемблера, который производит что-то, что можно собрать обратно в работоспособное приложение, а затем заменял бы части, которые нужно изменить, на C-код.

Нечто подобное позволит вам обратить машинный код в исходный код. Это не будет красиво, но это работает.

http://www.hex-rays.com/idapro/

Есть также инструменты для исправления во время выполнения http://www.dyninst.org/ например. Они действительно не предназначены для исправления, но они могут сделать свое дело.

И, конечно, последний выбор - просто использовать ассемблер и писать машинный код:)

Другие вопросы по тегам