Windows中的進程
在Windows中,每個進
程都有自己的私有記憶體地址空間,當使用指針(一種訪問記憶體的機制)訪問記憶體時,一個進程無法訪問另一個進程的記憶體地址空間,就好比在未經鄰居同意的情況下,你無法進入鄰居家吃飯一樣。比如QQ在記憶體中存放了一張圖片的數據,而MSN則無法通過直接讀取記憶體的方式來獲得該圖片的數據。這樣做同時也保證了程式的穩定性,如果你的進程存在一個錯誤,改寫了一個隨機地址上的記憶體,這個錯誤不會影響另一個進程使用的記憶體。應用程式
對應用程式
來說,進程就像一個大容器。在應用程式被運行後,就相當於將應用程式裝進容器里了,你可以往容器里加其他東西(如:應用程式在運行時所需的變數數據、需要引用的DLL檔案等),當應用程式被運行兩次時,容器里的東西並不會被倒掉,系統會找一個新的進程容器來容納它。一個進程可以包含若干執行緒(Thread),執行緒可以幫助應用程式同時做幾件事(比如一個執行緒向磁碟寫入檔案,另一個則接收用戶的按鍵操作並及時做出反應,互相不干擾),在程式被運行後中,系統首先要做的就是為該程式進程建立一個默認執行緒,然後程式可以根據需要自行添加或刪除相關的執行緒
盜號木馬
獨立的
地址空間對於編程人員和用戶來說都是非常有利的。對於編程人員來說,系統更容易捕獲隨意的記憶體讀取和寫入操作。對於用戶來說,作業系統將變得更加健壯,因為一個應用程式無法破壞另一個進程或作業系統的運行。當然,作業系統的這個健壯特性是要付出代價的,因為要編寫能夠與其他進程進行通信,或者能夠對其他進程進行操作的應用程式將要困難得多。但仍有很多種方法可以打破進程的界限,訪問另一個進程的地址空間,那就是“進程插入”(Process Injection)。一旦木馬的DLL插入了另一個進程的地址空間後,就可以對另一個進程為所欲為,比如盜QQ普通情況下,一個應用程式所接收的鍵盤、滑鼠操作,別的應用程式是無權“過問”的。可盜號木馬是怎么偷偷記錄下我的密碼的呢?木馬首先將1個DLL檔案插入到QQ的進程中並成為QQ進程中的一個執行緒,這樣該木馬DLL就赫然成為了QQ的一部分!然後在用戶輸入密碼時,因為此時木馬DLL已經進入QQ進程內部,所以也就能夠接收到用戶傳遞給QQ的密碼鍵入了,真是“家賊難防”啊!