首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

惡意程式自我複製機制原理解析與防禦觀點 (C# 教學範例)

     編輯:關於C語言

⚠️ 安全警示

本文僅供**學術研究與防禦教育**目的,展示惡意程式常見的自我複製技術原理。**嚴禁**用於製作、傳播惡意軟體。請遵守當地法律法規與道德規範。

技術原理解析

惡意程式為達持久化與傳播,常採用以下手法:

  1. 隱藏視窗:Form.ShowInTaskbar = false; Opacity = 0; 使使用者無法發現執行中程式。
  2. 自我複製:讀取自身二進位內容 (File.ReadAllBytes),寫入新檔名 (常用亂數或遞增數字)。
  3. 遞迴執行:啟動新複製體 (Process.Start),形成鏈式感染。
  4. 目標目錄:系統目錄 (C:\Windows、System32)、啟動資料夾、暫存目錄等。
  5. 偽裝命名:模仿系統檔名 (如 svchost.exe、wsqmcons.exe) 或使用隨機字串。

教學範例:極簡化自我複製邏輯 (僅示範核心 API)

using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace SelfReplicationDemo
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            // 1. 隱藏視窗 (僅示範 API,實際惡意碼不會建立 Form)
            Application.EnableVisualStyles();
            Form f = new Form { ShowInTaskbar = false, Opacity = 0, WindowState = FormWindowState.Minimized };
            f.Load += (s, e) => ReplicateAndExit(f);
            Application.Run(f);
        }

        static void ReplicateAndExit(Form host)
        {
            const int MAX_COPIES = 5; // 限制複製數量,防止失控
            string selfPath = Application.ExecutablePath;
            string dir = Application.StartupPath;
            string selfName = Path.GetFileName(selfPath);

            // 解析當前複製代號 (檔名為數字.exe)
            int copyNum = 0;
            if (int.TryParse(Path.GetFileNameWithoutExtension(selfName), out copyNum))
            {
                copyNum--;
            }
            else
            {
                copyNum = MAX_COPIES; // 原始檔從 MAX 開始遞減
            }

            if (copyNum <= 0)
            {
                MessageBox.Show("示範結束:已達複製上限。");
                host.Close();
                return;
            }

            string targetName = $"{copyNum:000}.exe";
            string targetPath = Path.Combine(dir, targetName);

            try
            {
                // 2. 複製自身二進位
                byte[] selfBytes = File.ReadAllBytes(selfPath);
                File.WriteAllBytes(targetPath, selfBytes);

                // 3. 啟動新複製體
                Process.Start(new ProcessStartInfo(targetPath) { UseShellExecute = true });
            }
            catch (Exception ex)
            {
                MessageBox.Show("複製失敗:" + ex.Message);
            }
            finally
            {
                host.Close(); // 結束當前進程
            }
        }
    }
}

關鍵 API 對照表

功能.NET API原生 Windows API 對應
讀取自身路徑Application.ExecutablePathGetModuleFileName
二進位讀寫File.ReadAllBytes/WriteAllBytesCreateFile/ReadFile/WriteFile
啟動新程序Process.StartCreateProcess
隱藏視窗Form.Opacity=0, ShowInTaskbar=falseShowWindow(SW_HIDE)

防禦與偵測策略

  • 檔案完整性監控 (FIM):監控關鍵目錄 (System32、啟動資料夾) 新增/變更執行檔。
  • 行為分析:單一進程短時間內大量建立執行檔並啟動 (EDR/XDR 可攔截)。
  • 數位簽章驗證:僅允許受信任簽章的執行檔運行 (AppLocker、WDAC)。
  • 記憶體掃描:偵測無磁碟檔案支撐的記憶體模組 (Reflective DLL Injection)。
  • 網路流量關聯:自我複製常伴隨 C2 通訊或橫向移動。

清除建議

  1. 斷網隔離。
  2. 進入安全模式或 WinPE 環境。
  3. 使用離線殺毒掃描器 (Windows Defender Offline、Kaspersky Rescue Disk)。
  4. 檢查啟動項、排程工作、服務、登錄表 Run/RunOnce 鍵值。
  5. 若系統檔被感染,建議備份資料後重灌系統 (如原文作者經驗)。

結語

理解攻擊技術是建立有效防禦的前提。開發者應熟悉 System.IO、Process、FileSystemWatcher 等 API 的雙面性,並在軟體供應鏈、部署管線、執行環境多層面佈防。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved