2010-09-29 31 views
15

最近我在瀏覽互聯網,當時我偶然發現了Dll Injection。Dll Injection - 它有什麼可能?

我認爲它是一個有趣的主題,但是,我不知道它的目的是什麼?

我讀過它可以用於破解/黑客入侵遊戲和軟件,但它也可以做一些積極的事情嗎?

如果是這樣,它可用於什麼?

什麼語言支持?

爲了記錄,我不會嘗試破解/破解任何獲得知識的遊戲,無意做非法!

感謝您的時間,

Emerion

PS:網站/書籍是關於這個問題,將不勝感激!

回答

18

有跡象表明,我想起幾個用途:

  • 熱補丁:允許您更新/你的代碼的補丁部分,而無需實際關閉進程或重新啓動。微軟自己通過在5個字節的NOP塊前加前綴來確保Windows的大部分都是熱補丁。爲什麼?因爲你可以用5字節的JMP代碼的任何其他部分,所以熱補丁基本上用JMP覆蓋前綴字節到更新/修補的代碼,並且瞧,你的代碼會做一些全新的事情。這通常與注入DLL一起使用,以加載新的代碼到目標進程,而不是強制性的,這是它的一個使用

  • 記錄:本着同樣的精神,迂迴碼經常被用來添加前綴函數用於記錄目的,即查看它被調用的參數。此外,某些記錄DirectX應用程序屏幕輸出的應用程序通過繞開DirectX調用來實現此目的,這又涉及將DLL注入到監視調用的進程中。

  • 子類:不是在OOP意義上,而是在Windows意義上,即爲現有窗口提供新的WndProc來改變它的行爲。雖然您可以通過SetWindowLongPtr簡單地設置不同的消息處理例程,但限制因素是該函數需要駐留在目標進程地址空間中。這是再次注入的地方 - 您在DLL中提供了一個新的實現,將其注入到目標進程中並調用SetWindowLongPtr。例如,這可用於在外部窗口上提供自定義附加繪圖。

我曾親自不得不處理上述所有用例在過去,在正常的業務應用程序,使用熱補丁,以確保醫療服務的重要通知系統上正常運行使用走彎路/記錄到允許專有的記錄管理(由當時已經死亡的軟件商店)實時與全面的CRM解決方案進行對話。

與往常一樣,它只是您盒子裏的一個工具,它本身並沒有什麼「邪惡」的東西。無論您使用什麼目的,這都是重要的。

3

在計算機編程,DLL注射是使用迫使它加載一個動態鏈接庫來運行另一個進程的地址空間中的代碼的技術。[1]第三方開發人員經常使用DLL注入來影響程序的行爲,但其作者沒有預期或打算這樣做。例如,注入的代碼可能會陷入系統函數調用,或者讀取密碼文本框的內容,這是無法按照常規方式完成的。

來源和更多資訊:http://en.wikipedia.org/wiki/DLL_injection您也可以找到外部來源的一些很好的參考。

當您有一個沒有源代碼的遺留系統並且您需要更改其行爲時,可以使用Dll注入的一個很好的理由。這是一個骯髒的黑客,應該作爲最後的手段,國際海事組織。

4

在微軟研究院有一個非常好的項目關於這個主題,專注於通過使用dll注入攔截對WinAPI函數的調用。

這是鏈接,它應該讓你忙一陣子:Detours

+1

走彎路是好的,但新的發展你應該更喜歡http://easyhook.codeplex.com/代替 - 允許64以及作爲內核模式掛鉤,並允許鉤子被寫爲託管代碼(!) – snemarch 2010-09-29 13:02:49

+0

@snemarch - 不錯!我知道Detours已經老了,但我不知道有人把這個概念繼續下去 - 我會喜歡玩這個遊戲。 – slugster 2010-09-29 21:15:21