热门问题
时间线
聊天
视角

DLL注入

来自维基百科,自由的百科全书

Remove ads

DLL注入(英語:DLL injection)是一種涉及計算機信息安全的特殊編程技術,它可以強行使一個進程加載某個動態鏈接庫以在其私有地址空間內運行指定代碼(往往是惡意代碼)。[1]DLL注入的常見手段是用外部DLL庫覆蓋一個程序原先的DLL庫,目的是實現該程序的作者未預期的結果。[2][3]比如,注入的代碼可以掛鉤(Hook)系統消息或系統調用[4][5],以達到讀取密碼框的內容等危險目的,而一般編程手段無法達成這些目的。[6]

能將任意代碼注入任意進程的程序被稱為DLL注入器(DLL injector)。

實現方式

Windows平台

  • 先利用惡意TSR程序調用惡意DLL,在惡意DLL初始化時,由TSR定位待注入目標程序並將其句柄傳遞至DLL中的注入函數,注入函數會繞過安全權限並向目標程序的私有地址空間申請一塊預留空間,並在該空間內展開後續惡意操作[7]

Unix平台

  • 類Unix操作系統上,基於ld.so(在BSD上)和ld-linux.so(在Linux上)的動態鏈接器,可以通過在LD_PRELOAD環境變量中指定庫的路徑名,將任意庫鏈接到新進程中,該變量可以全局設置或單獨為某個進程設置。[8]

例如,在Linux系統上,這條命令會在啟動時將文件"test.so"中的共享庫鏈接到命令"prog"中:

LD_PRELOAD="./test.so" prog

這樣的庫可以像其他共享對象一樣創建。在GCC中,這涉及到使用-fpic或-fPIC選項編譯包含要鏈接的新全局變量的源文件[9],並使用-shared選項進行鏈接。[10]該庫可以像其他庫一樣訪問程序中聲明的外部符號。

  • macOS上,以下命令會在啟動時將文件"test.dylib"中的共享庫鏈接到命令"prog"中:[11]
    DYLD_INSERT_LIBRARIES="./test.dylib" DYLD_FORCE_FLAT_NAMESPACE=1 prog
    
    在類Unix系統上,也可以使用基於調試器的技術。[12]

參考資料

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads