2009-11-19 79 views
3

不是一個非常好的問題,對不起。'安全'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中充滿了垃圾值,所以沒有辦法(據我所知)來檢索任何導入函數的入口。
看起來像代碼隧道是鉤住這個唯一的方法。

+0

因爲它似乎沒有簡單的解決方法,你可以解釋你的應用程序試圖以這種方式實現什麼功能:也許有一個更簡單的方法來做到這一點。 – 2009-11-28 13:39:00

+0

我們將新下載的文件標記爲UNREAD。 當用戶打開文件時,我們要將其標記爲READ。 有沒有可能完成這一點,但我們希望儘可能準確。 另一種方法是編寫驅動程序來獲取CreateProcess的通知並解析文件名的參數,但它並不像掛鉤那樣可取。 – 2009-12-02 14:12:48

+0

您沒有提及什麼類型的文件,但文件可能由應用程序打開,而不涉及資源管理器。你可以監視「查看器」應用程序嗎? – 2015-08-31 14:59:25

回答

3

大多數優秀的防病毒啓發式檢測都應該在導入表修補程序中選擇作爲特洛伊的紅旗。

爲madcodehook在線文檔對各種代碼注入技術,其優點/缺點一些擴展條款,以及API提供了一些選項來指定「安全」掛鉤: http://www.madshi.net/madCodeHookDescription.htm

+0

謝謝。我也考慮過他們提出的擴展代碼覆蓋技術,但恐怕覆蓋shell32可能會很危險。不過,我會試試看。 – 2009-11-19 18:21:33

3

走彎路庫:

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

來自Microsoft Research允許任意鉤住函數。你可以給一個鏡頭。

+0

但請注意,如果您在運輸代碼中使用它,則需要您自擔風險,任何操作系統修補程序/修補程序/ SP都可能會破壞您的代碼。 – 2009-11-24 16:56:53

3

的API鉤子一些更多的資源:

容易鉤:http://www.codeplex.com/easyhook

Deviare: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。

+0

不幸的是,這些都不是有效的選項。 Easyhook是GPL的,我懷疑我的公司希望將產品開源。這個功能非常簡單(並且從未在Vista上運行過),並且不保證出去購買圖書館的許可證。 – 2009-11-24 17:18:50

-2

Windows Vista和Windows 7中的Windows資源管理器甚至不會調用ShellExecuteA或ShellExecuteW。

沒有一點麻煩。大聲笑:-)

而且,如果我可以補充說,我已經通過鉤住兩個函數與32位和64位內聯鉤子測試。

對不起。大聲笑:-)