簡體   English   中英

如何防止DLL加載其他標准DLL?

[英]How to prevent DLL from loading other standard DLLs?

我正在通過CreateRemoteThread()進行 DLL 注入試驗(有關詳細信息,請參閱我的其他問題)。 我將它注入到CMD.exe進程(注意,不是conhost.exe進程)。 問題是,我注意到它實際上加載了其他 8 個 Windows DLL。 即使我從不使用這些 DLL 中的任何函數,它也會加載它們。

現在我想知道,有沒有辦法防止這種情況發生? 我現在唯一的猜測是不包括<windows.h> ,然后復制大多數宏的定義並通過調用LoadLibrary()加載實際需要的庫。 然而,我想,這不是最優雅的解決方案。

也許有一些行之有效的方法來防止標准衛星 DLL 加載?

圖片

C 運行時需要這些 DLL,它們可能由 PE 加載器自動映射,而不是動態加載。 如果您在匯編中編寫代碼,則不會加載這些代碼。 您也許可以使用編譯器/鏈接器設置完全剝離 C 運行時,但您在 C 中的能力會大大降低。

對於僅偶爾依賴特定庫的情況,一個選項是將其視為延遲加載。

在 Visual Studio 中,可以在鏈接器 -> 輸入下的項目屬性窗口中找到此設置。

因此,例如,如果您希望有時只從 user32.dll 調用某些內容,則可以將“user32.dll”添加到延遲加載的 DLL 行(請注意,對於輸入庫,這確實需要 .dll 而不是 .lib)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM