Я пытаюсь обнаружить все вызовы CoCreateInstance в каком-то процессе, который я запускаю (в идеале, я могу обнаруживать вызовы в дочерних процессах).
Для этого, используя Microsoft Visual Studio 2008 в Windows 7, я создаю прокси-библиотеку DLL, которая пересылает все, кроме одного вызова, в стандартную библиотеку ole32.dll
, как описано в различных статьях, например. Перехвачено: Windows Hacking через перенаправление DLL. В результате DLL выглядит отлично, но я просто не могу создавать существующие программы (я использую стандартный контейнер тестирования ActiveX Control (tstcon32.exe) как тестовое приложение) забрать мою прокси-библиотеку. Независимо от того, что я делаю, программы всегда, кажется, подбирают C:\Windows\SysWow64\ole32.dll
в соответствии с Process Explorer. Я пробовал несколько вещей до сих пор:
- Подготовьте каталог, содержащий мою прокси-библиотеку DLL, к
PATH
, а затем вызовите программу; казалось, не имеет никакого эффекта. - Скопируйте мою прокси-DLL в тот же каталог, что и вызываемая программа; не повезло.
- Создайте файл
.local
в том же каталоге, что и вызываемая программа, как описано в статье "Перенаправление динамической ссылки" и поставьте мой прокси DLL в тот же каталог - тоже не работало. Но потом я прочитал, что это перестало работать над более поздними версиями Windows. Кроме того,ole32.dll
является "известной DLL" в соответствии с параметром реестраHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
, поэтому перенаправление на основе.local
, вероятно, не будет работать. - Использовать перенаправление на основе манифеста, как описано, например. в DLL-перенаправлении с использованием манифеста, но это тоже не показало никакого эффекта. Однако этот подход кажется нетривиальным, поэтому я сделал что-то неправильно.
Есть ли у кого-нибудь опыт перенаправления вызовов на стандартные DLL, такие как ole32.dll
с помощью DLL-заглушки? Как вы заставили приложения забрать свою заглушку DLL?