網(wǎng)安 | 免殺原理與代碼實(shí)現(xiàn)
一、什么是免殺
1、免殺的概念
免殺技術(shù)全稱為反殺毒技術(shù)(Anti Anti- Virus),簡(jiǎn)稱“免殺”。
它指的是一種能使病毒木馬免于被殺毒軟件查殺的技術(shù)。由于免殺技術(shù)的涉獵面非常廣,包含反匯編、逆向工程、系統(tǒng)漏洞等技術(shù),所以難度比較高。
2、殺軟的原理
病毒查殺一般可以分為三種方式:靜態(tài)查殺、行為查殺和云查殺
(1)靜態(tài)查殺:一般根據(jù)特征碼識(shí)別,然后對(duì)文件進(jìn)行特征匹配。
(2)行為查殺(動(dòng)態(tài)查殺):主要是對(duì)其產(chǎn)生的行為進(jìn)行檢測(cè)。
(3)云查殺:提取出文件的特征和上傳云端,云端進(jìn)行檢測(cè)后返回客戶端,對(duì)對(duì)應(yīng)病毒進(jìn)行查殺。
3、殺軟查殺流程
對(duì)于我們的shellcode要實(shí)現(xiàn)免殺,下圖是基本的測(cè)試流程圖

4、免殺的方法
(1)對(duì)ShellCode進(jìn)行加密處理,如異或、轉(zhuǎn)置、AES加密、Base64編碼、多輪加密等。
(2)對(duì)加載器代碼進(jìn)行加密或編碼處理,使其靜態(tài)特征不再明顯。
(3)分離免殺,將ShellCode和加載器代碼放置于網(wǎng)絡(luò)上,通過下載的方式進(jìn)行加載,可進(jìn)一步免除靜態(tài)特征。
(4)通過進(jìn)程注入或借助傀儡進(jìn)程進(jìn)行加載和運(yùn)行。
(5)通過加殼的方式對(duì)木馬進(jìn)行混淆,進(jìn)而繞過殺軟。
通過靜態(tài)特征繞過殺軟檢測(cè)相對(duì)比較容易,但是要繞過沙箱或動(dòng)態(tài)檢測(cè),則非常難。
二、利用異或和變形加密ShellCode
1、異或加密
異或運(yùn)算是最為簡(jiǎn)單的加密方式,異或運(yùn)算根據(jù)二進(jìn)制位進(jìn)行按位運(yùn)算,如果對(duì)應(yīng)位相同,則為0,不同則為1。并且同時(shí)遵守以下規(guī)則:如果 a ^ b = c,則可以將 b 視為秘鑰,c 視為加密字符串,則 b ^ c = a,可根據(jù)秘鑰 b 和 密文 c,解密出 a 的值。
2、字符串反轉(zhuǎn)
在Python中,對(duì)一個(gè)字符串進(jìn)行反轉(zhuǎn),使用str[::-1]即可。
3、將字節(jié)類型轉(zhuǎn)換為字符串
由于Python的ShellCode為b''的字節(jié)類型(也可以視為二進(jìn)制類型),而要進(jìn)行加密或反轉(zhuǎn)處理,只能針對(duì)字符串進(jìn)行處理,所以還需要對(duì)將字節(jié)類型數(shù)據(jù)轉(zhuǎn)換為字符串。可以利用Python內(nèi)置的binascii模塊進(jìn)行處理。
5、對(duì)異或輸出結(jié)果進(jìn)行變形
此類變形可以有多種方式,并不局限于上述變形,也可以任意定義,或者將其輸出為Base64編碼。
6、完整ShellCode的加密和變形過程
7、最終的木馬生成代碼:
三、 對(duì)加載器代碼進(jìn)行加密和編碼
1、將加載器代碼進(jìn)行Base64編碼
2、將Bae64編碼進(jìn)行AES加密
四、對(duì)ShellCode和加載器進(jìn)行解密運(yùn)行
經(jīng)實(shí)驗(yàn),上述木馬可過火絨和360的靜態(tài)和動(dòng)態(tài)特征,木馬可以正常上線。


在VirusTotal上的檢測(cè)結(jié)果:

五、利用Python的Requests進(jìn)行分離免殺
1、將加密和變形后的ShellCode通過網(wǎng)絡(luò)下載
2、將加密和編碼后的加載器代碼通過網(wǎng)絡(luò)下載
3、將下載的代碼進(jìn)行解密還原并運(yùn)行