2012-06-24 34 views
-3

我正在開發一個安全應用程序,應該阻止某些進程的地址空間中的dll注入。 假設我們是一個暫停狀態的進程(尚未被啓動),是否有可能訪問進程將要加載的DLL列表?我已經嘗試了EnumProcessModules函數,但它似乎不工作(我認爲這很明顯,因爲進程仍然處於掛起狀態,並且尚未加載DLL)。 此外,我想改變DLL加載的東西,例如讓我們說這個過程將加載X.dll,Y.dll和Z.dll,是否有可能避免加載Y.dll?進程DLL加載

在此先感謝=)

+1

在解釋您打算用來干擾它的確切機制之前,無法解答此問題。注入代碼?從另一個進程偷看和戳的API? – bmargulies

+0

我正在開發一個安全應用程序,我想防止在我的過程中注入一些DLL! – Ananas

+1

請編輯你的問題來澄清。你忙於積累不會幫助你的答案。 「 – bmargulies

回答

0

如果要加載程序的控制下的dll那麼不要嘗試使用動態連接器會自動加載它們。你正在反對編譯器的設計。

只是不要鏈接到Dll,而只是包含它們的頭文件,並用「LoadLibrary」手動加載Dll,然後使用「GetProcAddress」獲取每個函數。

0

要檢索將要加載的庫的列表(包括延遲加載),您需要遍歷用於該進程的二進制文件的pe,這與windows加載程序的方式相同。

避免加載某些鏈接庫變得更加複雜,因爲您需要以某種方式修復對從庫中加載的符號的引用,這涉及到更改IAT,擦除鏈接,然後刪除dll鏈接從pe,然後調整任何引用現在刪除的IAT條目。

這與離線工具,如LordPE更容易一些,但它的成功和複雜性最終取決於你爲什麼需要停止的dll加載...

的另一種方法是使用Windows調試API暫停在DLL負載,強制卸載,如果它不應該被加載(但這也是充滿了問題,並可能會導致系統鎖和Bsods)

0

如果根據您的評論,你正試圖生產防篡改程序... 不能使其完全防篡改。如果某人能夠登錄到具有足夠訪問權限的計算機來設置代碼注入,他們遲早可以做任何他們喜歡的事情。注入的代碼當然可能會混淆加載器並替換dll或阻止dll。它可以做任何事情。

+0

我完全知道這一點,但它不是一個商業應用或類似的東西,我只是爲了研究Windows Loader的內部工作而編寫代碼。你有什麼提示如何做到這一點? – Ananas