[原創]免殺技術有一套(免殺方法大集結)(Anti-AntiVirus)
00. 概述
什麼是免殺?來自百科的註解:
免殺,也就是反病毒(AntiVirus)與反間諜(AntiSpyware)的對立面,英文為Anti-AntiVirus(簡寫Virus AV),逐字翻譯為“反-反病毒”,翻譯為“反防毒技術”。
有本比較有名的書,想詳細學習的同學可以去看看。《駭客免殺攻防》
其實我大概好像只看過目錄...( ╯□╰ )
下面我介紹的是自己實踐的一些方法,有沒有效果,試試就知道了。
01. 簡介
免殺大概可以分為兩種情況:
- 二進位制的免殺(無原始碼),只能透過透過修改asm程式碼/二進位制資料/其他資料來完成免殺。
- 有原始碼的免殺,可以透過修改原始碼來完成免殺,也可以結合二進位制免殺的技術。
免殺也可以分為這兩種情況:
- 靜態檔案免殺,被防毒軟體病毒庫/雲查殺了,也就是檔案特徵碼在病毒庫了。免殺方式可能是上面的兩種方式,看情況。
- 動態行為免殺,執行中執行的某些行為被防毒軟體攔截報讀。行為免殺如果沒有原始碼就不是很好搞了。
下面就靜態和動態免殺來詳細說說免殺的技術。
02. 靜態免殺
對於靜態免殺,針對的是防毒軟體的靜態檔案掃描,雲查(病毒庫)殺。
防毒是提取檔案一段特徵碼來識別病毒檔案。
能識別一個程式是一個病毒的一段不大於64位元組的特徵串
那防毒軟體是怎麼提取檔案特徵碼的?
如果我們知道了一個檔案是病毒,那麼透過md5肯定可以判斷一個就是這個病毒檔案,那如果該病毒檔案做了小小變動呢,直接md5肯定是不行了,那防毒軟體是怎麼做的呢?這裡有個叫做模糊雜湊(Fuzzy Hashing
)演算法的東西。
模糊雜湊演算法又叫基於內容分割的分片分片雜湊演算法(context triggered piecewise hashing, CTPH),主要用於檔案的相似性比較。
大致就可以理解為,不要把一個檔案的所有內容都拿來計算hash,而透過分片,取出部分重要(不易改變)的內容進行hash計算,這樣就能達到透過一個特徵碼找到類似的病毒變種。
關於模糊雜湊更加詳細的內容可以檢視文章後面的參考文章,這裡不再詳述。
具體防毒軟體是不是透過這個演算法來計算特徵碼的,我也不能完全肯定(純猜測加網上一點點資訊),但是根據免殺的經驗可以總結出幾點:
- 特徵碼會有多個串組合(減少誤報)
- 程式碼資料(肯定有)
- 會解析PE,檢查附加檔案資料、PE檔案的資源等等
1. 怎麼找特徵碼
工具查詢
常見的特徵碼定位工具有CCL、MYCCL。工具大致原理就是分割檔案,某些分割部分填入資料(0),如果掃描該部分不報警,則特徵碼在這個部分。如此反覆,直到找到很短的某一段內容。不同工具之前局別是使用的分割演算法不同,查詢特徵碼的效果不同。
目前比較常有名氣的特徵碼定位器主要有CCL與MYCCL,他們都採用檔案分塊定位的辦法,定位效果帶有運氣成份,且可能每次定位出的位置都不盡相同,這個免殺帶來了困難。
後來出來了一款新的特徵碼定位軟體VirTest
。下面是作者自己的介紹:
我們可以這樣假設報毒過程,如果檢測檔案是PE,如果在CODE位置存在 標誌A,在DATA位置存在標誌B,在資源位置存在標誌C,同時滿足這個3個條件,那麼殺軟就會報毒,VIRTEST工作原理就是要找到引起報毒最後一個標誌,也就是假設中的標誌C。
因此VIRTEST採用2分排除法,測試標誌C所在檔案中的位置,由於被殺的檔案可能存在多個 類似於ABC這樣的連鎖條件,所以我們必須要透過一種排除機制,先要找最靠近檔案前部的連鎖條件,排除掉檔案尾部資料,當找到第一個連鎖條件後,抹掉引標誌C,再恢復尾部資料,
然後繼續測試另外的連鎖條件,直到找到最後一個連鎖條件,抹掉後,整個檔案免殺了,則說明特徵程式碼被定為完畢了,所以VIRTEST絕對可以精確的定位出所有的複合特徵。這比檔案分塊定位法先進得多,更為科學。
工具查詢肯定是針對二進位制檔案(有原始碼的也編譯後在檢查)。
具體用過MYCCL(使用方法自行查詢),確實比手工分割檔案定位方便,也可以找到某些檔案的特徵碼,但是有些時候可能會出現非常多非常多...的被殺檔案分割,然後...崩潰了。
後來也用了virtest,感覺作者說的挺有道理,應該挺好用吧。然後試了試,確實感覺比MYCCL高大上多了,也可以定位到特徵碼,但是tmd改了之後怎麼還是報呢,反正你可能會折騰很久...
手工查詢
這裡說的是針對有原始碼的(二進位制就別想手工了...),方法非常簡單。
- mian中遮蔽所有程式碼,編譯,掃描。不報的話繼續2,如果依然報毒,去5。
- 放開一層(可以多層、二分也可以)函式,編譯,掃描。不報的話,重複2。直到定位到某個函式或者多個函式,進入3。
- 在函式內部遮蔽部分程式碼(二分),編譯,掃描。不報,重複2。
- 直到定位某段程式碼(無自定義內部呼叫),特徵碼在此。
- 是不是有附加資料,或者資源儲存的檔案。有,單獨檢查該檔案或者資料,方法從1開始。如果沒有,那去找找PE頭吧。
大致流程:
1. sub1 //未報 2. sub1 sub2 //未報 3. sub1 sub2 sub3 //報 4. sub1 sub2 sub3(sub31) //未報 5. sub1 sub2 sub3(sub31 sub32) //報 6. sub1 sub2 sub3(sub31 sub32(sub321)) //報 ... 直到找到某API呼叫,或者邏輯程式碼(沒有自定義函式呼叫)
此方法,雖然笨,但是定位特徵碼不會很慢,挺準確。
其他
別找了,直接盲免殺吧(後面具體看,有效)
2. 怎麼免殺?
前面已經找到特徵碼了,怎麼免殺呢?
其實前面已經說到了,找到特徵碼之後,只要改變這個特徵碼值得話就免殺成功。如果不需要軟體正常執行,直接填零得了...開玩笑,這怎麼可能。所以修改特徵碼還得保證軟體正常功能。所以也是有講究的。
常用的修改工具有,OD,C32ASM,UE,010Editor等等。
手工修改
非原始碼
1. 資料
如果特徵碼定位到資料(透過IDA/OD等確認),其實不好修改,稍微不慎就會導致程式不能執行,或者影響程式執行流程或結果。
- 字串,如果不影響程式邏輯,可以替換大小寫;如果無關緊要的資料,隨意替換;等等,看情況而定。
- 整數,如果不影響結果,替換值,清零等等操作。
- 地址,基本應該不能修改,具體看情況。
- PE頭資料,根據PE結構具體來看,無用資料清零或修改,有用資料看情況修改。
- 最後,終極修改方法,找到訪問資料的程式碼,直接修改程式碼訪問資料的地址,資料也可以放到其他地址了,其實就如同修改原始碼一樣修改,肯定沒有修改原始碼那麼容易(見後)。
反正特徵碼定位到資料位置不容易修改(可以再試試後面的盲免殺)。
2. 程式碼
如果特徵碼定位到程式碼(也透過IDA/OD等確認),在不改變程式功能基礎上,應用各種方法修改。
- 等價替換匯編程式碼,如mov eax,0可以換成xor eax,eax,直接結果相同,二進位制程式碼不同。
- 交換程式碼順序,在不影響邏輯的情況下。
- 程式碼塊移位,將程式碼塊移動不用的記憶體位置,透過加入jmp addr跳過去執行,addr是新的程式碼塊地址。
原始碼
在有原始碼的情況下,修改的方式就更靈活了,更簡單了。
如果特徵碼是資料,那麼修改資料位置,訪問資料的程式碼位置等(思想類比非原始碼方式)。
加花指令,這是最有效也是最常用的方式,要點在於如何加話指令。
- 加資料計算程式碼,加減乘除各類組合。
- 加字串操作程式碼,增加、刪除、查詢、替換等。
- 加多層跳轉,跳轉間加無效指令(不會執行的)。
- 加貌似有效的API呼叫,如LoadLibrary+GetProcAddr+API等。
- 等等。
工具免殺(盲免殺)
在沒找到有效的特徵碼,或者不好修改的時候,可以試試這種方式。
資源操作
1. 加資源
使用ResHacker對檔案進行資源操作,找來多個正常軟體,將它們的資源加入到自己軟體,如圖片,版本資訊,對話方塊等。
2. 替換資源
使用ResHacker替換無用的資源(Version等)。
3. 加簽名
使用簽名偽造工具,將正常軟體的簽名資訊加入到自己軟體中。
幾種方式可以交替重複多次進行組合使用。
PE操作
1. PE最佳化
使用PE最佳化工具對檔案進行最佳化,刪除0,PE頭最佳化,附加資料等。
2. 增加節
增加節資料,隨意加入無效資料。
加殼
可以將加殼簡單理解為:解密器/解壓器+加密器/壓縮器(原始程式碼)。
透過加密器/壓縮器將原始程式碼進行加密壓縮,讓其特徵碼變化隱藏,然後組裝上解密器/解壓器到檔案中,執行是先執行解密/解壓器,將加密壓縮內容解密解壓,然後繼續執行原始程式碼。
1. 加冷門殼
殼也有特徵,知名殼都已經被分析的非常多了,殺軟基本都能查這類殼,或者自動脫殼,然後進行查殺。
所以加冷門殼,殼特徵未被分析,不能自動脫殼,可以更好隱藏原始程式碼,得到免殺效果。
2. 加殼改殼
將常用殼進行修改,讓殼特徵變化,也可以是殺軟失效。
比如修改入口,區段資訊修改,入口程式碼移位。
可以類比為免殺殼,上面介紹的方法都可以使用。
03. 行為動態免殺
防毒軟體現在都會有主防的功能,對惡意行為進行攔截提示。
比如這些行為:
- 登錄檔操作,新增啟動項,新增服務
- 檔案寫入、讀系統檔案、刪除檔案,移動檔案
- 殺程式,建立程式
- 注入、劫持等
行為攔截原理
說白了,惡意行為都是透過API呼叫來完成的,可能是一個API,可能是多個APi組合。
殺軟透過技術手段攔截這些API呼叫,透過策略來判斷是否屬於惡意行為。
關鍵點:
- API
- 策略(順序,呼叫源,引數等等)
所以後面的方法就是針對這兩點做的工作。
如何進行行為免殺呢?
下面介紹的方式對非原始碼、原始碼都有效,但是非原始碼修改起來非常非常麻煩...
1. 替換api
使用相同功能的API進行替換,殺軟不可能攔截了所有API,所以這種方式還是有效的。比如MoveFileEx替換MoveFile。
2. 未匯出api
尋找相同功能的未匯出API進行替換,殺軟攔截一般是匯出API,或者底層呼叫,尋找未匯出API有一定效果。
尋找方法,透過分析目標API內部呼叫,找到內部一個或多個未匯出API,來完成相同功能。
3. 重寫api
完全重寫系統API功能(透過逆向),實現自己的對應功能API,對於ring3的行為攔截非常有效。比如實現MoveFile等。
4. api+5
ring3的API攔截透過是掛鉤API頭幾個位元組內容,然後進入殺軟自己函式進行引數檢查之類的。
那麼如果呼叫API時,跳過頭部幾位元組,就可以避開這種攔截方式。
__API: 1 push ebp; 2 mov ebp, esp; 3 mov edi, edi; 4 ...
呼叫時,不適用1地址,而使用4地址,然後自己函式內部還原跳過幾位元組的呼叫。
__API_MY: push ebp; mov ebp, esp; mov edi, edi; call 4
5. 底層api
該方法類似於2和3,殺軟攔截API可能更加高層(語義更清楚),那就可以找更底層API進行呼叫,繞過攔截,比如使用NT函式。
或者透過DeviceIoControl呼叫驅動功能來完成API功能。
模擬系統呼叫。
6. 合理替換呼叫順序
有時攔截行為是透過多個API組合來完成的,所以合理替換順序,繞過殺軟攔截策略,也可以繞過改行為攔截。
比如,先建立服務,再將服務對應檔案複製過去。
7. 繞過呼叫源
透過呼叫其它進行功能來完成API的功能。比較經典的如,透過rundll32.exe來完成dll載入,透過COM來操作檔案等等。
總結
方法大概就總結到這,要更好的完成免殺,需要各種方式進行合理靈活組合變化,或者挖掘更多的方法。
注意/技巧
- 非原始碼修改時,透過OD能夠更好的完成,配合IDA進行觀察,具體參考OD/IDA使用教程。
- 原始碼免殺加花,要靈活多變,不拘於形式。
- 行為免殺多嘗試,猜出殺軟攔截策略,能夠更有效的找到繞過方式。
道高一尺,魔高一丈
各路大神有更多的技巧和方式,請不吝賜教,相互交流。
我們不做壞事,但是可以瞭解做壞事的手段,更好的破壞防禦這些手段。
參考
- 模糊雜湊演算法的原理與應用
- VirTest5.0特徵碼定位器(開源)
- http://baike.baidu.com/link?url=ExY1OF52Md1Lk6G_WMZQf4fdswE2RSjuhPmXEYRwgVhkSIb-udf0AhK1cqbhmnDsnf21pUJSvHEWnMoxwZfZ5asnxw0W76Ew9t5ZIJRbLxO
我的部落格原文:https://anhkgg.github.io/aanti-virus
相關文章
- 初探免殺之路——免殺方法測試2021-11-15
- 【原創】ShellCode免殺的騷姿勢2022-05-05
- Windows下基礎免殺技術2022-08-01Windows
- 【免殺技術】Tomcat記憶體馬-Filter2022-02-04Tomcat記憶體Filter
- 免殺初探2024-05-13
- Powershell免殺2021-05-02
- 【免殺篇】遠控免殺專題(32)-Go載入shellcode免殺-3種方式(VT免殺率7-70)2021-10-26Go
- 免殺雜談2024-04-06
- shellcode 免殺(一)2020-06-19
- go免殺初探2021-02-13Go
- go免殺學習記錄2024-08-25Go
- 免殺學習-基礎學習2020-12-15
- 使用msf生成shellcode並用Go免殺?2023-04-02Go
- Cobalt-Strike Office巨集利用與免殺2021-04-28
- BadUsb配合Cobalt-Strike免殺上線2021-05-03
- 20182217劉洪宇EXP3_免殺原理2021-04-05
- 從剖析cs木馬生成到開發免殺工具2020-07-07
- [JavaWeb]利用JSP的編碼特性製作免殺後門2022-01-23JavaWebJS
- 一句話木馬免殺(截止2020年8月16日通殺D盾、安全狗,微步,webshellKiller)2020-08-16Webshell
- MySQL檢視及殺掉連結方法大全2021-02-22MySql
- 免費文章原創度檢測工具2020-06-23
- 阿里 迅雷 一些朋友原創的前端 PHP技術視訊免費分享 非常不錯!2018-11-08阿里前端PHP
- 阿里 迅雷 一些朋友原創的前端 PHP 技術視訊免費分享 非常不錯!2018-11-14阿里前端PHP
- 某資產管理系統打點過程中的免殺經歷2024-03-05
- 《遨遊中國模擬器》殺上iOS免費榜TOP12021-06-16iOS
- 兩次殺人,自動駕駛技術之惡2018-04-06自動駕駛
- 秒殺系統的技術難點與解決方案2020-09-17
- 智譜AI殺入影片生成:「清影」上線,時長6秒,免費不限量2024-07-26AI
- 刺殺小說家百度雲(免費共享)1080P雲盤分享2021-02-22
- 從“三國殺”到“三國殺+”,遊卡的IP生態創新之路2020-07-19
- SegmentFault 思否技術週刊 -- 這份前端大殺招,接住!2022-06-22前端
- 刺殺小說家百度雲(免費共享)1080P雲盤分享22021-02-12
- 刺殺小說家百度雲(免費共享)1080P雲盤分享12021-02-22
- 殺鎖2020-11-29
- 商城秒殺系統總結(Java)2022-03-04Java
- 讓老闆虎軀一震的前端技術,KPI殺手2019-01-17前端KPI
- 放置遊戲又添新軍? 《暴走神話》上線即殺入免費榜第二2020-07-30遊戲
- 使用AI技術,免費幫你的影片配音2024-08-14AI