天天看點

DLL劫持技術原理與實作方法

現在破解軟體都挺流行用lpk.dll這種DLL劫持方式,簡單的說一下DLL劫持技術原理和實作方法。

可以劫持的DLL很多,這裡就以lpk.dll為例子。

文章分為兩部分:

        一、純理論的DLL劫持原理

        二、純實踐的實作方法

一、DLL劫持原理

引用

DLL劫持原理

--------------------------------------------------------------------------------

  DLL劫持技術當一個可執行檔案運作時,Windows加載器将可執行子產品映射到程序的位址空間中,加載器分析可執行子產品的輸入表,并設法找出任何需要的DLL,并将它們映射到程序的位址空間中。

  由于輸入表中隻包含DLL名而沒有它的路徑名,是以加載程式必須在磁盤上搜尋DLL檔案。首先會嘗試從目前程式所在的目錄加載DLL,如果沒找到,則在Windows系統目錄中查找,最後是在環境變量中列出的各個目錄下查找。利用這個特點,先僞造一個系統同名的DLL,提供同樣的輸出表,每個輸出函數轉向真正的系統DLL。程式調用系統DLL時會先調用目前目錄下僞造的DLL,完成相關功能後,再跳到系統DLL同名函數裡執行。這個過程用個形象的詞來描述就是系統DLL被劫持(hijack)了。

  僞造的dll制作好後,放到程式目前目錄下,這樣當原程式調用原函數時就調用了僞造的dll的同名函數,進入劫持DLL的代碼,處理完畢後,再調用原DLL此函數。

  這種更新檔技術,對加殼保護的軟體很有效,選擇挂接的函數最好是在殼中沒有被調用的,當挂接函數被執行時,相關的代碼已被解壓,可以直接更新檔了。在有些情況下,必須用計數器統計挂接的函數的調用次數來接近OEP。此方法巧妙地繞過了殼的複雜檢測,很适合加殼程式的更新檔制作。

  一些木馬或病毒也會利用DLL劫持技術搞破壞,是以當在應用程式目錄下發現系統一些DLL檔案存在時,如lpk.dll,應引起注意。

程式自動調用DLL步驟:

        1、程式執行将自動調用某個DLL檔案,程式隻指明了DLL檔案名而沒有指明具體路徑

        2、程式會首先在程式運作目錄尋找需要加載的DLL檔案,找到便加載,沒有找到進行第三步

        3、去系統目錄尋找,找到加載, 沒找到,到下一個地方尋找

我們需要做的:

        1、我們僞造一個程式自動調用的DLL檔案,放在程式同一個目錄下,例如:lpk.dll

        2、等程式運作來調用我們僞造的DLL

程式一旦調用了,剩下的就是你想把那個程式怎麼辦就怎麼辦了。     

繼續閱讀