999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

多進程環境下程序自我防護病毒的實現

2012-12-31 00:00:00楊麗英
課程教育研究·新教師教學 2012年11期

摘要:本文對進程及線程運行原理上的分析,通過模擬病毒的隱藏性和寄生性,運用進程通信、進程快照、多線程等技術基礎,從實例分析角度來模擬病毒特征,介紹了如何利用多進程實現程序的自我防護,最終實現程序運行的可靠性和安全性。

關鍵詞: 病毒;進程與線程;自我防護;程序

中圖分類號:G4

引言

一、計算機進程與線程

進程是程序在計算機上的一次執行活動 ,在Windows下,進程又被細化為線程,也就是一個進程下有多個能獨立運行的更小的單位。在同一個時間里,同一個計算機系統中如果允許兩個或兩個以上的進程處于運行狀態,這便是多任務。現代的操作系統幾乎都是多任務操作系統,能夠同時管理多個進程的運行。我們通常使用的計算機中只有一個CPU,也就是說只有一顆心,要讓它一心多用,同時運行多個進程,就必須使用并發技術。實現并發技術相當復雜,最容易理解的是“時間片輪轉進程調度算法”,它的思想簡單介紹如下:在操作系統的管理下,所有正在運行的進程輪流使用CPU,每個進程允許占用CPU的時間非常短(比如10毫秒),這樣用戶根本感覺不出來CPU是在輪流為多個進程服務,就好象所有的進程都在不間斷地運行一樣。

在Windows中,進行CPU分配是以線程為單位的,一個進程可能由多個線程組成,這時情況更加復雜,但簡單地說,有如下關系:

總線程數<= CPU數量:并行運行

總線程數> CPU數量:并發運行

并行運行的效率顯然高于并發運行,所以在多CPU的計算機中,多任務的效率比較高。但是,如果在多CPU計算機中只運行一個進程(線程),就不能發揮多CPU的優勢。

這里涉及到多任務操作系統的問題,多任務操作系統(如Windows)的基本原理是:操作系統將CPU的時間片分配給多個線程,每個線程在操作系統指定的時間片內完成。操作系統不斷的從一個線程的執行切換到另一個線程的執行,如此往復,宏觀上看來,就好像是多個線程在一起執行。由于這多個線程分屬于不同的進程,因此在我們看來。就好像是多個進程在同時執行,這樣就實現了多任務。

二、程序的設計與實現

1、監督過程的實現

監督是指利用進程枚舉的方法,讓所有程序在運行同時不停地對進程列表進行快照,并檢查目標進程是否存在的過程。 在Windows環境下通過調用ToolHelp API函數來達到枚舉系統進程的目的。ToolHelp32庫函數在KERNEL32.dll中,它們都是標準的API函數。

ToolHelp32庫中有各種各樣的函數可以用來枚舉系統中的進程、線程,以及獲取內存和模塊信息。其中枚舉進程只需用如下三個的函數:CreateToolhelp32Snapshot()、Process32First()和Process32Next()。 使用ToolHelp32函數的第一步是用CreateToolhelp32Snapshot()函數創建系統信息“快照”。這個函數可讓你選擇存儲在快照中的信息類型。如果你只是對進程信息感興趣,那么只要包含TH32CS_SNAPPROCESS標志即可。CreateToolhelp32Snapshot()函數返回一個HANDLE,完成調用之后,必須將此HANDLE傳給CloseHandle()。接下來是調用一次Process32First函數,從快照中獲取進程列表,然后重復調用Process32Next,直到函數返回FALSE為止。這樣將遍歷快照中進程列表。這兩個函數都帶兩個參數,它們分別是快照句柄和一個PROCESSENTRY32結構。

2、報警進程的實現

