LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

免殺技術(shù)一套(免殺方法大集結(jié))

admin
2023年2月27日 17:32 本文熱度 2194

00. 概述

什么是免殺?來自百科的注解:

免殺,也就是反病毒(AntiVirus)與反間諜(AntiSpyware)的對立面,英文為Anti-AntiVirus(簡寫Virus AV),逐字翻譯為“反-反病毒”,翻譯為“反殺毒技術(shù)”。

有本比較有名的書,想詳細(xì)學(xué)習(xí)的同學(xué)可以去看看。《黑客免殺攻防》

其實(shí)我大概好像只看過目錄…( ╯□╰ )

下面我介紹的是自己實(shí)踐的一些方法,有沒有效果,試試就知道了。

01. 簡介

免殺大概可以分為兩種情況:

  1. 二進(jìn)制的免殺(無源碼),只能通過通過修改asm代碼/二進(jìn)制數(shù)據(jù)/其他數(shù)據(jù)來完成免殺。

  2. 有源碼的免殺,可以通過修改源代碼來完成免殺,也可以結(jié)合二進(jìn)制免殺的技術(shù)。

免殺也可以分為這兩種情況:

  1. 靜態(tài)文件免殺,被殺毒軟件病毒庫/云查殺了,也就是文件特征碼在病毒庫了。免殺方式可能是上面的兩種方式,看情況。

  2. 動(dòng)態(tài)行為免殺,運(yùn)行中執(zhí)行的某些行為被殺毒軟件攔截報(bào)讀。行為免殺如果沒有源碼就不是很好搞了。

下面就靜態(tài)和動(dòng)態(tài)免殺來詳細(xì)說說免殺的技術(shù)。

02. 靜態(tài)免殺

對于靜態(tài)免殺,針對的是殺毒軟件的靜態(tài)文件掃描,云查(病毒庫)殺。

殺毒是提取文件一段特征碼來識別病毒文件。

能識別一個(gè)程序是一個(gè)病毒的一段不大于64字節(jié)的特征串

那殺毒軟件是怎么提取文件特征碼的?

如果我們知道了一個(gè)文件是病毒,那么通過md5肯定可以判斷一個(gè)就是這個(gè)病毒文件,那如果該病毒文件做了小小變動(dòng)呢,直接md5肯定是不行了,那殺毒軟件是怎么做的呢?這里有個(gè)叫做模糊哈希(Fuzzy Hashing)算法的東西。

模糊哈希算法又叫基于內(nèi)容分割的分片分片哈希算法(context triggered piecewise hashing, CTPH),主要用于文件的相似性比較。

大致就可以理解為,不要把一個(gè)文件的所有內(nèi)容都拿來計(jì)算hash,而通過分片,取出部分重要(不易改變)的內(nèi)容進(jìn)行hash計(jì)算,這樣就能達(dá)到通過一個(gè)特征碼找到類似的病毒變種。

關(guān)于模糊哈希更加詳細(xì)的內(nèi)容可以查看文章后面的參考文章,這里不再詳述。

具體殺毒軟件是不是通過這個(gè)算法來計(jì)算特征碼的,我也不能完全肯定(純猜測加網(wǎng)上一點(diǎn)點(diǎn)信息),但是根據(jù)免殺的經(jīng)驗(yàn)可以總結(jié)出幾點(diǎn):

  1. 特征碼會(huì)有多個(gè)串組合(減少誤報(bào))

  2. 代碼數(shù)據(jù)(肯定有)

  3. 會(huì)解析PE,檢查附加文件數(shù)據(jù)、PE文件的資源等等

1. 怎么找特征碼

工具查找

常見的特征碼定位工具有CCL、MYCCL。工具大致原理就是分割文件,某些分割部分填入數(shù)據(jù)(0),如果掃描該部分不報(bào)警,則特征碼在這個(gè)部分。如此反復(fù),直到找到很短的某一段內(nèi)容。不同工具之前局別是使用的分割算法不同,查找特征碼的效果不同。

目前比較常有名氣的特征碼定位器主要有CCL與MYCCL,他們都采用文件分塊定位的辦法,定位效果帶有運(yùn)氣成份,且可能每次定位出的位置都不盡相同,這個(gè)免殺帶來了困難。

后來出來了一款新的特征碼定位軟件VirTest。下面是作者自己的介紹:

