Вызов функционального кода исполняемого файла - PullRequest
0 голосов
/ 14 октября 2010

У меня есть местоположение / смещение определенной функции, присутствующей внутри исполняемого файла.Можно ли было бы вызвать такую ​​функцию (хотя, мы надеемся, подавляя выполнение CRT точки входа в исполняемый файл)?

Ответы [ 3 ]

4 голосов
/ 14 октября 2010

По сути, вы можете имитировать загрузчик Windows, предполагая, что вы работаете под Windows, но основы должны быть одинаковыми на любой платформе.См., Например, http://msdn.microsoft.com/en-us/magazine/cc301805.aspx.

  1. Загрузить файл в память,
  2. Заменить все относительные адреса функций, вызываемых загруженным исполняемым файлом, на фактические адреса функций.
  3. Измените страницу памяти на «исполняемый» (это сложная и зависящая от платформы часть)
  4. Инициализируйте CRT для, например, инициализации статических переменных.
  5. Вызов.

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

PS: Вы также можете спросить у Google: http://www.cultdeadcow.com/tools/pewrap.html

PPS: Вы также можете найти полезный совет в сообществе "security": https://www.blackhat.com/presentations/bh-usa-07/Harbour/Whitepaper/bh-usa-07-harbour-WP.pdf

0 голосов
/ 14 октября 2010

1) Взгляните на LoadLibraryEx() API.У него есть некоторые флаги, которые могли бы выполнять всю грязную работу, описанную Себастьяном.

2) Редактировать исполняемый файлНесколько измененных байтов сделают эту работу.Вот некоторая документация по формату файла: http://docsrv.sco.com:507/en/topics/COFF.html

0 голосов
/ 14 октября 2010

Да, вы можете вызвать его, если будете инициализировать все глобальные переменные, которые использует эта функция. Возможно, включая глобальные переменные CRT. Как альтернативный способ, вы можете подключить и заменить все функции CRT, которые использует вызываемый. См. Разборка этой функции, чтобы получить правильное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...