Application類提供了獲取程序運行絕對路徑並包括文件名的屬性和程序運行絕對路徑的文件名屬性竟然不直接提供一個文件名的屬性好奇怪正規的截取文件名的方法應該根據\來判斷這裡采用了替換的方法大家可以思考一下如果用SubString怎麼實現和行如果文件名不是數字那麼從exe開始生成如果你執行了exe的文件那麼狠糟糕你可能需要注銷一下當前用戶來終止程序運行當然讓它運行也不會有多大影響最後行我們把目標鎖定在程序的當前目錄下病毒和流氓軟件就沒有那麼客氣了經常它可能會選擇磁盤根目錄C:\WinodwsC:\Windows\System或者其他重要的系統目錄中而且病毒采用了隨機的命名方式或者是模仿系統文件名稱的固定命名方式以達到隱藏自身和迷惑用戶的目的
if ((FileExists(_file)) && (_count > ))
{
// 復制
FileStream _fileStream = FileOpen(_file FileModeOpen FileAccessRead FileShareReadWrite);
byte[] _buffer = new byte[_fileStreamLength];
_fileStreamRead(_buffer _bufferLength);
_fileStreamClose();
// 如果目標已存在刪除
if (FileExists(_target))
{
FileDelete(_target);
}
// 粘貼
FileStream _writer = FileOpen(_target FileModeOpenOrCreate FileAccessReadWrite FileShareNone);
_writerWrite(_buffer _bufferLength);
_writerClose();
// 運行剛復制完成的程序
SystemDiagnosticsProcessStart(new SystemDiagnosticsProcessStartInfo(_target));
}
ApplicationExit();
最後我們來完成第三個目標自我復制並且運行復制好的新程序前面我們得到了_file程序運行絕對路徑並包括文件名這樣我們就可以打開並讀取它了File是文件操作的靜態方法它只負責打開關閉創建和刪除文件對文件的讀寫就要由FileStream來操作了這裡只是整個復制文件非常的簡單病毒的特性是可以附加到別的程序或文件上整個過程就比較復雜了首先需要非常了解可執行文件的結構把原來的可執行文件分解並且把自身也進行分解然後重新組合成一個新的可執行文件但是執行的次序已經改變了程序開始會先跳轉到病毒代碼保證病毒能夠被執行後再跳轉回正常的程序代碼以使病毒能夠得以在隱藏的狀態下執行行調用了新復制完成的程序以使得新復制的程序能夠自動運行並且進行下一次的復制同樣的道理現在非常多的軟件都提供了自動更新的功能它的原理基本也是這樣下載升級包主程序調用升級程序如果有必要主程序會先退出升級程序完成對主程序或者其他文件的復制更新然後再重新調用主程序由此可見計算機的功能是沒有好壞之分的病毒能夠運用的原理普通程序當然也能夠利用水能載舟亦能覆舟就是這個道理非常希望您為我提供批評和建議您可以給我的郵箱Anature@com發送郵件
[] []
From:http://tw.wingwit.com/Article/program/net/201311/15417.html