Board logo

标题: 毛毛虫病毒分析 [打印本页]

作者: 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的一些些兴趣。