進程插入

進程插入,即“讓一個執行緒在別的進程中執行”。也叫執行緒插入、DLL注入。

基本介紹

  • 中文名:進程插入
  • 外文名:Process Injection
簡介,介紹,DLL檔案隱藏的原理,進程注入的優點,進程注入的流程,內容,

簡介

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

介紹

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

DLL檔案隱藏的原理

dll檔案不能單獨運行,需要由進程(宿主)載入並調用。因為不能單獨運行,dll檔案就不會在進程管理器中出現,於是入侵檢測軟體和進程列表中都只有宿主進程的id,而找不到dll。

進程注入的優點

1.需要插入到遠程進程的記憶體空間是通過virtualAllocEx這樣的函式分配的,只存在於記憶體中,如果不是記憶體查殺,很難發現。
2.可以復用宿主進程的名稱、連線埠,更加隱蔽

進程注入的流程

1. 編寫引導程式(Loader.exe),將dll檔案注入到遠程進程
1.1 將系統許可權提升到Debug模式,因為只有debug模式才能打開遠程進程的handle。使用到的函式:EnableDebugPrivilege
1.2 打開遠程進程。使用到的函式:OpenProcess
1.3 給DLL檔案的路徑分配記憶體空間。使用到的函式:VirtualAllocEx()。
1.4 將DLL檔案內容寫入到遠程進程。使用到的函式:WriteProcessMemory。
1.5 在宿主進程中啟動新執行緒完成插入。使用到的函式:CreateRemoteThread。

內容

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

相關詞條

熱門詞條

聯絡我們