标题: 毛毛虫病毒分析
[打印本页]
作者: ko20010214
时间: 2002-10-21 00:00
标题: 毛毛虫病毒分析
毛毛虫病毒的引导部分:
判断c:command.com最后两个字节是否为0C0AH,不是,就传染。
然后把病毒引导到内存最高端,占2KB空间
修改21H中断,截获DOS功能调用的1AH,11H,12H。
毛毛虫病毒的传染部分:
占据原com文件前0CH个字节,修改CS和IP值,使程序转到病毒程序,原来的0CH个字节被转移到文件尾部病毒程序中位移量为0BH的位置,当染上病毒的com文件运行时,首先将病毒驻留内存,然后将0CH字节移回,执行原com文件。修改int21H入口,改在XXXX:04A8H处。
毛毛虫病毒的表现部分:
修改int 1CH的入口,改在XXXX:06B0H处。
毛毛虫病毒的图形代码:
在XXXX:069AH处有
20 07 0F 0A 0F 0A 0F 0A 0F 0A 0F 0A 0F 0A 0F 0A 0F 0A F7 0E EE 0C
虫身为8个0FH符号连接而成,属性为0AH,即为绿色
虫颈为1个F7H符号组成,属性为0EH,为黄色
虫嘴为1个EEH符号组成 ,属性为0CH,为红色
把ES设定在B800H处,不断变换DI值,调用int1CH.
在Debug状态下激活毛毛虫病毒:
mov ax,yyyy
mov ds,ax
mov dx,6b0
mov ax,251c
int 21h
作者: kickout
时间: 2002-10-28 00:00
下面是我在98年写的一个小程序,模仿毛毛虫病毒发作的现象,有兴趣可以粘贴下去用masm或tasm编辑成EXE文件运行一下看。
==============================
dseg segment
data1 db " The MaoMaoChong is Coming Back ! !! !!!",0ah,0dh
db " ------Writen By Y.L.N 04/18/98 ",0ah,0dh
db " GOOD LUCK For YOU ! !! !!!",0AH,0DH,"$"
data2 db 0Fh, 0Ah, 0Fh, 0Ah,0Fh, 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, F7h, 0Eh, EEh, 0Ch,0ah,0dh,'$'
cury db 00 ;hang
curx db 00 ;lie
dseg ends
stack segment stack
sta dw 100 dup(?)
stack ends
code segment
assume cs:code,ds:dseg,es:dseg
main proc
start:
push ds
xor ax,ax
push ax
mov ax,dseg
mov ds,ax
mov es,ax
mov ah,02h ;set cursor
mov dh,cury
mov dl,curx
int 10h
mov dx,offset data1 ;print string
mov ah,09h
int 21h
mov dh,03h ;reset cursor
mov dl,00h
mov cury,dh
mov curx,dl
loop1:
inc dl
mov curx,dl
cmp dl,69
jng old
cmp dl,79
jng repeat
mov dl,00
mov curx,dl
inc dh
mov cury,dh
cmp dh,23
jng old
mov dh,03h
mov cury,dh
jmp eed
old: xor ax,ax ;draw MaoMAoChong
mov ax,offset data2
mov bp,ax
mov ah,13h
mov al,10b
mov bh,0
mov cx,0ah
int 10h
mov cx,077fh ;delay
delay1:
push cx
mov cx,0bfh
delay11:
loop delay11
pop cx
loop delay1
repeat:
mov dl,curx
add dl,+11
mov ah,02h ;set cursor
mov dh,cury
int 10h
xor ax,ax
mov ah,08h ;push a chart
mov bh,00h
int 10h
mov dl,curx
mov ah,02h ;set cursor
mov dh,cury
int 10h
mov ah,0eh ;clear MaoMaoChong's tial
mov bl,00000101b
mov cx,1
int 10h
mov cx ,077fh ;delay
delay2:
push cx
mov cx,0bfh
delay21:
loop delay21
pop cx
loop delay2
jmp loop1 ;loop until the world is coming to end
eed:
mov ah,00 ;show a page and exit
int 21h
main endp
code ends
end start
===========================
可能delay的那一段要改一下,因为我原来是在486,顶多586的机器上编辑的。现在CPU速度快,要把delay里的循环数加大,虫子才不会跑得太快,呵呵。。。
data2 后面的8个0Fh,0Ah,本来可以简单地写成 db 08h DUP(' '),这里的' '里看起来是空白的,实际是在DOS下用ALT键+015(小键盘),ALT键+010(小键盘)敲进去的字符。因为这样看起来象是空白的,所以还是用比较土的办法输入,不用这种简写法。
我喜欢DOS有很大一点就是可以在DOS下编程对屏幕进行精确地控制,很好玩。呵呵。。。
希望这样的有趣的小程序能激起大家对DOS的一些些兴趣。