依照慣例,
先在前面塞一首我很喜歡的歌。
嗯….這週真的是發(fā)生了不少事呀,
俄羅斯跟烏克蘭開戰(zhàn),
還有我很喜歡的Vtuber被開除惹。
咪醬……我的咪醬啊……
這都是什麼啊我的咪醬 ??
哭啊,泥怎麼一言不合就爆掉了呢?(T ^ T)
——————— 以下正文 ———————
終於啊幹....終於!!.....
我終於寫出來啦!!!
超過160行的原創(chuàng)組合語言病毒誕生啦!! (^ ^)
(雖然Compile後不久就被Windows抓到惹….
這趟艱辛的過程,真的是痛苦外分啊,
畢竟網(wǎng)路上對於組合語言的Companion Virus的資料實在是太稀少了,
加上對Assembly的資料也真的是狗幹少,
因此我只能靠著僅有的描述與定義,
試著去摸索、建構(gòu)那個那個傳說中的病毒。
光是為了解決如何再次設(shè)定變數(shù),
(我想改變它的值)
就花了我快五天左右。
或許,
你可能認(rèn)為"重新指定變數(shù)"聽起來好像不難(?
但要賦予的資料是存放在記憶體之中,
而且其長度為未知的,
導(dǎo)致我根本無從下手。
爬了好幾天的stack overflow,
但也都一無所獲。
UMU !! 但★是★呢
我想了又想,想了又想,
突然,我想出了一種奇葩的做法:
『既然無法提取記憶體中的數(shù)值,
將其丟到變數(shù)之中?!?/font>
『那我他媽的直接覆寫記憶體不就好啦 !??』
......
......
......
......
哭啊,我他媽的簡直是天才。(′▽`)
就讓我來帶領(lǐng)諸君看看本次code的精華,
虛鹿的記憶體暴★力★修★改★術(shù):
把特定記憶體位置(DTA)中的值 (新變數(shù)),
與舊變數(shù)的的記憶體位置(舊變數(shù)),
一個字、一個字讀取,
一個字、一個字覆寫舊變數(shù),
直到遇到標(biāo)示檔案名結(jié)尾的 dot.extension,
(cmp byte PTR [bp+di], “.”)
否則就一直執(zhí)行這個loop。
(jnz markup)
直接用新的值,
去覆寫原本位於記憶體中的變數(shù),
過程中用di去作為計算字串長度的暫存器,
每跑一次,di 都會加1 (inc di),
這樣就能有效追蹤其真正長度啦!
最後,手動為其加上Terminate Zero,
來標(biāo)示新字串的結(jié)尾。
總之,
由於這次的code真的太長了,
所以我這次只先向諸君講解伴隨病毒的定義,
並演示一下感染過程。
[#] Companion Virus定義:
不易偵測,不會修改到被感染的檔案,
感染檔案後,會更改原檔案的名稱,
並額外建立一個"伴隨檔",
並將此伴隨檔命名為原程式的名稱。
當(dāng)伴隨檔被執(zhí)行時,
會呼叫原檔案(已被改名),並執(zhí)行。
在執(zhí)行後,會將控制權(quán)返還給病毒主體,
並接著執(zhí)行後續(xù)的感染過程。
這張圖是執(zhí)行前的資料夾模樣:
Miraix.com 是病毒的伴隨檔,
其所伴隨的宿主為 Hello.com 。
App.com 為一個不相干的檔案,
用來作為Miraix的標(biāo)靶。
在感染前,Hello.com 執(zhí)行後,
會列印出 "Hey!",
而 App.com 執(zhí)行之後,
會列印出 "Heyyyyyyy" 的字樣。
接著,快樂地把 Miraix 執(zhí)行下去,
他先呼叫了 Hello.com 印出了 ”Hey!”。
接著,控制權(quán)返還病毒主體,
將 App.com 改名為 Xpp.com 後,
(為了方便觀察,所以我沒有隱藏原檔)
Miraix 建立了一個名為 App.com 的伴隨檔。
若仔細(xì)觀察Byte大小的差異的話,
應(yīng)該能看出App.com不是原本的App.com (?)
執(zhí)行看看App.com,
你就會發(fā)現(xiàn)就跟執(zhí)行Miraix時一樣,
宿主 Xpp.com(原名App.com)被成功呼叫,
列印出了"Heyyyyyyy"。
看似毫無異狀,對吧?
然而,此時,
它已經(jīng)在尋找下一任宿主了,
並悄悄的準(zhǔn)備為其建立對應(yīng)的伴隨檔了…..
好啦,今天就先聊到這邊吧,
有興趣的各位可以試著去寫寫看這種病毒,
畢竟我從組合語言零基礎(chǔ),
到有能力獨立設(shè)計、並完成這款病毒,
也只花了約一個月左右,
我相信各位應(yīng)該也都能做到的呦~
(很多的學(xué)習(xí)的資料都放在這系列的文章中
畢竟其中的核心程式碼就是那段記憶體覆寫,
我已經(jīng)研究完了,並給了各位原始碼做參考。
我已經(jīng)研究完了,並給了各位原始碼做參考。
只要稍稍去跟上次的Overwrite病毒做結(jié)合,
各位應(yīng)該也能寫的出來的說~(^ ^)
就當(dāng)作是給諸君的一項有趣的挑戰(zhàn)吧(?
關(guān)於這次Miraix的原始碼,
設(shè)計構(gòu)想與部分暫存器操作上的解說,
我就下次再來公布吧,
下次見啦~\(≧▽≦)/