计算机病毒原理与剖析
3
复习一下:
ASCII
字符集
• 以字节为单位,每字节8 bits
ts8 ,标准ASCII
ISAC
取值范围:0~127
,扩展版:0~255
• 0x00~0x1F (31)
:控制字符/
不可打印字符
• 0x20 (32)~0x7F (127)
:标准ASCII
ISAC
可打印
字符(printable
ieanpbtrl
)
• 0x30~0x39
:数字0~9
09~
• 0x41~0x5A
:大写字母A~Z
• 0x61~0x7A
:小写字母a~z
za~
• 0x80 (128)~0xFF(255)
:ASCII
ISAC
扩展字符
4
复习一下:
标准ASCII
字符集
高4
位
低4
位
5
复习一下:常见特殊含义的ASCII
字符
• 0x1B
:<ESC>
,0x0D
:回车<CR>
,
0x0A
:换行<LF>
,0x09
:tab
键<HT>
,
0x7F
:删除键<DEL>
• 0x20(32)
:空格,0x24(36)
:’
$
’
,
0x2A
:’
*
’
,0x2E(46)
:’
.
’
,
0x2F(47)
:’
/
’
,0x3A(58)
:’
:
’
,
0x5C(92)
:’
/
’
,0x40(64)
:’
@
’
• 中文(GB2312
):属于双字节字符集
(DBCS
:Double Byte Character Set
teraoyhDSBCtcuaerbl
),
两个>0x80
的字节构成一个汉字码
6
复习一下:x86
汇编语言知识
• 通用寄存器:
• ESI/SI
,EDI/DI
,EBP/BP
,ESP/SP
• 16
位段寄存器:CS
,DS
,SS
,ES
,FS
,GS
• 状态寄存器:EFLAGS/FLAGS
,EIP/IP
• x86
指令集常用指令:mov
,
cmp
,
nop
, push, pop,
jz/jnz/jmp/ja/jb/jg/jl
, add, sub,
sal/sar/shl/shr
,
and/or/
xor
/not, call, ret,
int
,
iret
, in, out, test
• 寻址方式:立即寻址、寄存器间接寻址、基址寻
址、变址寻址、基址加变址寻址、基址加变址加
偏移量寻址、带比例因子的变址寻址、基址加带
比例因子的变址寻址
AX
al
ah
EAX
DX
dl
dh
EDX
BX
bl
bh
EBX
CX
cl
ch
ECX
7
EICAR Test File
—
最简单的病毒
• 欧洲计算机防病毒研究所(EICAR
:European
Institute for Computer Antivirus Research,
http://www.eicar.org/
)研制
• 反病毒厂商将此测试文件的特征码加入病毒
库,用来测试反病毒软件是否工作正常
• 68
个字节的纯文本(整个病毒体都是可显示字
符)内容如下:
X5O!P%@AP[4/PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H
FPELTZACDNRUVXHO%@
*
8
反汇编下的EICAR
0BE1:0100 58 POP AX
0BE1:0101 354F21 XOR AX,214F
0BE1:0104 50 PUSH AX
0BE1:0105 254041 AND AX,4140
0BE1:0108 50 PUSH AX
0BE1:0109 5B POP BX
0BE1:010A 345C XOR AL,5C
0BE1:010C 50 PUSH AX
0BE1:010D 5A POP DX
0BE1:010E 58 POP AX
0BE1:010F 353428 XOR AX,2834
0BE1:0112 50 PUSH AX
0BE1:0113 5E POP SI
0BE1:0114 2937 SUB [BX],SI
0BE1:0116 43 INC BX
0BE1:0117 43 INC BX
0BE1:0118 2937 SUB [BX],SI
0BE1:011A 7D24 JGE 0140
0BE1:011C~0BE1:013F DB EICAR-STANDARDANTIVIRUS-
TEST-FILE!$
0BE1:0140 48 DEC AX
0BE1:0141 2B482A SUB CX,[BX+SI+2A]
读入com文件的时候,初始的地址偏移保存在AX中。
相当于MOV AX, 214F
AX=214F and 4140 = 0140
BX=0140
AX=0140 xor 005C = 011C
DX=011C
AX=214F (注意堆栈内容)
AX=097B
SI=097B
[BX]=[0140]=2B48, 执行后,[BX]=[0140]=2B48-097B=21CD
翻译成汇编语言就是 0BE1:0140 CD21 INT 21
[BX]=[0142]=2A48, 执行后,[BX]=[0142]=2A48-097B=20CD
翻译成汇编语言就是 0BE1:0142 CD20 INT 20
执行后原来的48 2B 48 2A指令序列变为CD 21 CD 20:
0BE1:0140 CD21 INT 21
0BE1:0142 CD20 INT 20
AH=09H,故INT 21执行显示字符串功能,
字符串内容为DS:DX指向的字符串,以$为结束($不显示)。
9
病毒通常所具有的结构特征
• 感染标记
• 感染模块
• 触发模块
• 破坏模块
• 主控模块
10
病毒传播原理
• 传统方式
• 利用系统特点或诱骗用户,使得带毒
程序被执行
• 驻留内存(进入内存才会主动传播)
• 接管磁盘读写中断服务程序
• 接管程序入口,先执行病毒代码,然
后跳转到真正的程序代码入口
11
病毒传播原理(续)
• 传统方式
• 利用操作系统的漏洞、缓冲区溢出攻击
(buffer overflow
)等手段,使得指令指针从
后门代码处开始执行
• 利用应用程序扩展功能的不安全性(如脚本、
宏的权限检查不严等)
• 修改注册表,伪装成系统进程,注入系统
• 社会工程学,利用人们的好奇心,网络谣言
• 特殊操作系统下固有的弱点(比如智能手机)
12
引导型病毒传播手段
• 病毒读取正常的引导扇区,并将引导扇区
保存到磁盘的空余位置
• 在引导扇区填写病毒内容
• 系统启动时,先将引导扇区的病毒内容读
入内存,然后病毒在完成驻留内存后再将
真正的引导扇区读入内存,进行通常的系
统引导
• 系统启动后,已经有病毒驻留内存,通过
接管中断服务例程等手段进行传播
13
硬盘数据的组织
• 硬盘寻址方式:
• C/H/S
方式:柱面
(cylinder
,0
开始)
、磁头
(head
,0
开始)
、扇区
(sector
,1
开始)
、磁道
(track)
• LBA
方式:Logical Block
Addressing
cylinder
head
track
sector
14
• C/H/S
与LBA
的转换:
• 假设C
:当前柱面号,H
:当前磁头号,Cs
:
起始柱面号,Hs
:起始磁头号,Ss
:起始扇
区号,PS
:每磁道扇区数,PH
:每柱面磁头
数,则:
LBA=(C - Cs)
*
PH
*
PS + (H - Hs)
*
PS + (S - Ss)
C=LBA
div
(PH
*
PS)
+
Cs
H=(LBA
div
PS)
mod
PH
+
Hs
S=LBA
mod
PS
+
Ss
• 操作系统中最小访问单位:簇(cluster
)
15
DOS/Windows
soSdnDwOWi
硬盘逻辑结构
LBA:0
MBR
保留(未用)
C/H/S: 0/0/1
Partition 1
FAT
Boot
FAT1
FAT2
Root
DATA
Partition 2
NTFS
Boot
DATA
Extend
Partition
Logical Disk
Info
Logical Disk
Logical Disk
Info
Logical Disk
Logical Disk
Info
Logical Disk
cylinder 0
MFT MFTmirr
16
MBR
(主引导记录)格式
0000 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....|
0010 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BD BE 07 B1 04 ...PW...........
0020 38 6E 00 7C 09 75 13 83-C5 10 E2 F4 CD 18 8B F5 8n.|.u..........
0030 83 C6 10 49 74 19 38 2C-74 F6 A0 B5 07 B4 07 8B ...It.8,t.......
0040 F0 AC 3C 00 74 FC BB 07-00 B4 0E CD 10 EB F2 88 ..<.t...........
0050 4E 10 E8 46 00 73 2A FE-46 10 80 7E 04 0B 74 0B N..F.s*.F..~..t.
0060 80 7E 04 0C 74 05 A0 B6-07 75 D2 80 46 02 06 83 .~..t....u..F...
0070 46 08 06 83 56 0A 00 E8-21 00 73 05 A0 B6 07 EB F...V...!.s.....
0080 BC 81 3E FE 7D 55 AA 74-0B 80 7E 10 00 74 C8 A0 ..>.}U.t..~..t..
0090 B7 07 EB A9 8B FC 1E 57-8B F5 CB BF 05 00 8A 56 .......W.......V
00A0 00 B4 08 CD 13 72 23 8A-C1 24 3F 98 8A DE 8A FC .....r#..$?.....
00B0 43 F7 E3 8B D1 86 D6 B1-06 D2 EE 42 F7 E2 39 56 C..........B..9V
00C0 0A 77 23 72 05 39 46 08-73 1C B8 01 02 BB 00 7C .w#r.9F.s......|
00D0 8B 4E 02 8B 56 00 CD 13-73 51 4F 74 4E 32 E4 8A .N..V...sQOtN2..
00E0 56 00 CD 13 EB E4 8A 56-00 60 BB AA 55 B4 41 CD V......V.`..U.A.
00F0 13 72 36 81 FB 55 AA 75-30 F6 C1 01 74 2B 61 60 .r6..U.u0...t+a`
0100 6A 00 6A 00 FF 76 0A FF-76 08 6A 00 68 00 7C 6A j.j..v..v.j.h.|j
0110 01 6A 10 B4 42 8B F4 CD-13 61 61 73 0E 4F 74 0B .j..B....aas.Ot.
0120 32 E4 8A 56 00 CD 13 EB-D6 61 F9 C3 49 6E 76 61 2..V.....a..Inva
0130 6C 69 64 20 70 61 72 74-69 74 69 6F 6E 20 74 61 lid partition ta
0140 62 6C 65 00 45 72 72 6F-72 20 6C 6F 61 64 69 6E ble.Error loadin
0150 67 20 6F 70 65 72 61 74-69 6E 67 20 73 79 73 74 g operating syst
0160 65 6D 00 4D 69 73 73 69-6E 67 20 6F 70 65 72 61 em.Missing opera
0170 74 69 6E 67 20 73 79 73-74 65 6D 00 00 00 00 00 ting system.....
0180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01B0 00 00 00 00 00 2C 44 63-88 95 88 95 00 00 80 01 .....,Dc........
01C0 01 00 07 FE FF FF 3F 00-00 00 FC 8A 38 01 00 00 ......?.....8...
01D0 C1 FF 07 FE FF FF 3B 8B-38 01 3B 8B 38 01 00 00 ......;.8.;.8...
01E0 C1 FF 0F FE FF FF 76 16-71 02 4B CE DF 06 00 00 ......v.q.K.....
01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
0000 ~01BD
:Main Boot Record
,
主引导记录(446
字节)
01BE~01CD
:分区信息
1(16
字节)
01CE~01DD
:分区信息
2(16
字节)
01DE~01ED
:分区信息
3(16
字节)
01EE~01FD
:分区信息
4(16
字节)
01FE
~
01FF
:标识
55 AA
17
分区表(Partition Table
)结构
• 4
个分区表项,每个表项16
字节
DWORD 扇区数
0CH
起始LBA
DWORD 号
08H
(06H
的高2
BYTE 位加上本字节)终止柱面
07H
(低6
BYTE 位)终止扇区
06H
终止磁头号(HEAD
BYTE )
05H
文件系统类型:如07H
:NTFS
,0FH
:Win95
扩展
分区
BYTE
04H
(02H
的高2
BYTE 位加上本字节)起始柱面号
03H
(低6
BYTE 位)起始扇区号
02H
起始磁头号(HEAD
BYTE )
01H
分区状态:00H
:非活动分区,80H
BYTE :活动分区
00H
偏移长度所表达的意义
例:80
01
01
00
07
FE
FF FF
3F 00 00 00
FC 8A 38 01
18
FAT
引导扇区格式(DOS622
软盘)
0000 EB 3C 90 4D 53 44 4F 53-35 2E 30 00 02 01 01 00 .<.MSDOS5.0.....
0010 02 E0 00 40 0B F0 09 00-12 00 02 00 00 00 00 00 ...@............
0020 00 00 00 00 00 00 29 FE-11 1E 29 44 4F 53 36 32 ......)...)DOS62
0030 32 20 20 20 20 20 46 41-54 31 32 20 20 20 FA 33 2 FAT12 .3
0040 C0 8E D0 BC 00 7C 16 07-BB 78 00 36 C5 37 1E 56 .....|...x.6.7.V
0050 16 53 BF 3E 7C B9 0B 00-FC F3 A4 06 1F C6 45 FE .S.>|.........E.
0060 0F 8B 0E 18 7C 88 4D F9-89 47 02 C7 07 3E 7C FB ....|.M..G...>|.
0070 CD 13 72 79 33 C0 39 06-13 7C 74 08 8B 0E 13 7C ..ry3.9..|t....|
0080 89 0E 20 7C A0 10 7C F7-26 16 7C 03 06 1C 7C 13 .. |..|.&.|...|.
0090 16 1E 7C 03 06 0E 7C 83-D2 00 A3 50 7C 89 16 52 ..|...|....P|..R
00A0 7C A3 49 7C 89 16 4B 7C-B8 20 00 F7 26 11 7C 8B |.I|..K|. ..&.|.
00B0 1E 0B 7C 03 C3 48 F7 F3-01 06 49 7C 83 16 4B 7C ..|..H....I|..K|
00C0 00 BB 00 05 8B 16 52 7C-A1 50 7C E8 92 00 72 1D ......R|.P|...r.
00D0 B0 01 E8 AC 00 72 16 8B-FB B9 0B 00 BE E6 7D F3 .....r........}.
00E0 A6 75 0A 8D 7F 20 B9 0B-00 F3 A6 74 18 BE 9E 7D .u... .....t...}
00F0 E8 5F 00 33 C0 CD 16 5E-1F 8F 04 8F 44 02 CD 19 ._.3...^....D...
0100 58 58 58 EB E8 8B 47 1A-48 48 8A 1E 0D 7C 32 FF XXX...G.HH...|2.
0110 F7 E3 03 06 49 7C 13 16-4B 7C BB 00 07 B9 03 00 ....I|..K|......
0120 50 52 51 E8 3A 00 72 D8-B0 01 E8 54 00 59 5A 58 PRQ.:.r....T.YZX
0130 72 BB 05 01 00 83 D2 00-03 1E 0B 7C E2 E2 8A 2E r..........|....
0140 15 7C 8A 16 24 7C 8B 1E-49 7C A1 4B 7C EA 00 00 .|..$|..I|.K|...
0150 70 00 AC 0A C0 74 29 B4-0E BB 07 00 CD 10 EB F2 p....t).........
0160 3B 16 18 7C 73 19 F7 36-18 7C FE C2 88 16 4F 7C ;..|s..6.|....O|
0170 33 D2 F7 36 1A 7C 88 16-25 7C A3 4D 7C F8 C3 F9 3..6.|..%|.M|...
0180 C3 B4 02 8B 16 4D 7C B1-06 D2 E6 0A 36 4F 7C 8B .....M|.....6O|.
0190 CA 86 E9 8A 16 24 7C 8A-36 25 7C CD 13 C3 0D 0A .....$|.6%|.....
01A0 4E 6F 6E 2D 53 79 73 74-65 6D 20 64 69 73 6B 20 Non-System disk
01B0 6F 72 20 64 69 73 6B 20-65 72 72 6F 72 0D 0A 52 or disk error..R
01C0 65 70 6C 61 63 65 20 61-6E 64 20 70 72 65 73 73 eplace and press
01D0 20 61 6E 79 20 6B 65 79-20 77 68 65 6E 20 72 65 any key when re
01E0 61 64 79 0D 0A 00 49 4F-20 20 20 20 20 20 53 59 ady...IO SY
01F0 53 4D 53 44 4F 53 20 20-20 53 59 53 00 00 55 AA SMSDOS SYS..U.
0000 ~0002
:jmp
指令
01FE
~
01FF
:标识
55 AA
0003~000A
:厂商版本号
000B~000C
:每扇区字节数
000D
:每簇扇区数
000E~000F
:保留扇区数
0010
:FAT
数量
0011~0012
:根目录最大目录项数
0013~0014
:分区扇区总数,硬盘一般
为00
00
0015
:介质描述,硬盘为F8
0016~0017
:每FAT
扇区数,硬盘一般
为00
00
0018~0019
:每道扇区数,硬盘一般为
003F(63 sectors/track)
001A~001B
:每柱面磁头数,硬盘一般
为00FF(255 heads/cylinder)
001C~001F
:隐藏扇区数(FAT12
用
001C~001D
)
以下内容FAT12/FAT16/FAT32
各不相
同,以FAT16
为例:
0026
:扩展标记0x29
0027~002A
:序列号
002B~0035
:卷标
0036~003D
:文件系统标识
19
NTFS
引导扇区格式(Win2003
)
0000 EB 52 90 4E 54 46 53 20-20 20 20 00 02 08 00 00 .R.NTFS .....
0010 00 00 00 00 00 F8 00 00-3F 00 FF 00 3F 00 00 00 ........?...?...
0020 00 00 00 00 80 00 80 00-FB 8A 38 01 00 00 00 00 ..........8.....
0030 00 00 0C 00 00 00 00 00-AF 88 13 00 00 00 00 00 ................
0040 F6 00 00 00 01 00 00 00-E6 F7 D0 98 17 D1 98 14 ................
0050 00 00 00 00 FA 33 C0 8E-D0 BC 00 7C FB B8 C0 07 .....3.....|....
0060 8E D8 E8 16 00 B8 00 0D-8E C0 33 DB C6 06 0E 00 ..........3.....
0070 10 E8 53 00 68 00 0D 68-6A 02 CB 8A 16 24 00 B4 ..S.h..hj....$..
0080 08 CD 13 73 05 B9 FF FF-8A F1 66 0F B6 C6 40 66 ...s......f...@f
0090 0F B6 D1 80 E2 3F F7 E2-86 CD C0 ED 06 41 66 0F .....?.......Af.
00A0 B7 C9 66 F7 E1 66 A3 20-00 C3 B4 41 BB AA 55 8A ..f..f. ...A..U.
00B0 16 24 00 CD 13 72 0F 81-FB 55 AA 75 09 F6 C1 01 .$...r...U.u....
00C0 74 04 FE 06 14 00 C3 66-60 1E 06 66 A1 10 00 66 t......f`..f...f
00D0 03 06 1C 00 66 3B 06 20-00 0F 82 3A 00 1E 66 6A ....f;. ...:..fj
00E0 00 66 50 06 53 66 68 10-00 01 00 80 3E 14 00 00 .fP.Sfh.....>...
00F0 0F 85 0C 00 E8 B3 FF 80-3E 14 00 00 0F 84 61 00 ........>.....a.
0100 B4 42 8A 16 24 00 16 1F-8B F4 CD 13 66 58 5B 07 .B..$.......fX[.
0110 66 58 66 58 1F EB 2D 66-33 D2 66 0F B7 0E 18 00 fXfX..-f3.f.....
0120 66 F7 F1 FE C2 8A CA 66-8B D0 66 C1 EA 10 F7 36 f......f..f....6
0130 1A 00 86 D6 8A 16 24 00-8A E8 C0 E4 06 0A CC B8 ......$.........
0140 01 02 CD 13 0F 82 19 00-8C C0 05 20 00 8E C0 66 ........... ...f
0150 FF 06 10 00 FF 0E 0E 00-0F 85 6F FF 07 1F 66 61 ..........o...fa
0160 C3 A0 F8 01 E8 09 00 A0-FB 01 E8 03 00 FB EB FE ................
0170 B4 01 8B F0 AC 3C 00 74-09 B4 0E BB 07 00 CD 10 .....<.t........
0180 EB F2 C3 0D 0A 41 20 64-69 73 6B 20 72 65 61 64 .....A disk read
0190 20 65 72 72 6F 72 20 6F-63 63 75 72 72 65 64 00 error occurred.
01A0 0D 0A 4E 54 4C 44 52 20-69 73 20 6D 69 73 73 69 ..NTLDR is missi
01B0 6E 67 00 0D 0A 4E 54 4C-44 52 20 69 73 20 63 6F ng...NTLDR is co
01C0 6D 70 72 65 73 73 65 64-00 0D 0A 50 72 65 73 73 mpressed...Press
01D0 20 43 74 72 6C 2B 41 6C-74 2B 44 65 6C 20 74 6F Ctrl+Alt+Del to
01E0 20 72 65 73 74 61 72 74-0D 0A 00 00 00 00 00 00 restart........
01F0 00 00 00 00 00 00 00 00-83 A0 B3 C9 00 00 55 AA ..............U.
0000 ~0002
:jmp
指令
01FE
~
01FF
:标识
55 AA
0003~000A
:厂商版本号
000B~000C
:每扇区字节数
000D
:每簇扇区数
000E~000F
:保留
0010~0012
:保留,总为
00
00
00
0013~0014
:未用,00 00
0015
:介质描述,硬盘为<