ETH官方钱包

前往
大廳
主題

病毒開發(10) - 寄生病毒設計與解析

虛鹿 | 2022-04-07 03:57:03 | 巴幣 2228 | 人氣 604


照樣推薦一首我很喜歡的歌,
這首歌上傳在YT的原始影片雖然沒有標題,
但是我記得歌名好像是 Casino。

言歸正傳,
其實本來想跳過這一篇的,
畢竟Parasitic Virus的設計理念比前兩款更為的深奧,
嗯.......那麼各位就姑且看看吧 (?
而我會盡量去說明設計上的技巧,
那至於看不看得懂,就得看諸君的造化了。
如果想了解病毒詳細的執行情況,
可以參考上一篇病毒開發(9)的演示情形。

先簡單介紹一下病毒感染的流程:
1. 病毒被觸發,搜尋目前目錄下所有com檔。
2. 病毒把自己附加在欲感染的com檔後方。
3. 病毒將被感染com檔的前幾bytes(x >= 3)進行備份。
4. 病毒將被備份的原始檔頭寫入檔案後方。
5. 病毒用一個near jump置換原始檔頭。
6. near jump 的位置指向病毒起始的offset。

接著,
再簡單講解一下被感染檔案的運作流程:
1. 被感染的檔案被使用者執行。
2. 遇到被病毒置換掉的檔頭(near jump)。
3. near jump 直接跳到病毒起始處。
4. 病毒啟動。
5. 利用先前備份的檔頭內容,還原檔案的檔頭。
6. 感染開始,進行一系列的搜尋與感染。
7. 感染流程結束,控制權交還給原始檔案。
8. 跳回 offset 100h (com檔起始處) 執行原檔案。
9. 由原始檔案的 dos interrupt 終結被感染的程式。

虛鹿ㄉ筆記:

UMU 十分的簡單易懂,對吧?
.......
.......
.......
.......
.......

阿如果你的大腦還沒有死去的話,
非常好 !! 那你大概已經成功了一半的說 (?
接著就只差用組合語言實踐以上的流程就行啦~
是不是發現一切沒有先前所想像中的複雜呢 (?
當然前提是你要精熟x86組合語言,
否則實作的過程可能會.....會...蠻痛苦的....

為了輔助各位閱讀我的原始碼,
因此在這邊講解一些特殊的操作或是設計:
--------------------------------------------
1. 如何處理變數地址偏移:

ANS:
手法如同病毒開發(8)中所述,
利用call找出偏移位置的手法。
--------------------------------------------
2. 如何避免重複感染:

ANS:
被置換的前幾bytes中最低所需要的 3 bytes,
是由 1 位元的near jump機械碼(0E9h),
及2位元的跳躍距離所構成。
然而,如果單靠確認檔案開頭是否為E9h,
來判斷是否被感染的話,
會有極高的可能會產生巧合,
因此錯失本來該感染的檔案。
(畢竟很多程式喜歡用jmp開頭)

為了能夠避免這種情況發生,
我多置換了2 bytes作為輔助識別的標記,
以達到100%準確的感染狀況判別率。
其中,我所用來標記的2bytes為"RE",
因此被感染的檔案會長這樣,
可以明顯地看到用來標記的字母"RE"。

--------------------------------------------
3. 如何在第一次執行時(無宿主時)正確終止程式:

ANS:
我在病毒本體的程式碼開頭預留了5bytes,
以預留一個緩衝區,(init 標籤處)
讓第一次執行時可以安心的覆寫主程式的檔頭,
(也就是先前所提到的”還原”過程)
而不會影響到整體的運作。


而為了能夠正確終止程式不讓dosbox爆開,
我預設的初始覆寫內容是int 20h(中止程式)。
如此一來,在完成初次的感染後,
使用 mov ax, 100h 、push ax、ret 重新跳到檔頭,
便會遇到被覆寫五個NOP,
也就是int 20h,
故能夠順利終止程式。

--------------------------------------------

以上,基礎病毒開發的系列到此結束。
或許有人不懂為什麼我想教dos病毒開發,
畢竟ms-dos也早就被時代淘汰許久了,
而這種舊時代的東東,
理論上因該沒有太大的價值的。

話雖如此,然而,
我認為了解早期的病毒,
是一個能幫助你未來開發出更進階病毒的良好基礎,
了解歷史的推演與病毒的進化,
了解各種病毒興起與被淘汰的理由,
勢必能夠帶給你一個良好的基礎,
不論是在眼光或是創意上。

總之,這系列大概就到此為止惹,
希望本系列能夠指引到那些立志進入病毒圈發展的新人,
讓他們有個好的開始,並看得更高、更遠。
送禮物贊助創作者 !
0
留言

創作回應

Nero
2022-04-07 09:04:16
虛鹿
好耶
2022-04-07 19:45:37
樂小呈
那是手寫的嗎,你的字也太好看 [e17]
2022-04-07 09:25:35
虛鹿
度的,是手寫的
2022-04-07 19:46:04
虛鹿
但我的英文字很常因為寫得太草而被高中老師嫌棄
2022-04-07 19:47:14
rinn
大佬這些都是自學來的嗎?
2022-04-07 09:50:02
虛鹿
度的,都是自學的
2022-04-07 19:47:41
虛鹿
住要是依據The Giant Black Book of Computer Virus的部分內容作為設計與理論上的參考,再自行用x86組合語言去還原裡面所介紹的病毒。
2022-04-07 19:49:47
樂小呈
闢拉你那樣被嫌太草,那我的字不就異形 [e26]
2022-04-07 20:14:25
虛鹿
因該是我習慣寫書寫體的緣故吧,老師很常嫌我的某些字母不夠標準
2022-04-07 20:39:26

更多創作