標 題:Billy Belceb病毒編寫教程(DOS篇)---Anti-tunneling
發信人:onlyu
時 間:2004年2月10日 06:24
詳細資訊:
【Anti-tunneling】
~~~~~~~~~~~~~~~~
Tunneling技術還被反病毒工具用來安裝它的產品,我們要獲得原始INT 21h中斷向量的努力將會化為泡影,因為它們使用和我們一樣的武器。我們不能這樣,另外,其它病毒可以tunnel我們,這不妙。系統是我們的,不是其它任何程式的!:)
正如ShitWare使用的檢測是否有跟蹤那樣,我們可以使用它們自己的例程來對付它們:它們沒有對這個保護。當我們可以使用一個例程來觸發陷阱標誌來跟蹤時...我們可以使用另外一個例程來釋放它嗎?當然可以啦。非常簡單。不使用一個OR來觸發它,代之以AND。
pushf
pop ax
and ah,11111110h
push ax
popf
是不是很迷人啊?:)利用這個,我們已經挫敗了它們想偷取"我們的"INT 21h的企圖。但是...如果我們想要知道是否有人想要偷取它該知道些什麼呢?下面的例程是從ARMOURING這一章裡抽出來的。
push ax
pop ax
dec sp
dec sp
pop bx
cmp ax,bx
jz not_traced
jmp $ ; If traced, freeze the processor
not_traced:
[...]
這一章是TUNNELING一章的擴充套件。所以...利用上面兩個簡單的例程,和一點點好運氣,你可以走得更遠:)
[反引誘(Anti-bait)]
~~~~~~~~~~~~~~~~~~~
誘餌/犧牲羊(sacrifical goats)是那些什麼也不做的程式。你肯定會想知道為什麼...它們使用這些程式來抓獲將要感染它們的病毒。並且,它們將會給我們的病毒備份:(
但是當我們的病毒是多型的時候,我們將要面臨嚴重的問題。它們將會對這些檔案感染大約一萬次,來尋找一個可靠的掃描字串and/or 演算法來尋找所有可能的變異。毫無疑問,如果我們新增程式碼來簡單地拒絕對這些程式的感染,我們就能挫敗它們(挫敗那些相同的人很枯燥,但是他們也想挫敗我們...)
下面是不讓(或更難)我們的病毒感染一個誘餌程式時你要遵循的幾點:
- 不要感染大小<5000的檔案,或者更大一些,<10000。所以我們是的反病毒工具建立10000個誘餌,每個10000個位元組。所以它們將要至少需要100M的空間:)
- 不要感染以數字編號最為其檔名的檔案。誘餌程式通常命名為"00000000.com","00000001.com"等等。
-不要感染具有連續的名字的檔案。這個看起來和上面的類似,實際上不。如果它們發現我們的檔案不感染具有數字的檔案,它們就會建立檔案如"AAAAAAAA.COM","AAAAAAAB.COM"及類似的檔案。
- 不要感染具有相同大小的連續的檔案,這種情況和上面的兩種情況類似。
- 不要感染具有當天日期的檔案。幾乎所有的可執行檔案在計算機上具有不同的日期。但是很難找到一個檔案正好是當天的日期(並不是所有的,但是幾乎所有的誘餌就是這個日期)。
- 抓住一個記時器中斷,或者其它的來避免至少每隔10分鐘才感染一個檔案。想象一下情形...一個反病毒程式會不停地試圖獲得我們的病毒的掃描字串,並且反病毒人員會重起很多次來找到是什麼原因導致了病毒拒絕感染。而如果每次重起我們使得他等10分鐘...他將會在我們的病毒上浪費大量的時間:)
- 不要感染在根目錄下的檔案,很多誘餌程式產生器在根目錄下生成誘餌程式,所以這次它們又要受挫了:)
- 不要感染具有0-跳轉和呼叫的檔案:這個僅僅被誘餌和PER用到,所以...搜尋所有的E90000,E800,[70..7F] 00等程式碼。
- 毫無疑問,檢查大量的NOP,對同一個暫存器(XCHG BX,BX)XCHG,對同一個暫存器mov操作的指令...
- 檢查大量的0位元組,或者對同一個暫存器的連續INC/DEC操作...你什麼時候看過在INC DX後面跟著DEC DX???
- 檢測檔案執行的第一個操作是否為MOV AX,4C00h/INT 21h或者一個INT 20h。
如果一個病毒在它的程式碼中執行了上面的至少5個情況,那麼毫無疑問它是一個高強度的反-誘餌(anti-bait)。