Изменение частей скомпилированных двоичных файлов - PullRequest
0 голосов
/ 20 февраля 2011

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 21 февраля 2011

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

1 голос
/ 21 февраля 2011

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

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

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

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

1 голос
/ 21 февраля 2011

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

...