我們可以這樣假設(shè)報(bào)毒過程,如果檢測文件是PE,如果在CODE位置存在 標(biāo)志A,在DATA位置存在標(biāo)志B,在資源位置存在標(biāo)志C,同時(shí)滿足這個(gè)3個(gè)條件,那么殺軟就會(huì)報(bào)毒,VIRTEST工作原理就是要找到引起報(bào)毒最后一個(gè)標(biāo)志,也就是假設(shè)中的標(biāo)志C。

因此VIRTEST采用2分排除法,測試標(biāo)志C所在文件中的位置,由于被殺的文件可能存在多個(gè) 類似于ABC這樣的連鎖條件,所以我們必須要通過一種排除機(jī)制,先要找最靠近文件前部的連鎖條件,排除掉文件尾部數(shù)據(jù),當(dāng)找到第一個(gè)連鎖條件后,抹掉引標(biāo)志C,再恢復(fù)尾部數(shù)據(jù)

然后繼續(xù)測試另外的連鎖條件,直到找到最后一個(gè)連鎖條件,抹掉后,整個(gè)文件免殺了,則說明特征代碼被定為完畢了,所以VIRTEST絕對可以精確的定位出所有的復(fù)合特征。這比文件分塊定位法先進(jìn)得多,更為科學(xué)

工具查找肯定是針對二進(jìn)制文件(有源碼的也編譯后在檢查)。

具體用過MYCCL(使用方法自行查找),確實(shí)比手工分割文件定位方便,也可以找到某些文件的特征碼,但是有些時(shí)候可能會(huì)出現(xiàn)非常多非常多…的被殺文件分割,然后…崩潰了。

后來也用了virtest,感覺作者說的挺有道理,應(yīng)該挺好用吧。然后試了試,確實(shí)感覺比MYCCL高大上多了,也可以定位到特征碼,但是tmd改了之后怎么還是報(bào)呢,反正你可能會(huì)折騰很久…

手工查找

這里說的是針對有源碼的(二進(jìn)制就別想手工了…),方法非常簡單。

  1. mian中屏蔽所有代碼,編譯,掃描。不報(bào)的話繼續(xù)2,如果依然報(bào)毒,去5。

  2. 放開一層(可以多層、二分也可以)函數(shù),編譯,掃描。不報(bào)的話,重復(fù)2。直到定位到某個(gè)函數(shù)或者多個(gè)函數(shù),進(jìn)入3。

  3. 在函數(shù)內(nèi)部屏蔽部分代碼(二分),編譯,掃描。不報(bào),重復(fù)2。

  4. 直到定位某段代碼(無自定義內(nèi)部調(diào)用),特征碼在此。

  5. 是不是有附加數(shù)據(jù),或者資源存儲的文件。有,單獨(dú)檢查該文件或者數(shù)據(jù),方法從1開始。如果沒有,那去找找PE頭吧。

大致流程:

1. sub1 //未報(bào)2. sub1 sub2 //未報(bào)3. sub1 sub2 sub3 //報(bào)4. sub1 sub2 sub3(sub31) //未報(bào)5. sub1 sub2 sub3(sub31 sub32) //報(bào)6. sub1 sub2 sub3(sub31 sub32(sub321)) //報(bào)...直到找到某API調(diào)用,或者邏輯代碼(沒有自定義函數(shù)調(diào)用)

此方法,雖然笨,但是定位特征碼不會(huì)很慢,挺準(zhǔn)確。

其他

別找了,直接盲免殺吧(后面具體看,有效)

2. 怎么免殺?

前面已經(jīng)找到特征碼了,怎么免殺呢?

其實(shí)前面已經(jīng)說到了,找到特征碼之后,只要改變這個(gè)特征碼值得話就免殺成功。如果不需要軟件正常運(yùn)行,直接填零得了…開玩笑,這怎么可能。所以修改特征碼還得保證軟件正常功能。所以也是有講究的。

常用的修改工具有,OD,C32ASM,UE,010Editor等等。

手工修改

非源碼

1. 數(shù)據(jù)

