bypass 殺軟筆記
文章簡介
早在幾個月之前,我就已經寫出來一個bypass 幾乎所有殺軟上線的程序,不過陸陸續續給予不同需求的人使用,就在幾天前,我再度在本地測試,已經被捕獲到相關的特征,由于已經有相關的特征,我這里也不會發表源碼了。
文章內容
前言
早在之前使用不一樣的編碼,繞過靜態查殺,不過整個程序是否免殺【bypass】,與你的編碼,或者說是加密方式沒有任何關系,重點取決于你是如何加載整個程序的。
一般的查殺方式:
計算程序的md5,對已經存在的特征庫進行比較,如果沒有,那么殺軟可能會上傳整個程序,這里也不要去信任殺軟的官方解釋【我們不上傳任何程序,只獲取md5 hash這些說法】,對于做免殺的來說,程序上傳是一大忌諱,建議測試都是斷網。
卡巴斯基的相關研究
本次就是對高級版的卡巴斯基的程序進行測試,測試了各種方式,一度讓我陷入了自閉,真的bypass不了了嗎?
幾個月之前我曾使用syscall成功繞過卡巴斯基的動態檢測,也使用其他的方式同樣繞過,幾個月之后,發現卡巴斯基的學習能力是真的快,我不敢保證程序沒有被泄露。
經過一度的研究,發現卡巴斯基主要是流量監控和系統監控兩個方便特別優秀:
流量監控:
- 對外部流量檢測
- 對外部ip檢測【這個就很納悶了,卡巴斯基同樣對白名單進行檢測,我真的郁悶,白名單還有什么用呢?】
系統監控:
1. 對exe底層的掛鉤【syscall已經成為過去時,卡巴斯基掛鉤大部分的syscall函數】
2. 內存流量特征【也就是說,我們的shellcode,自解密之后是原始shellcode駐留在內存中,卡巴斯基也可檢測到解密之后的特征,幾個月之前,我測試卡巴斯基也沒有被檢測出來,現在也被檢測到了】
其實測試exe的時候,有些方法也是過了的,不過它識別相關的流量特征,也就是說如果我們有一個全新的shellcode,那么同樣也能繞過卡巴斯基。這樣就需要去修改C2的源碼,修改為全新的特征,基于目前來說,我暫時沒有這樣做。
測試
之前測試了windows defender ,node32,kaspersky.某絨,某60:
不過windows defender的查殺效果還是不是那么的好,同樣syscall都windows defender同樣適用的,不過像node32和kaspersky就不適用了:
NTSTATUS NTAVM = NtAllocateVirtualMemory(hProc, &base_addr, 0, (PSIZE_T)&calc_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); RtlMoveMemory(base_addr, calc_payload, calc_len); NTSTATUS NTPVM = NtProtectVirtualMemory(hProc, &base_addr, (PSIZE_T)&calc_len, PAGE_EXECUTE_READ, &oldprotect); NTSTATUS ct = NtCreateThreadEx(&thandle, GENERIC_EXECUTE, NULL, hProc, base_addr, NULL, FALSE, 0, 0, 0, NULL);
這種方式同樣還可以使用于windows defender。但是某絨,某60本人沒有去測試。
另外,解密方式的話,很多人都需要使用異或,建議使用復雜的加密算法,如果使用異或的同樣可以【還有一種方式就是shellcode自解密,當然這個有長度限制,針對于cobaltstrike這種是不適用的】:
替換字符,比如加密的時候把f替換為a,解密就替換回去
最終程序測試
卡巴斯基:


node32:


某60:


某絨:

