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

編寫感染 COM 與 EXE 檔案的病毒 (組合語言,僅供學術研究)

     編輯:VC 教學

聲明

本文原始碼為病毒範例,僅供安全研究、教學分析用途。傳播、執行惡意代碼屬違法行為,嚴禁濫用。

技術分析

此病毒 (dv1) 以組合語言 (TASM32/TLINK) 撰寫,可感染 DOS 下的 .COM 與 .EXE 檔案。核心模組:

  • 駐留檢測:自定義中斷 INT 21h/4D4Dh 判斷是否已駐留記憶體。
  • 觸發條件:系統時間達 22:30 顯示訊息 ("Night is deep, you must go sleep!")。
  • 感染向量:Hook INT 21h 攔截 4Bh (Exec)、43h (Get/Set Attr)、3Dh (Open) 功能,針對 .COM/.EXE 寫入病毒本體。
  • COM 感染:讀取首 4 位元組備份,檢查 'ZM' 標記 (避免誤感染 EXE) 及 'V' 標記 (避免重複感染),將病毒附加檔尾,修改首部為 JMP VIRUS。
  • EXE 感染:讀取 EXE Header,修改 StartCS:IP、StartSS:SP 指向病毒碼 (置於檔尾並對齊段落),設定 CheckSum='VV' 為感染標記,重寫 Header。
  • 記憶體分配:遍歷 MCB (Memory Control Block) 找到最後一塊,縮減其大小騰出高端記憶體給病毒駐留。
  • 還原執行:感染後恢復原程式入口點 (COM 還原首 4 字節 + INT 20h;EXE 還原 SS:SP/CS:IP) 並轉跳執行。

關鍵資料結構 (節錄)

DosMcb Struc
    Flag db ?      ; 'M'=非最後, 'Z'=最後
    Owner dw ?     ; 0008h=系統, 0=空閒
    Sizes dw ?     ; 區塊大小 (段落數)
DosMcb Ends

ExeHeader Struc
    Flags dw 'ZM'  ; EXE 標記
    ModSize dw ?   ; 最後頁字節數
    Pages dw ?     ; 頁數 (512bytes/頁)
    Reloc dw ?     ; 重定位項數
    MeSize dw ?    ; Header 段落數
    MinMem dw ?    ; 最小記憶體
    MaxMem dw ?    ; 最大記憶體
    StartSs dw ?   ; SS 初值
    StartSp dw ?   ; SP 初值
    CheckSum dw ?  ; 檢查和
    StartIp dw ?   ; IP 初值
    StartCs dw ?   ; CS 初值
    RelocOff dw ?  ; 重定位表偏移
ExeHeader Ends

防禦啟示

  • 監控 INT 21h Hook、MCB 異常縮減、EXE Header CheckSum 異常、檔案大小異常增長。
  • 現代系統已棄用 DOS 即時模式,此類病毒在 NT 核心 (含 Windows 10/11) 下無法直接運行,但 Hook 核心 API、修改 PE Header、進程注入等思想具有延續性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved