沒想到吧,諸君?(′▽`)
又是一個關於病毒開發的新系列啦~
只是這次會著重在現代的作業系統病毒,
或是紀錄一些逆向工程的學習心得什麼的,
總之,就是會比先前的那個系列更加實務,
與更加具備實際上的參考性。
由於本系列的目的,
是在研究怎麼在最短的時間內操翻電腦,
故沒有什麼太正當的教育意義。
雖然 "為美好的世界獻上病毒" 的這一系列,
多數文章閱覽權限我仍都會設為公開;
但同時我也會額外建立一個隱藏的公會,
用來分享一些不想公開討論的額外擴充內容,
並給予成員一個可交流、分享的隱密空間。
一部分是不希望這類技術外流,
一部分是不想讓沒相關知識的人不勞而獲,
隨便上網Google就能查到這種技術。
( 欲了解公會申請的審核標準,請跳到0x05。
至於這系列文章是針對哪一個客群的呢?
我會建議觀看者具備以下幾點條件:
1. 有 x86 Assembly 的經驗
2. 會 C/C++ 或 VB 語法
3. 了解基本Dos指令與類Unix作業系統指令
4. 憤世嫉俗或想到暗網發展事業之人
在撰寫此系列文章時,
我預設大家都看過我之前寫的病毒開發系列,
前面的VBScript跟Python的可以跳過,
但我建議至少要看過4~10那幾篇組語病毒,
而且都要能夠大概理解我在工三小。
由於我本身也不是什麼病毒專家,
很多東西對我來說也是第一次接觸,
因此我會需要時間學習與整合,
而更新頻率大概約1個月一篇,
算是另類的給自己學習與精進的壓力。
————————————————————
0x00 - 重返停屍間
正所謂:「以古鑑今,可以知興替。」
每個病毒,都有屬於他們的一段故事,
然而出於時代的進步、資安意識的覺醒,
因此漸漸的被時代的洪流所淘汰。
而分析前輩們的成敗主因與獨特的技巧,
可以說是每一個病毒初心者都會經歷的階段。
以 Alureon (TDL 3/4 rootkit) 為例,
他會在系統的”最底層”設置一堆hook,
(hook 的觀念會在講解記憶體常駐病毒時介紹
以有效攔截系統中的各種process。
創造者將其各個部件設計成”模組式”的形式,
並在感染目標電腦後,
會建立一個屬於自己的虛擬檔案系統(VFS)
並在其中完成建構(編譯?)自身病毒的主程式,
以達到超級顯著的AV的效果。
幾乎要等到感染流程的末期,
當電腦瀕臨死去之時,
才能夠明顯的看出其被TDL所感染。
而這種創意性的設計簡直是史無前例的,
只要願意去細讀TDL的分析報告,
你一定會被其製造者超凡的創意所震撼。
再舉一個神奇的國產病毒 - CIH 為例,
作者是臺灣大同工學院的陳盈豪。
該病毒的亮點是會掃描目標執行檔的剩餘空間,
並把自己分段塞到目標檔案的空隙之中。
或許聽起來好像不怎麼厲害,
但他的整體概念就是一個不會改變被寄生檔案大小的Parasitic Virus,
完全顛覆了以往對寄生病毒的認知與檢測方式。
而至於該病毒的開發目的是什麼呢?
據說只是為了證明市售AV軟體很盤、很爛,
僅此而已。
(大佬們的思維好像都有點….呃…異於常人?
然而,
想擔任一位優秀的死靈法師,
以把前輩的作品們起死回生以重新分析,
除了需要單身滿30年,
成為終★極★大★法★師之外。
還需要具備多種技巧與相關知識,
包含Reverse Engineering 與 de-obfuscation,
故沒有想像中的容易。
以下推薦幾個不錯的樣本網站(停屍間),
讓各位做為參考使用。
而日後會分析的電腦病毒,
也將多半出於此處。
————————————————————
0x01 - 死靈法師與他愉快的夥伴們
跟之前一樣,
我們會需要大量的使用Assembly跟C,
對相關基礎知識如果有障礙的話,
請記得找時間去熟悉他們。
還有請準備以下的軟體:
2. VMWare / VirtualBox (較推薦)
3. X64dbg
5. PEbear
7. 一個優秀的Code Editor (不推薦Vscode)
8. Dosbox
未來應該會用這些工具,
與各位一同探討Dos與Win98上的惡意軟體,
至於Windows XP與Windows 7的部分,
就等這個系列完結了再講。
如果有看過我之前文章的巴友,
應該會發現在選擇這次的Assembler上,
選用的是 Nasm 而非我所喜好的Tasm。
其中最大的原因,
便是Tasm 最多只支援32位元的程式,
支援 64bit 的 Masm 如今則是嚴重缺乏維護,
故”不太可能”寫出能在 Windows 運行的程式,
至於 Nasm 呢?
我只能說:
操作指南十分完善、支援Windows / *unix、
穩定的更新、有官方全套的 x64 說明文件。
————————————————————
0x02 - 世界病毒繽紛舞臺!feat. FreeDos
首先,在開始所有的實驗跟Coding之前,
我們需要設置一個適當且相容的環境,
專門用來做為病毒的收容所,
與測試用的場地。
然而在這裡,
我不得不提一下FreeDos與DosBox的差異:
首先,DosBox 不是一個完整的虛擬環境(VM),
它是一款設計用來遊玩復古遊戲的模擬器(Emulator),
因此並不具有隔離兩臺電腦間檔案的能力,
然而本身卻不支援NASM,
而且部分的 Dos Interupt 會無法正確執行。
需要在Windows或是Linux中將病毒編譯完成,
在將其丟到與 Dosbox 共享的資料夾中,
才能夠執行或是 Debug。
而 Freedos 則是一款完整的作業系統,
一款 open source 的 Ms-Dos 移植版本。
在用組合語言 coding 與 Debug 時的體驗,
會比使用 DosBox 更加更加的良好,
畢竟支援 NASM 以及其他的 Dos Interupt,
因此 coding 時靈活度因該會比 DosBox 好。
然而,其最大的問題,
便是很難進行虛擬機與宿主間的檔案交流,
裡面寫的程式拿不出來,外面寫的運不進去,
他既不支援usb,也不支援mount指令,
與虛擬機的共享的資料夾完全無法使用。
目前我唯一能想到的方式只有 FTP + Ngrok,
但真的…..超級…麻煩的說。
至於這兩個之間該如何做選擇,
就見仁見智啦,沒有一定的對錯與準則。
至於 FreeDos VM 的安裝方法有點奇葩,
因此我在這裡簡單的講解一下。
首先,
FreeDos 沒有官方的 Vmware 或 Vbox 版本。
因此需要下載官網的 iso 檔,
並將其設置為 VM 的開機檔案。
請下載LiveCD的版本,(其他版本都不相容
並在開機後完成一系列的選擇安裝到硬碟。
記得是安裝在 virtual disk 上,
而不是使用開機選項的 Live Environment Mode。
其中,安裝過程中會需要格式化虛擬磁碟,
請安心的讓他去格式化C槽並執行安裝。
等到完成後打入 fdimples 來到這個畫面:
只要你有Development的那個欄位,
就代表你的安裝過程是正確的,
之後,請到 Devp 的欄位中去安裝 NASM,
退出後請回到指令列去確認安裝是否有成功。
而以後VM開機時,
記得選擇用 Boot from Disk 來開機,
而不是預設的 Live environment Boot 選項。
————————————————————
0x03 - 超異域病毒連結 ★ RE:Dive
再開始這一切之前,
先提一下3個希望諸君要擁有的默契:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- [1.] 測試病毒前,請關掉Windows的病毒樣本提 交功能。
- [2.] 不要用 VirusTotal 測試病毒,他們會把你提交的檔案作為研究樣本,提交到資料庫建檔。而這種雞掰行為,會在幾秒之內毀了他人長時間投入開發的心血。
- [3.] 窩不知道各位的立場與各自的意識形態,但我希望諸君能夠盡可能的別讓文章中的原創原始碼外洩 (如果我未來有放的話)。因此未來的文章及任何沒放到Github上的原始碼,一律禁止轉載。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
為了不讓各位的巴友的大腦資訊量過多,
畢竟剛剛也噴了諸君一堆病毒開發的觀念,
因此現在就用一個老套的 com 覆寫病毒,
讓各位可以親自實作看看,
順便檢測自己的開發環境是否設置正確。
編譯指令:nasm -f bin -o virus.com virus.asm
運作原理跟上次的一模一樣,
因此就不再贅述其運作的原理與DTA結構。
而兩者之間最大的改動,
便是這次選用的Assembler是NASM,
並非Borland的TASM。
由於先前就有介紹過了,
因此這邊就不執行給各位看了。:-)
————————————————————
0x04 - Dos Debug 簡易教學
這個部分軟體上的選擇,
會依你之前選擇的開發環境(Freedos / Dosbox),
而有所不同。
1. Dosbox: (推薦AFD / TD)
- Advanced Fullscreen Debug (AFD):
Nasm 官方推薦的 Debugger,
畫面整體上頗為整潔、用起來也極為方便,
但由於操作簡單且容易理解,
因此想用的請自行閱讀官方的操作文件。
其中 Step 是指執行下一行的程式碼,
只要分段執行並配合上方的暫存器的內容,
便可以輕易找出出錯的原因。
- Turbo Debugger (TD):
我蠻喜歡的一款軟體,
使用滑鼠或鍵盤操控的圖像化Debugger,
想要的可以去我的 Github 下載TD的備份。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. Freedos (Dos 內建 Debug 指令):
由 Freedos 內建的指令,
很神奇、而且強大的跟鬼一樣。
以下是Debug指令所能做到的功能:
執行 debug program.com 的指令,
使用 p (proceed) 參數一行一行的執行程式,
如果想一次執行多行的程式,
可以用 p 2 代表連續執行兩行程式,
以此類推。
我們可以看到,
debug 指令也可以跟上面的 debugger 一樣,
可以列出各個暫存器的數值,
以利除錯的進行。
而最神奇的功能是,
可以在執行除錯的同時,
混合使用 d (dump) 參數倒出指定的記憶體,
來檢視是否有成功改變記憶體中的資訊。
舉例來說,
以上為 Dos 的 Interupt Vector Table (IVT),
而從裡面的數值我們可以看出,
Int 0 的位置為 07C5:1DCE 。
————————————————————
0x05 - 騷年,泥 484 也想上車?
審核標準:
但如果泥已經是我的好友,
而且平常就與我有互動的話,
直接私我一下就可以了,
我會直接讓你加入的。
但如果不是的話,
請回答以下4個問題,並寄「站內信」給我,
但如果你想要的話,你可以提供額外的資料,
來佐證你的回答。
1. 你所擅長(或正在學習)的技術?
2. 學習電腦技術的原因?
3. 特殊經歷(沒有的話就跳過這題)?
4. 簡短的闡述自己對暗網的看法。
理論上,兩天內我就會回覆你,
沒收到回覆就代表拒絕你的申請。
但是請別誤會,被拒絕不代表你能力不夠,
有可能只是我認為你不適合這個公會而已。
————————————————————
0x06 - 下集預告
Windows Internal 基礎