„Bezpieczne” wtryskiwanie DLL

Nie strasznie dobre pytanie, przepraszam.

Mam program, który należy ostrzec, gdy plik jest otwierany z eksploratora (tj. Wywoływany jest ShellExecute (A / W)).

Niestety, Microsoft usunął interfejs COM (IShellExecuteHook), który pozwala na podłączenie tych zdarzeń w systemie Vista i wyżej, ponieważ starszy kod może spowodować awarię spowodowaną zmianami. Obejrzano konieczność ponownego włączenia tej funkcji, ale nie działa.

Zrobiłem trochę badań i wygląda na to, że jedynym sposobem na przechwycenie wywołań do ShellExecute jest przekierowanie wywołania na shell32.dll. W tej chwili szukam wstrzyknięcia mojej własnej biblioteki DLL do procesu eksploratora, a następnie skopiowania wpisu IAT dla ShellExecute do jakiegoś przydziału adresu w mojej bibliotece DLL i na koniec zmodyfikowania wpisu IAT dla ShellExecute, aby wskazywał na moją funkcję, która powiadomi program, w którym plik został otwarty i przejść do oryginalnej funkcji ShellExecute, której adres przechowywaliśmy wcześniej.

Moim największym zmartwieniem są antywirusy. Czy dbają o to, że wstrzykuję w odkrywcę? Czy zależy im na tym, że modyfikuję IAT?

Kolejnym problemem jest to, czy jest to bezpieczne; czy jest możliwe (lub raczej prawdopodobne), aby uprawnienia zabezpieczeń eksploratora nie zezwalały na wstrzykiwanie za pomocą CreateRemoteThread? Jeśli tak, czy jest lepszy sposób na wykonanie tego zastrzyku?

Czy jest lepszy sposób na zrobienie tego w ogóle?

EDYCJA: Dla każdego, kto natknie się na to w przyszłości, explorer.exe nie ma IAT dla shell32.dll; ma nagłówek, ale thunk jest pełen wartości śmieci, więc nie ma sposobu (o ile mogę powiedzieć) na pobranie wpisu dla jakichkolwiek importowanych funkcji.
Wygląda na to, że tunelowanie kodu to jedyny sposób na to.

questionAnswers(4)

yourAnswerToTheQuestion