«Безопасная» 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)

Ваш ответ на вопрос