Изменение частей скомпилированных двоичных файлов
выучил английский как второй язык, извините за ошибки и неловкость
Я дал своеобразный проект для работы. Компания потеряла исходный код приложения, и я должен внести в него изменения. Теперь, перепроектировать все это невозможно для одного человека, оно просто слишком велико, однако внесение изменений в отдельные функции было бы возможным, так как изменения не так уж монументальны.
Таким образом, одним из возможных решений будет компиляция кода C и каким-то образом - после переписывания адресов - исправление его в реальном двоичном коде, в идеале замена кода, к которому переходит инструкция CALL, или вставка JMP в мой код.
Есть ли способ сделать это с помощью MingW32? Если да, можете ли вы привести простой пример? Я также интересуюсь книгами, которые могли бы помочь мне выполнить задачу.
Спасибо за вашу помощь
3 ответа
Я использую OllyDBG для такого рода вещей. Он позволяет вам увидеть разборку и отладку, вы можете установить точки останова и т. Д., А также отредактировать двоичный файл. Таким образом, вы можете отредактировать PE-заголовок этой программы, добавив фрагмент кода с вашим (скомпилированным) кодом внутри, а затем вызвать его из исходной программы.
Я не могу дать вам совет, потому что никогда не пробовал, хотя много раз думал об этом. Вы знаете, лень..:)
Я бы разбирал программу с помощью высококачественного дизассемблера, который производит что-то, что можно собрать обратно в работоспособное приложение, а затем заменял бы части, которые нужно изменить, на C-код.
Нечто подобное позволит вам обратить машинный код в исходный код. Это не будет красиво, но это работает.
http://www.hex-rays.com/idapro/
Есть также инструменты для исправления во время выполнения http://www.dyninst.org/ например. Они действительно не предназначены для исправления, но они могут сделать свое дело.
И, конечно, последний выбор - просто использовать ассемблер и писать машинный код:)