• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            twzheng's cppblog

            『站在風口浪尖緊握住鼠標旋轉!』 http://www.cnblogs.com/twzheng

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks
            [轉]自我復制的簡單實現(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行調用了新復制完成的程序。以使得新復制的程序能夠自動運行,并且進行下一次的復制。同樣的道理,現在非常多的軟件都提供了自動更新的功能,它的原理基本也是這樣,下載升級包,主程序調用升級程序,如果有必要,主程序會先退出,升級程序完成對主程序或者其他文件的復制更新,然后再重新調用主程序。由此可見,計算機的功能是沒有好壞之分的。病毒能夠運用的原理,普通程序當然也能夠利用。水能載舟亦能覆舟就是這個道理。

            posted on 2008-06-13 09:12 譚文政 閱讀(803) 評論(0)  編輯 收藏 引用 所屬分類: windows 編程
            久久国产精品77777| 欧美性大战久久久久久| 亚洲欧美日韩久久精品| 人妻精品久久久久中文字幕69 | 人妻无码αv中文字幕久久琪琪布| 欧美伊人久久大香线蕉综合 | 久久精品国产亚洲av日韩| 久久丫精品国产亚洲av| 国产日韩久久久精品影院首页| 亚洲Av无码国产情品久久| 久久亚洲AV无码精品色午夜 | 欧美大战日韩91综合一区婷婷久久青草| 久久久久久国产a免费观看不卡| 无码精品久久久久久人妻中字 | 久久强奷乱码老熟女网站| 久久本道久久综合伊人| 精品久久8x国产免费观看| 久久久久亚洲国产| 久久精品99无色码中文字幕| 久久99热这里只有精品国产| 99久久亚洲综合精品成人| 久久国产精品无码HDAV| 久久亚洲精品无码观看不卡| 72种姿势欧美久久久久大黄蕉| 国产欧美久久久精品影院| 国产AV影片久久久久久| 国内精品九九久久久精品| 国产亚洲精品久久久久秋霞 | 久久一区二区三区免费| 国内精品久久国产大陆| 精品亚洲综合久久中文字幕| 久久亚洲精品无码aⅴ大香| 久久影院午夜理论片无码| 成人亚洲欧美久久久久| 四虎国产精品免费久久5151| 精品久久久久久无码中文野结衣| 久久99精品久久久久子伦| 九九久久自然熟的香蕉图片| 嫩草伊人久久精品少妇AV| 亚洲AV无一区二区三区久久 | 久久国产色av免费看|