Вопрос

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

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Библиотека Объездов:

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

Microsoft Research позволяет произвольное перехват функций.Вы могли бы попробовать.

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

Легкий крючок: http://www.codeplex.com/easyhook

Отклонение: 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.

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

Нет смысла беспокоиться.Ржу не могу :-)

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

Извини.Ржу не могу :-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top