如果特征碼定位到數(shù)據(jù)(通過IDA/OD等確認(rèn)),其實(shí)不好修改,稍微不慎就會(huì)導(dǎo)致程序不能運(yùn)行,或者影響程序運(yùn)行流程或結(jié)果。

  • 字符串,如果不影響程序邏輯,可以替換大小寫;如果無關(guān)緊要的數(shù)據(jù),隨意替換;等等,看情況而定。

  • 整數(shù),如果不影響結(jié)果,替換值,清零等等操作。

  • 地址,基本應(yīng)該不能修改,具體看情況。

  • PE頭數(shù)據(jù),根據(jù)PE結(jié)構(gòu)具體來看,無用數(shù)據(jù)清零或修改,有用數(shù)據(jù)看情況修改。

  • 最后,終極修改方法,找到訪問數(shù)據(jù)的代碼,直接修改代碼訪問數(shù)據(jù)的地址,數(shù)據(jù)也可以放到其他地址了,其實(shí)就如同修改源碼一樣修改,肯定沒有修改源碼那么容易(見后)。

反正特征碼定位到數(shù)據(jù)位置不容易修改(可以再試試后面的盲免殺)。

2. 代碼

如果特征碼定位到代碼(也通過IDA/OD等確認(rèn)),在不改變程序功能基礎(chǔ)上,應(yīng)用各種方法修改。

  • 等價(jià)替換匯編代碼,如mov eax,0可以換成xor eax,eax,直接結(jié)果相同,二進(jìn)制代碼不同。

  • 交換代碼順序,在不影響邏輯的情況下。

  • 代碼塊移位,將代碼塊移動(dòng)不用的內(nèi)存位置,通過加入jmp addr跳過去執(zhí)行,addr是新的代碼塊地址。

源碼

在有源碼的情況下,修改的方式就更靈活了,更簡單了。

  • 如果特征碼是數(shù)據(jù),那么修改數(shù)據(jù)位置,訪問數(shù)據(jù)的代碼位置等(思想類比非源碼方式)。

  • 加花指令,這是最有效也是最常用的方式,要點(diǎn)在于如何加話指令。

  1. 加數(shù)據(jù)計(jì)算代碼,加減乘除各類組合。

  2. 加字符串操作代碼,增加、刪除、查找、替換等。

  3. 加多層跳轉(zhuǎn),跳轉(zhuǎn)間加無效指令(不會(huì)執(zhí)行的)。

  4. 加貌似有效的API調(diào)用,如LoadLibrary+GetProcAddr+API等。

  5. 等等。

工具免殺(盲免殺)

在沒找到有效的特征碼,或者不好修改的時(shí)候,可以試試這種方式。

資源操作

1. 加資源

使用ResHacker對文件進(jìn)行資源操作,找來多個(gè)正常軟件,將它們的資源加入到自己軟件,如圖片,版本信息,對話框等。

2. 替換資源

使用ResHacker替換無用的資源(Version等)。

3. 加簽名

使用簽名偽造工具,將正常軟件的簽名信息加入到自己軟件中。

幾種方式可以交替重復(fù)多次進(jìn)行組合使用。

PE操作

1. PE優(yōu)化

使用PE優(yōu)化工具對文件進(jìn)行優(yōu)化,刪除0,PE頭優(yōu)化,附加數(shù)據(jù)等。

2. 增加節(jié)

增加節(jié)數(shù)據(jù),隨意加入無效數(shù)據(jù)。

加殼

可以將加殼簡單理解為:解密器/解壓器+加密器/壓縮器(原始代碼)。

通過加密器/壓縮器將原始代碼進(jìn)行加密壓縮,讓其特征碼變化隱藏,然后組裝上解密器/解壓器到文件中,運(yùn)行是先運(yùn)行解密/解壓器,將加密壓縮內(nèi)容解密解壓,然后繼續(xù)運(yùn)行原始代碼。

1. 加冷門殼

殼也有特征,知名殼都已經(jīng)被分析的非常多了,殺軟基本都能查這類殼,或者自動(dòng)脫殼,然后進(jìn)行查殺。

所以加冷門殼,殼特征未被分析,不能自動(dòng)脫殼,可以更好隱藏原始代碼,得到免殺效果。

2. 加殼改殼

將常用殼進(jìn)行修改,讓殼特征變化,也可以是殺軟失效。

比如修改入口,區(qū)段信息修改,入口代碼移位。

可以類比為免殺殼,上面介紹的方法都可以使用。

03. 行為動(dòng)態(tài)免殺

殺毒軟件現(xiàn)在都會(huì)有主防的功能,對惡意行為進(jìn)行攔截提示。

