不是一個非常好的問題,對不起。'安全'DLL注入
我有一個程序,當從資源管理器打開一個文件時(即ShellExecute(A/W)被調用時需要提醒)。
不幸的是,Microsoft刪除了COM接口(IShellExecuteHook),它允許您在Vista中掛鉤這些事件,據推測,因爲舊代碼可能會導致因更改而導致崩潰。有一個解決方法來重新啓用此功能,但它不再有效。
我已經做了一些研究,它看起來像捕捉對ShellExecute調用的唯一方法是重新路由到shell32.dll的調用。目前,我正在將自己的DLL注入到explorer進程中,然後將ShellExecute的IAT條目複製到DLL中的某些地址分配中,最後修改ShellExecute的IAT條目以指向我的函數,該函數將通知一個文件被打開的程序並跳轉到原來的ShellExecute函數,它的地址是我們之前存儲的。
我最關心的是抗病毒藥物。他們會關心我正在注入資源管理器嗎?他們會關心我正在修改IAT嗎?
另一個問題是這是否安全;是否有可能(或者更可能)瀏覽器的安全特權不允許通過CreateRemoteThread注入?如果是這樣,是否有更好的方法來做這種注射?
有沒有更好的方法來做到這一點?
編輯:對於任何未來遇到此問題的人,explorer.exe沒有IAT for shell32.dll;它有一個標題,但是thunk中充滿了垃圾值,所以沒有辦法(據我所知)來檢索任何導入函數的入口。
看起來像代碼隧道是鉤住這個唯一的方法。
因爲它似乎沒有簡單的解決方法,你可以解釋你的應用程序試圖以這種方式實現什麼功能:也許有一個更簡單的方法來做到這一點。 – 2009-11-28 13:39:00
我們將新下載的文件標記爲UNREAD。 當用戶打開文件時,我們要將其標記爲READ。 有沒有可能完成這一點,但我們希望儘可能準確。 另一種方法是編寫驅動程序來獲取CreateProcess的通知並解析文件名的參數,但它並不像掛鉤那樣可取。 – 2009-12-02 14:12:48
您沒有提及什麼類型的文件,但文件可能由應用程序打開,而不涉及資源管理器。你可以監視「查看器」應用程序嗎? – 2015-08-31 14:59:25