複製鏈接
請複製以下鏈接發送給好友

進程插入

鎖定
進程插入,即“讓一個線程在別的進程中執行”。也叫線程插入、DLL注入。
中文名
進程插入
外文名
Process Injection

進程插入簡介

在Windows中,每個進程都有自己的私有內存地址空間,當使用指針(一種訪問內存的機制)訪問內存時,一個進程無法訪問另一個進程的內存地址空間,就好比在未經鄰居同意的情況下,你無法進入鄰居家吃飯一樣。比如QQ在內存中存放了一張圖片的數據,而MSN則無法通過直接讀取內存的方式來獲得該圖片的數據。這樣做同時也保證了程序的穩定性,如果你的進程存在一個錯誤,改寫了一個隨機地址上的內存,這個錯誤不會影響另一個進程使用的內存。

進程插入應用介紹

對應用程序來説,進程就像一個大容器。在應用程序被運行後,就相當於將應用程序裝進容器裏了,你可以往容器里加其他東西(如:應用程序在運行時所需的變量數據、需要引用的DLL文件等),當應用程序被運行兩次時,容器裏的東西並不會被倒掉,系統會找一個新的進程容器來容納它。

進程插入隱藏原理

DLL文件隱藏的原理
dll文件不能單獨運行,需要由進程(宿主)加載並調用。因為不能單獨運行,dll文件就不會在進程管理器中出現,於是入侵檢測軟件和進程列表中都只有宿主進程的id,而找不到dll。 [1] 

進程插入進程注入的優點

1.需要插入到遠程進程的內存空間是通過virtualAllocEx這樣的函數分配的,只存在於內存中,如果不是內存查殺,很難發現。
2.可以複用宿主進程的名稱、端口,更加隱蔽 [1] 

進程插入進程注入的流程

1. 編寫引導程序(Loader.exe),將dll文件注入到遠程進程
1.1 將系統權限提升到Debug模式,因為只有debug模式才能打開遠程進程的handle。使用到的函數:EnableDebugPrivilege
1.2 打開遠程進程。使用到的函數:OpenProcess
1.3 給DLL文件的路徑分配內存空間。使用到的函數:VirtualAllocEx()。
1.4 將DLL文件內容寫入到遠程進程。使用到的函數:WriteProcessMemory。
1.5 在宿主進程中啓動新線程完成插入。使用到的函數:CreateRemoteThread。 [1] 

進程插入內容

一個進程可以包含若干線程(Thread),線程可以幫助應用程序同時做幾件事(比如一個線程向磁盤寫入文件,另一個則接收用户的按鍵操作並及時做出反應,互相不干擾),在程序被運行後中,系統首先要做的就是為該程序進程建立一個默認線程,然後程序可以根據需要自行添加或刪除相關的線程
獨立的地址空間對於編程人員和用户來説都是非常有利的。對於編程人員來説,系統更容易捕獲隨意的內存讀取和寫入操作。對於用户來説,操作系統將變得更加健壯,因為一個應用程序無法破壞另一個進程或操作系統的運行。當然,操作系統的這個健壯特性是要付出代價的,因為要編寫能夠與其他進程進行通信,或者能夠對其他進程進行操作的應用程序將要困難得多。但仍有很多種方法可以打破進程的界限,訪問另一個進程的地址空間,那就是“進程插入”(Process Injection)。一旦木馬的DLL插入了另一個進程的地址空間後,就可以對另一個進程為所欲為,比如盜QQ
普通情況下,一個應用程序所接收的鍵盤、鼠標操作,別的應用程序是無權“過問”的。可盜號木馬是怎麼偷偷記錄下我的密碼的呢?木馬首先將1個DLL文件插入到QQ的進程中併成為QQ進程中的一個線程,這樣該木馬DLL就赫然成為了QQ的一部分!然後在用户輸入密碼時,因為此時木馬DLL已經進入QQ進程內部,所以也就能夠接收到用户傳遞給QQ的密碼鍵入了,真是“家賊難防”啊!
參考資料