比如這些行為:

  1. 注冊表操作,添加啟動(dòng)項(xiàng),添加服務(wù)

  2. 文件寫入、讀系統(tǒng)文件、刪除文件,移動(dòng)文件

  3. 殺進(jìn)程,創(chuàng)建進(jìn)程

  4. 注入、劫持等

行為攔截原理

說白了,惡意行為都是通過API調(diào)用來完成的,可能是一個(gè)API,可能是多個(gè)APi組合。微信搜索公眾號:Linux技術(shù)迷,回復(fù):linux 領(lǐng)取資料 。

殺軟通過技術(shù)手段攔截這些API調(diào)用,通過策略來判斷是否屬于惡意行為。

關(guān)鍵點(diǎn):

  1. API

  2. 策略(順序,調(diào)用源,參數(shù)等等)

所以后面的方法就是針對這兩點(diǎn)做的工作。

如何進(jìn)行行為免殺呢?

下面介紹的方式對非源碼、源碼都有效,但是非源碼修改起來非常非常麻煩…

1. 替換api

使用相同功能的API進(jìn)行替換,殺軟不可能攔截了所有API,所以這種方式還是有效的。比如MoveFileEx替換MoveFile。

2. 未導(dǎo)出api

尋找相同功能的未導(dǎo)出API進(jìn)行替換,殺軟攔截一般是導(dǎo)出API,或者底層調(diào)用,尋找未導(dǎo)出API有一定效果。

尋找方法,通過分析目標(biāo)API內(nèi)部調(diào)用,找到內(nèi)部一個(gè)或多個(gè)未導(dǎo)出API,來完成相同功能。

3. 重寫api

完全重寫系統(tǒng)API功能(通過逆向),實(shí)現(xiàn)自己的對應(yīng)功能API,對于ring3的行為攔截非常有效。比如實(shí)現(xiàn)MoveFile等。

4. api+5

ring3的API攔截通過是掛鉤API頭幾個(gè)字節(jié)內(nèi)容,然后進(jìn)入殺軟自己函數(shù)進(jìn)行參數(shù)檢查之類的。

那么如果調(diào)用API時(shí),跳過頭部幾字節(jié),就可以避開這種攔截方式。

__API:1 push ebp;2 mov ebp, esp;3 mov edi, edi;4 ...

調(diào)用時(shí),不適用1地址,而使用4地址,然后自己函數(shù)內(nèi)部還原跳過幾字節(jié)的調(diào)用。

__API_MY:push ebp;mov ebp, esp;mov edi, edi;call 4

5. 底層api

該方法類似于2和3,殺軟攔截API可能更加高層(語義更清楚),那就可以找更底層API進(jìn)行調(diào)用,繞過攔截,比如使用NT函數(shù)。

或者通過DeviceIoControl調(diào)用驅(qū)動(dòng)功能來完成API功能。

模擬系統(tǒng)調(diào)用。

6. 合理替換調(diào)用順序

有時(shí)攔截行為是通過多個(gè)API組合來完成的,所以合理替換順序,繞過殺軟攔截策略,也可以繞過改行為攔截。

比如,先創(chuàng)建服務(wù),再將服務(wù)對應(yīng)文件拷貝過去。

7. 繞過調(diào)用源

通過調(diào)用其它進(jìn)行功能來完成API的功能。比較經(jīng)典的如,通過rundll32.exe來完成dll加載,通過COM來操作文件等等。

總結(jié)

方法大概就總結(jié)到這,要更好的完成免殺,需要各種方式進(jìn)行合理靈活組合變化,或者挖掘更多的方法。

注意/技巧

  1. 非源碼修改時(shí),通過OD能夠更好的完成,配合IDA進(jìn)行觀察,具體參考OD/IDA使用教程。

  2. 源碼免殺加花,要靈活多變,不拘于形式。

  3. 行為免殺多嘗試,猜出殺軟攔截策略,能夠更有效的找到繞過方式。

道高一尺,魔高一丈

各路大神有更多的技巧和方式,請不吝賜教,相互交流。

我們不做壞事,但是可以了解做壞事的手段,更好的破壞防御這些手段。


該文章在 2023/2/27 17:32:01 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
五月天激情视频A级在线版 中文字幕国产在线观看 | 五月丁香综合激情六月久久 | 日韩免费一区二三区 | 网友自拍区在线视频精品 | 自拍视频在线看伦 | 综合久久久久久久 |