一個程序中復制數據的時候,實際上是將這些數據放入了內存,相反,在另一個程序中粘貼數據時實際上是從內存取出數據,這些都是通過使用剪貼板來實現的。使用剪貼板的主要函數有:打開剪貼板OpenClipboard(),不管是對剪貼板的讀還是寫,都要首先調用此函數,以判斷是否可以對剪貼板進行操作。此函數是BOOL型的,如果調用成功就返回非零,否則返回零。清空剪貼板EmptyClipborad(),每次對剪貼板的寫入操作之前,都應該調用此函數,這個函數的作用不僅是清空剪貼板,而且起到獲得剪貼板的使用權的作用。同樣,這個函數也是BOOL型的,如果調用成功就返回非零,否則返回零。對剪貼板寫入SetClipboardData(UINT uFormat,HANDLE hMem),這個函數有兩個參數,第一個參數用來表示寫入剪貼板數據的格式,第二個參數接收一個句柄值,在這里它接收一個指向內存對象的句柄,這個內存對象中存放著準備寫入剪貼板的數據內容。在調用SetClipboardData(UINT uFormat,HANDLE hMem)之前還需要調用GlobalAlloc(UINT uFlags,SIZE_T dwSytes)這樣一個函數,它專門用來為將要寫入的數據分配一塊內存空間。這個函數接收兩個參數,第一個參數表示如何來分配內存空間,這里我們將它設置為GMEM_MOVEABLE,表示動態分配內存。第二個參數是表示分配內存空間的大小。GlobalAlloc(UINT uFlags,SIZE_T dwSytes)返回一個句柄,我們無法使用句柄來間接的將數據放入內存,這時就需要調用另一個函數GlobalLock(HGLOBAL hMem),這個函數獲得一個內存對象的句柄,將這塊內存加鎖,返回一個指針,這時我們就可以給指針所指向的這塊內存寫入數據了。這個函數使用一個內存計數,計數器基數為零,每調用一次計數器加一,所以每調用一次的同時還需要調用另外一個函數GlobalUnlock(HGLOBAL hMem)來給計數器減一,相當于取消對這塊內存的鎖定。程序實現報警功能就是在枚舉進程之后發現目標進程被終止,從而在剪貼板中寫入信息的過程。

3、監聽進程的實現

所謂監聽,就是報警的反方向,即從剪貼板中讀出信息。從剪貼板讀取數據的函數GetClipboardData(UINT uFormat)。這個函數只接收一個參數,參數指定讀取的格式。讀取信息之后,我們還要對信息進行if判斷,如果信息是我們預留的某個進程被結束的話,我們就啟動保護措施。

4、防護和隱藏進程的實現

這里的保護是指監聽程序對其他程序的保護,方法非常簡單,只需要利用WinExec函數來實現目標進程的啟動就可以。而隱藏是指監聽程序自身的隱藏,只要在OnPaint()函數里調用ShowWindow(SW_HIDE)函數就可以了,同時將監聽程序命名為smss,就可以避免其被強行終止。

三、結束語

由于網絡及信息資源的特殊性質,決定了信息安全問題的客觀存在。本程序的設計是模仿病毒的一些特性實現。它體現了程序的隱藏、保證了程序的安全運行,利用系統的漏洞實現不被其他進程終止。對一般程序自我保護的設計有很好的借鑒參考意義。

主站蜘蛛池模板: 亚洲综合色婷婷| 亚洲乱亚洲乱妇24p| 亚洲av无码专区久久蜜芽| 国产在线视频福利资源站| 欧美亚洲国产精品久久蜜芽| 国产91蝌蚪窝| 久热这里只有精品6| 91久久国产成人免费观看| 久久久精品国产SM调教网站| 国产综合网站| 欧美天天干| 国产va欧美va在线观看| 亚洲午夜天堂| 国产黄在线观看| 亚洲天堂2014| 国产精品私拍99pans大尺度| 亚洲一区二区三区麻豆| 爱爱影院18禁免费| 国产91av在线| 亚洲全网成人资源在线观看| 精品一区二区三区无码视频无码| 五月天久久综合| 免费国产黄线在线观看| 亚洲精品777| 免费无码网站| 欧美亚洲一区二区三区在线| 午夜在线不卡| 日本少妇又色又爽又高潮| 国产一区三区二区中文在线| 伊人久综合| 无码视频国产精品一区二区| 视频二区亚洲精品| 久久人妻xunleige无码| 天天综合色网| 99爱在线| 青青草91视频| 亚洲第一天堂无码专区| 97国产在线视频| 国产无码在线调教| 国产第一页屁屁影院| 久久青青草原亚洲av无码| 国产99精品久久| 中文字幕丝袜一区二区| 欧日韩在线不卡视频| 国产在线专区| 在线免费a视频| 香蕉99国内自产自拍视频| 国产交换配偶在线视频| 久久一级电影| 日韩成人高清无码| 欧美亚洲欧美| 免费一级成人毛片| a在线亚洲男人的天堂试看| 亚洲欧美国产五月天综合| 久久夜色精品| 操国产美女| 国产成人精品一区二区三区| 免费一级毛片不卡在线播放| 色久综合在线| 欧美α片免费观看| 在线观看免费国产| 国产乱人视频免费观看| 国产网站免费| 免费毛片全部不收费的| 亚洲成人黄色在线| 亚洲免费播放| 亚洲精品卡2卡3卡4卡5卡区| 久久超级碰| av天堂最新版在线| 国产成人一区| 国产精品一区在线观看你懂的| 色综合色国产热无码一| 91人妻在线视频| 日a本亚洲中文在线观看| 国产一区二区人大臿蕉香蕉| 欧美高清三区| 青草免费在线观看| 亚洲视频在线青青| a级毛片免费在线观看| a毛片基地免费大全| 91香蕉视频下载网站| 国产女人18毛片水真多1|