"Безопасная" DLL инъекция

Не очень хороший вопрос, извините.

У меня есть программа, которая должна быть предупреждена, когда файл открывается из проводника (т.е. вызывается ShellExecute(A/W)).

К сожалению, Microsoft удалила интерфейс COM (IShellExecuteHook), который позволяет вам перехватывать эти события в Vista и выше, предположительно, потому что старый код может вызвать сбой из-за изменений. Был способ обойти эту функцию, но она больше не работает.

Я провел некоторое исследование, и похоже, что единственный способ перехватить вызовы в ShellExecute - это перенаправить вызов в shell32.dll. В данный момент я смотрю на внедрение своей собственной DLL в процесс проводника, затем копирую запись IAT для ShellExecute для некоторого распределения адресов в моей DLL и, наконец, изменяю запись IAT для ShellExecute, чтобы она указала на мою функцию, которая уведомит об этом Программа, в которой был открыт файл, и переход к исходной функции ShellExecute, адрес которой мы сохранили ранее.

Моя самая большая проблема здесь - антивирусы. Они будут заботиться о том, что я делаю это в проводнике? Будут ли они заботиться о том, чтобы я модифицировал IAT?

Другая проблема заключается в том, безопасно ли это; Возможно ли (или, скорее всего, возможно), что привилегии безопасности исследователя не разрешают инъекцию через CreateRemoteThread? Если так, есть ли лучший способ сделать эту инъекцию?

Есть ли лучший способ сделать это в целом?

РЕДАКТИРОВАТЬ: Для тех, кто сталкивается с этим в будущем, explorer.exe не имеет IAT для shell32.dll; у него есть заголовок, но в блоке полно ненужных значений, поэтому нет способа (насколько я могу судить) получить запись для любых импортированных функций.
Похоже, туннелирование кода - единственный способ перехватить это.

4 ответа

Решение

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

Онлайновая документация для madcodehook содержит несколько расширенных статей о различных методах внедрения кода, их преимуществах и недостатках, а API предоставляет некоторые опции для определения "безопасного" перехвата: http://www.madshi.net/madCodeHookDescription.htm

Еще несколько ресурсов по перехвату API:

Легкий зацеп: http://www.codeplex.com/easyhook

Deviare: http://www.nektra.com/products/deviare-api-hook-windows/

Интересный пост: http://www.codeproject.com/KB/system/hooksys.aspx

При выполнении перехвата API очень важно оценить, в каких средах вам нужно работать. Например, не все библиотеки поддерживают x86/x64.

Detours поддерживает только x64 в лицензионной (платной) версии. Easy hook поддерживает x86 и x64.

Библиотека Detours:

http://research.microsoft.com/en-us/projects/detours/

Из Microsoft Research можно произвольно перехватывать функции. Вы могли бы дать этому шанс.

Проводник Windows в Windows Vista и Windows 7 даже не вызывает ShellExecuteA или ShellExecuteW.

Нет смысла беспокоиться. Лол:-)

И, если я могу добавить, я проверил, перехватив обе функции с 32-битными и 64-битными встроенными хуками.

Сожалею. Лол:-)

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