2010-10-14 3 views
0

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

ответ

4

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

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

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

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

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

+1

Хорошее описание, единственная потенциальная проблема, которую я вижу, заключается в том, что если CRT не инициализируется, вызов может завершиться неудачно. –

+0

@Abyx Я расширил свой ответ в этом отношении. – Sebastian

0

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

0

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

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

Смежные вопросы