理论知识
📂 单元一:磁盘底层与分区管理
核心考点: 物理寻址、MBR结构、分区表、GPT对比
| 知识点 | 关键内容 | 避坑指南 |
|---|---|---|
| CHS与LBA | C(柱面)、H(磁头)、S(扇区);LBA是线性逻辑地址。 | LBA转CHS时,扇区号S要 -1(因为S从1开始,LBA从0开始)。 |
| MBR结构 | 位于0扇区,共512字节。 | 446 字节引导代码 + 64 字节分区表(4×16) + 2 字节结束标志55 AA。 |
| 分区表(DPT) | 第1字节80H=激活,00H=非激活;第5字节=分区类型;最后4字节=总扇区数(小端模式)。 |
扩展分区表中最多2项(1个逻辑分区 + 1个指向下一扩展分区的指针)。 |
| GPT分区 | 突破2TB限制,支持128个分区,有备份头。 | MBR才受2TB限制,GPT单分区可远超2TB。 |
💡 延伸补充:
- EBR结构:扩展分区的链表指针逻辑。
- DBR结构:逻辑分区(如FAT32/NTFS)的引导扇区结构,包含BPB参数。
- 磁盘对齐:4K对齐对性能的影响。
📂 单元二:文件系统原理 (FAT32 & NTFS)
核心考点: 空间划分、目录项、簇链、NTFS属性
| 知识点 | 关键内容 | 避坑指南 |
|---|---|---|
| FAT32结构 | 保留区(含DBR) + FAT表(通常2份) + 数据区。 | FAT32保留区不止1个扇区(通常32+),FAT16才是1个。 |
| 簇链管理 | FAT表项值:00000000=空闲,0FFFFFFF=结束,其他=下一簇号。 |
不是 00000000表示结束!那是空闲。 |
| 目录项 | FAT32起始簇号拆分:高16位在14H,低16位在1AH。 |
删除文件只改首字节为E5并清空FAT链,数据区内容不变。 |
| NTFS核心 | 一切皆属性 ;MFT前16项为系统元数据;BPB在$Boot中。 |
BPB不在 MFT里;文件数据是$DATA属性值。 |
💡 延伸补充:
- 长文件名(LFN):FAT32中LFN目录项的排列顺序(倒序)及校验和。
- NTFS属性类型 :
$FILE_NAME,$SECURITY_DESCRIPTOR,$INDEX_ROOT等。- 数据恢复原理:基于FAT链清空但数据未覆盖的原理。
📂 单元三:PE文件结构 (Portable Executable)
核心考点: 头部定位、节表、内存对齐、导入表
| 知识点 | 关键内容 | 避坑指南 |
|---|---|---|
| 文件定位 | 前2字节MZ(4D5A);偏移3CH指向PE\0\0(50450000)。 |
3CH处是指针,不是签名本身;签名在指针指向的位置。 |
| NT Headers | PE签名 + 映像文件头 (20字节) + 可选映像头(E0/F0字节)。 | ImageBase 在可选头,不在映像文件头;节表不属于NT头。 |
| 节表 | 每项40字节;记录RVA、FOA、大小、属性。 | 节表项是40字节,不是16字节(16字节是MBR分区项)。 |
| 地址转换 | VA = RVA + ImageBase;FOA ↔ RVA 需查节表计算。 |
内存对齐(4KB) ≠ 文件对齐(512B),所以内存大小 ≠ 文件大小。 |
| 导入表 | OriginalFirstThunk(INT) vs FirstThunk(IAT)。 |
加载前:都指向名称/序号;加载后:IAT被覆写为函数真实地址。 |
💡 延伸补充:
- 重定位表(.reloc):基地址冲突时的修正原理。
- 资源节(.rsrc):目录树结构,编译时确定。
- TLS表:线程本地存储,在入口点之前执行。
- 常见节属性 :
.text=60000020h,.data=C0000040h。
📂 单元四:软件逆向工程基础
核心考点: 逆向流程、分析方法、编译原理
| 知识点 | 关键内容 | 避坑指南 |
|---|---|---|
| 逆向流程 | 目标确定 → 环境搭建 → 静态分析 → 动态调试 → 逻辑还原 → 文档。 | 静态分析是基础,动态分析是验证,动静结合是王道。 |
| 分析技术 | 静态:反汇编/反编译;动态:调试器/沙箱;类型恢复:指令语义/数据流。 | 类型恢复不仅靠语义,数据流分析是编译器级还原的关键。 |
| 编译过程 | 预处理 → 编译/汇编 → 链接/目标代码生成。 | 填空题常考中间步骤是"编译"或"汇编"。 |
| 病毒机制 | 寄生宿主 → 获取控制权(Entry Point) → 执行病毒代码 → 归还控制权。 | 病毒不改变PE结构合法性,只是修改入口点或插入新节。 |
💡 延伸补充:
- 反调试技术 :
IsDebuggerPresent,NtQueryInformationProcess, 时间差检测。- 加壳/脱壳:UPX, VMP, Themida 的基本原理(压缩/虚拟化)。
- 常用工具:IDA Pro, x64dbg, PE Explorer, CFF Explorer。
📝 复习建议
- 死记硬背区 :MBR结构(446+64+2)、FAT32结束标记(
0FFFFFFF)、PE节表项大小(40字节)、VA/RVA公式。这些是客观题重灾区。 - 理解逻辑区:导入表加载过程(INT不变,IAT变)、扩展分区链表(指针逻辑)、FOA与RVA转换(必须通过节表)。
- 简答题套路 :
- 过程类:分步骤,用动词开头(检查、分配、映射、修正、跳转)。
- 结构类:分模块,说位置+作用(DOS头、NT头、节表、节)。
习题
选择题知识点汇总
涉及的知识点可以系统地划分为四大核心模块:硬盘底层物理结构与寻址、主引导记录与磁盘分区、FAT32文件系统原理,以及Windows PE文件格式与病毒机制。以下是详细的知识点梳理:
一、 硬盘底层物理结构与寻址
- CHS物理寻址机制:CHS是传统的硬盘三维物理寻址方式,C(Cylinder)代表柱面,H(Head)代表磁头,S(Sector)代表扇区。
- LBA逻辑寻址机制:LBA(Logical Block Address)是一维线性地址抽象,操作系统通过LBA访问磁盘,无需关心底层物理结构。
- CHS与LBA的相互转换 :
- CHS转LBA公式:
LBA = C × (磁头数 × 每磁道扇区数) + H × 每磁道扇区数 + S - 1(注:扇区号S从1开始,LBA从0开始,因此需减1)。 - LBA转CHS公式:通过整除和取余运算,依次得出柱面号、磁头号和扇区号。
- CHS转LBA公式:
二、 主引导记录(MBR)与磁盘分区
- 主引导扇区(MBR)结构 :位于硬盘的第0个扇区(即第一个扇区),共占用512字节。严格由三部分组成:前446字节的引导代码(MBR)、64字节的磁盘分区表(DPT),以及最后2字节的结束标志(
55 AA)。 - 分区表(DPT)结构 :DPT共64字节,包含4个分区项,每项16字节。其中:
- 第1个字节为状态标志:
80H表示激活(可引导),00H表示非激活。 - 第5个字节为分区类型标志(如
07H为NTFS,0BH/0CH为FAT32)。 - 最后4个字节(偏移12-15)表示该分区占用的总扇区数(采用小端模式存储)。
- 第1个字节为状态标志:
- 扩展分区与逻辑分区:MBR最多支持4个主分区。若要创建更多分区,需将其中一个设为扩展分区。逻辑分区通过链表结构管理,前一个扩展分区的表中会记录"下一个"扩展分区的位置信息,且各逻辑分区的空间互不重叠。
三、 FAT32文件系统原理
- FAT32逻辑空间划分:主要分为引导扇区(保留区)、文件分配表区(FAT区)和数据区。其中,FAT32的保留扇区通常包含多个扇区(如32或34个),包含DBR及其备份,这与FAT16仅有1个保留扇区不同。
- 目录项结构 :FAT32的目录项中,文件起始簇号被拆分为高位和低位。偏移
14H-15H存放起始簇号的高16位,偏移1AH-1BH存放低16位。 - 文件删除机制:在FAT32中永久删除文件时,系统仅修改目录项首字节(标记为已删除)并清空FAT表中的簇链表,但存储在数据区中的文件实际内容不会被立即擦除,这为数据恢复提供了可能。
四、 Windows PE文件格式与病毒机制
- PE文件物理结构顺序 :标准的PE文件自上而下依次为:DOS头(MZ文件头) -> DOS存根程序(DOS Stub) -> PE签名(
PE\0\0) -> 映像文件头(IMAGE_FILE_HEADER) -> 可选映像头(IMAGE_OPTIONAL_HEADER) -> 节表(Section Table) -> 各个节(Sections)。 - PE文件校验与定位 :
- 判断PE文件:首先检查文件头两个字节是否为
4D 5A(MZ),然后读取DOS头偏移3CH处的4字节指针(e_lfanew),检查该指针指向的位置是否为50 45 00 00(PE\0\0)。 - 定位NT映像头:由MZ头中偏移
3CH处的4字节指针确定。 - 定位程序入口点:程序执行的第一条指令的虚拟地址(VA)计算公式为
ImageBase + AddressOfEntryPoint。
- 判断PE文件:首先检查文件头两个字节是否为
- 内存地址转换 :VA(虚拟地址)是可执行文件在虚拟内存中的实际地址;RVA(相对虚拟地址)是相对于基地址的偏移量。两者的关系为
VA = RVA + ImageBase。 - PE文件核心组件 :
- NT映像头包含:PE签名、映像文件头、可选映像头(不包含节表)。
- 节表(Section Table):包含PE文件的逻辑分布信息,记录了每个节的虚拟大小、虚拟地址、文件偏移等映射关系。
- 引入函数节:通常为
.idata(或.rdata),专门用于存放从外部DLL导入的函数信息(IAT和INT)。
- Win32病毒运行机制 :病毒依附于宿主程序(HOST)。运行流程为:用户点击宿主程序 -> 系统将其装载到内存 -> 加载器根据
ImageBase + AddressOfEntryPoint定位到入口点 -> 从该位置开始执行(此时通常先执行病毒代码) -> 病毒主体执行完毕后归还控制权 -> 宿主程序继续正常执行。
选择题
第一部分(前12个)
-
对硬盘的三个基本参数CHS描述正确的是( )。
A. C表示柱面数,H表示扇区数,S表示磁头数
B. C表示柱面数,H表示磁头数,S表示扇区数
C. C表示扇区数,H表示柱面数,S表示磁头数
D. C表示磁头数,H表示扇区数,S表示柱面数
【正确答案】B
【简短解析】CHS是传统的硬盘物理寻址方式,其中C代表Cylinder(柱面),H代表Head(磁头),S代表Sector(扇区)。
-
如果CHS的值为0/0/63,则LBA是( )。
A. 60
B. 61
C. 62
D. 63
【正确答案】C
【简短解析】LBA与CHS的转换公式为:LBA = C × (磁头数 × 每磁道扇区数) + H × 每磁道扇区数 + S - 1。代入CHS(0/0/63),计算得 0 + 0 + 63 - 1 = 62。
-
若LBA=3544145,则CHS是( )。
A. 220/156/18
B. 221/156/18
C. 220/157/18
D. 220/156/19
【正确答案】A
【简短解析】根据LBA转CHS的公式(假设标准参数:每磁道63扇区,255磁头),计算可得:柱面号C = 220,磁头号H = 156,扇区号S = 18。
-
下面对主引导扇区描述正确的是( )。
A. 主引导扇区就是硬盘的第一个扇区,由MBR、DPT两部分组成
B. 主引导扇区就是硬盘的第0个扇区,由MBR、DPT两部分组成
C. 主引导扇区就是硬盘的第一个扇区,由MBR、DPT、引导扇区标记三部分组成
D. 主引导扇区就是硬盘的第0个扇区,由MBR、DPT、引导扇区标记三部分组成
【正确答案】D
【简短解析】主引导扇区位于硬盘的第0个扇区(即第一个扇区),其512字节结构包含三部分:前446字节的MBR(引导代码)、64字节的DPT(分区表)以及最后2字节的结束标志"55AA"。
-
下面对分区表描述正确的是( )。
A. 占用64字节,其中第一个字节为0表示激活,第5字节表示分区类型,最后4个字节是分区占用的总扇区数
B. 占用64字节,其中第一个字节为80表示激活,第5字节表示分区类型,最后4个字节是分区占用的总扇区数
C. 占用64字节,其中第一个字节为0表示激活,分为四个分区项,每项16字节
D. 占用64字节,其中第一个字节为80表示激活,分为四个分区项,每项16字节
【正确答案】D
【简短解析】MBR中的分区表(DPT)共占用64字节,包含4个16字节的分区项。在每个分区项中,第1个字节为状态标志(80H表示激活/可引导,00H表示非激活),第5个字节表示分区类型。
-
若一个硬盘中引导扇区的一个分区项是80 20 21 00 07 FE FF FF 00 08 00 00 00 80 A9 03,则该分区占用的总扇区数是( )。
A. 0x80202100
B. 0x07FEFFFF
C. 0x00080000
D. 0x03A98000
【正确答案】D
【简短解析】分区项的最后4个字节(偏移12-15)表示该分区占用的总扇区数。根据小端模式(低位字节在前),提取最后4字节
00 80 A9 03,反转后即为0x03A98000。 -
关于扩展分区的描述,不正确的是( )。
A. 主分区表中要有一个基本扩展分区项,所有扩展分区都隶属于它
B. 所有扩展分区的空间都必须包括在基本扩展分区中
C. 前一个扩展分区的数据项记录在后一个扩展分区的分区表中,但两个扩展分区的空间并不重叠
D. 每个扩展分区中只能存在一个其他分区
【正确答案】C
【简短解析】逻辑分区(扩展分区)是通过链表结构管理的。前一个扩展分区的分区表中会记录"下一个"扩展分区的位置信息,而不是记录在后一个扩展分区的表中。
-
以下对FAT32文件系统描述不正确的是( )。
A. 将逻辑盘的空间划分为三部分,依此是引导扇区、文件分配表、数据区
B. 引导扇区只占用一个扇区,没有保留扇区
C. FAT区由若干个FAT表构成
D. 簇是空间分配和回收的基本单位
【正确答案】B
【简短解析】FAT12/FAT16的保留区通常只有1个扇区,但FAT32的保留区通常包含多个扇区(如32、34或38个),其中包含DBR及其备份扇区。
-
正常文件的目录项中,说明文件的起始簇号高位字节位置的是( )。
A. 14H-15H
B. 16H-17H
C. 18H-19H
D. 1AH-1BH
【正确答案】A
【简短解析】在FAT32的目录项结构中,偏移 14H-15H 存放的是文件起始簇号的高16位,而偏移 1AH-1BH 存放的是起始簇号的低16位。
-
FAT32文件系统中,一个文件被永久删除,不会改变的是( )。
A. 文件名
B. 首簇高位
C. FAT表中簇链表
D. 文件内容
【正确答案】D
【简短解析】文件被删除时,系统仅修改目录项首字节(标记为已删除)并清空FAT表中的簇链表,但存储在数据区中的文件实际内容并不会被立刻擦除。
-
下面对PE文件描述不正确的是( )。
A. 是任何Win32平台的PE装载器都能识别和使用PE文件格式
B. 移植到不同的CPU上PE文件也不会改变
C. 研究PE文件格式,有助于了解病毒的传染原理
D. 研究PE文件格式,有助于了解Windows结构
【正确答案】B
【简短解析】PE文件包含特定CPU架构的机器码(如x86或x64)。如果将其移植到不同架构的CPU上,由于指令集不同,PE文件是无法直接运行的,必须重新编译。
-
一般来说,Win32病毒运行的过程正确的是( )。
(1)装载HOST程序到内存;(2)用户点击HOST程序;(3)从第一条语句开始执行;(4)通过PE文件中的AddressOfEntryPoint和ImageBase之和来定位第一条语句的位置;(5)病毒主体代码执行完毕,将控制权还给HOST程序;(6)HOST程序继续执行。
A. (1)-(2)-(3)-(4)-(5)-(6)
B. (2)-(1)-(3)-(4)-(5)-(6)
C. (2)-(1)-(4)-(3)-(5)-(6)
D. (2)-(1)-(4)-(3)-(6)-(5)
【正确答案】C
【简短解析】正确的执行逻辑是:用户点击程序(2),系统将其装载到内存(1),加载器根据
ImageBase + AddressOfEntryPoint定位到入口点(4),从该位置开始执行(此时通常先执行病毒代码)(3),病毒执行完毕后归还控制权(5),宿主程序继续执行(6)。
第二部分(后12个)
-
以下对VA和RVA的描述不正确的是( )。
A. RVA=VA+ImageBase
B. RVA,是一个相对于可执行文件映射到内存的基地址的偏移量
C. VA,是可执行文件在虚拟内存中的实际内存地址
D. VA=RVA+ImageBase
【正确答案】A
【简短解析】VA(虚拟地址)等于 RVA(相对虚拟地址)加上 ImageBase(映像基地址),即
VA = RVA + ImageBase。选项A的公式正好写反了。 -
以下对PE文件结构的顺序描述正确的是( )。
(1)MZ文件头;(2)字串"PE\0\0";(3)DOS插桩程序;(4)节表;(5)节;(6)映像文件头;(7)可选映像头
A. (1)-(2)-(3)-(4)-(5)-(6)-(7)
B. (1)-(3)-(2)-(6)-(7)-(4)-(5)
C. (2)-(1)-(4)-(3)-(5)-(6)-(7)
D. (2)-(1)-(4)-(3)-(6)-(5)-(7)
【正确答案】B
【简短解析】PE文件的标准物理结构顺序为:DOS头(MZ) -> DOS存根程序(DOS Stub) -> PE签名(PE\0\0) -> 映像文件头(IMAGE_FILE_HEADER) -> 可选映像头(IMAGE_OPTIONAL_HEADER) -> 节表(Section Table) -> 各个节(Sections)。
-
以下哪一项不是用来判断一个文件是PE文件的依据。( )。
A. 该文件的前两个字节是不是4D5A
B. DOS程序头中的偏移3CH处的四个字节是否是50\45\00\00
C. DOS程序头中的偏移3CH处的四个字节是否是PE\0\0
D. 该文件的前两个字符是不是PE
【正确答案】D
【简短解析】判断PE文件的标准流程是:首先检查文件头两个字节是否为
MZ(即十六进制4D 5A),然后读取偏移3CH处的值作为指针,检查该指针指向的位置是否为PE\0\0签名(即十六进制50 45 00 00)。文件开头直接是PE是不符合规范的。 -
确定程序执行的第一条指令的位置需要的参数是( )。
A. BaseOfCode+AddressOfEntryPoint
B. BaseOfData+AddressOfEntryPoint
C. ImageBase+AddressOfEntryPoint
D. ImageBase+BaseOfCode
【正确答案】C
【简短解析】程序入口点(Entry Point)在内存中的绝对虚拟地址(VA)计算公式为:
ImageBase + AddressOfEntryPoint。 -
在PE文件中确定NT映像头(包含PE签名、映像文件头和可选映像头)的位置是( )。
A. 通过DOS小程序部分自动定位
B. 固定为文件开始位置的偏移BOH处
C. 由映像文件头里面确定
D. 由MZ头中3CH位置开始的4个字节确定
【正确答案】D
【简短解析】DOS头(MZ头)的偏移
3CH处存放着一个4字节的指针(e_lfanew),该指针明确指示了NT映像头(PE签名及后续结构)在文件中的实际文件偏移量。 -
如果需要根据可执行文件获得其中每一个节在内存中的具体信息,下面步骤正确的是( )。
(1)读取IMAGE_FILE_HEADER的NumberOfSections域,获得文件的节数目;(2)SizeOfHeaders域值作为节表的文件偏移量,并以此定位节表;(3)将VirtualAddress域值加上ImageBase域值,获得节起始的虚拟地址;(4)遍历整个数组,直至所有节都已处理完毕;(5)遍历整个结构数组检查各成员值。对于每个结构,读取PointerToRawData域值并定位到该文件偏移量,然后读取SizeOfRawData域值得到该节映射到内存的总字节数。
A. (1)-(2)-(3)-(4)-(5)
B. (1)-(2)-(5)-(3)-(4)
C. (1)-(2)-(4)-(5)-(3)
D. (1)-(2)-(5)-(4)-(3)
【正确答案】B
【简短解析】正确的解析逻辑是:先获取节数量(1),再定位节表起始位置(2),接着遍历结构数组检查成员并读取原始数据指针和大小(5),然后计算虚拟地址(3),最后完成所有节的遍历处理(4)。
-
PE文件中不包括在NT映像头中的是( )。
A. 字串"PE\0\0"
B. 映像文件头
C. 可选映像头
D. 节表
【正确答案】D
【简短解析】NT映像头(NT Headers)严格包含三部分:PE签名(PE\0\0)、映像文件头(IMAGE_FILE_HEADER)和可选映像头(IMAGE_OPTIONAL_HEADER)。节表(Section Table)紧跟在NT映像头之后,但不属于NT映像头内部。
-
PE文件中引入函数节的名字一般是( )。
A. .idata(.rdata)
B. .edata
C. .text(.code)
D. .data(.bss)
【正确答案】A
【简短解析】
.idata(Import Data)节专门用于存放从外部DLL导入的函数信息。在某些编译器或加壳程序中,导入表也可能被合并到.rdata(只读数据节)中。 -
在PE文件的节中包含有从其它DLL中引入的函数的节是( )。
A. 代码节
B. 引入函数节
C. 引出函数节
D. 资源节
【正确答案】B
【简短解析】引入函数节(Import Section,通常为
.idata)包含了导入地址表(IAT)和导入名称表(INT),用于记录从其他DLL中引入的函数信息。 -
包含了PE文件的逻辑分布信息的是( )。
A. MZ文件头
B. 映像文件头
C. 节表
D. 可选映像头
【正确答案】C
【简短解析】节表(Section Table)由多个节表项组成,详细记录了每个节在内存中的虚拟大小、虚拟地址,以及在文件中的原始大小和文件偏移,是PE文件逻辑与物理映射的核心。
-
Windows系统中不使用PE文件格式的是( )。
A. 后缀为.SCR的文件
B. 后缀为.EXE的文件
C. 后缀为.DLL的文件
D. 后缀为.DOC的文件
【正确答案】D
【简短解析】
.EXE、.DLL、.SCR(屏幕保护程序)、.OCX、.SYS等在Windows下均为PE格式文件。.DOC是微软Office的文档格式,属于复合文档或XML格式,不是PE文件。 -
下面有关PE文件说法错误的是?( )。
A. 所有windows 下的32位,64位可执行文件都是PE文件格式。
B. 判断是否是PE文件:先读取DoS头,判断e_magic是否等于"MZ",然后再读取PE文件头的头字节,判断是不是 "PE00"。这样就能确定是不是一个有效的PE文件。
C. Windows下DLL并不属于PE文件
D. PE文件的真正内容划分成块,称之为Sections(节)
【正确答案】C
【简短解析】Windows下的DLL(动态链接库)文件完全属于PE文件格式,它们与EXE文件在底层结构上几乎一致,仅在可选映像头中的某些标志位(如Characteristics)有所不同。
填空题知识点汇总
一、 PE文件识别与结构
- PE文件魔数(Magic Number)校验:所有合法的Windows PE文件均以MS-DOS兼容头起始,其最开头的两个字节(ASCII字符)必须是"MZ"(十六进制为4D 5A)。这是病毒或分析工具进行合法性校验的第一道门槛。
- 引入函数节(Import Section) :PE文件中专门用于存放从外部DLL导入的函数信息的节通常命名为
.idata(或.rdata),其中包含了导入地址表(IAT)和导入名称表(INT)。
二、 磁盘分区与MBR底层结构
- MBR分区表(DPT)规格:MBR中的磁盘分区表(DPT)共占用64个字节,被严格划分为4个分区项,每个分区项占用16个字节。这也是传统MBR分区方案最多只能支持4个主分区的根本原因。
- MBR结束标志:主引导扇区(MBR)的最后2个字节(即第511和512字节)是固定的十六进制结束标志"55"和"AA"。BIOS通过校验这两个字节来判断该磁盘是否为合法的可引导设备。
三、 软件编译与构建流程
- 编译过程的核心阶段:高级语言(如C/C++)转化为可执行文件的标准过程主要包含预处理、编译(或汇编)、目标代码生成(链接)等关键步骤,其中"编译/汇编"是进行语法语义分析并生成机器码的核心转换环节。
四、 软件逆向工程与分析技术
- 逆向分析的三大主流方法:软件逆向分析通常分为静态分析(不运行程序,直接对二进制代码进行反汇编/反编译)、动态分析(在调试器或沙箱中运行程序以观察运行时行为)以及动静结合的逆向分析。
- 类型恢复与分析技术:在高级逆向工程(如编译器级别的类型恢复)中,类型分析通常依赖于两种核心技术:基于指令语义的启发式分析,以及基于数据流(Data Flow)的追踪分析。
填空题
-
(填空题, 2分)
PE文件格式的开头两个字符是( )。
【正确答案】MZ
【简短解析】所有合法的Windows PE文件都以MS-DOS兼容头起始,其最开头的两个字节(ASCII字符)必须是"MZ"(十六进制为4D 5A)。
-
(填空题, 2分)
计算机病毒判断一个文件是否是真正的PE文件,第一步是判断该文件的前两个字节是否是( )。
【正确答案】MZ(或 4D5A)
【简短解析】这是PE文件合法性校验的第一道门槛,只有前两个字节为"MZ",病毒或分析工具才会继续读取偏移3CH处的指针去验证"PE\0\0"签名。
-
(填空题, 2分)
在PE文件的节中包含有从其它DLL中引入的函数的节是( )。
【正确答案】引入函数节(或 .idata)
【简短解析】引入函数节(Import Section,通常命名为.idata)包含了导入地址表(IAT)和导入名称表(INT),专门用于记录从外部DLL中引入的函数信息。
-
(填空题, 6分)
MRB分区表的长度只有( )个字节,里面又分成( )项,每项( )个字节。
【正确答案】64;4;16
【简短解析】MBR中的磁盘分区表(DPT)共占用64字节,被严格划分为4个分区项,每个分区项占用16个字节,这也是MBR最多只能支持4个主分区的原因。
-
(填空题, 4分)
MBR中511,512字节的内容是( )、( )。
【正确答案】55;AA(或 55AA)
【简短解析】主引导扇区(MBR)的最后2个字节(即第511和512字节)是固定的结束标志"55 AA",BIOS通过校验这两个字节来判断该磁盘是否为可引导磁盘。
-
(填空题, 2分)
编译过程主要包含3个步骤:预处理、( )、目标代码生成。
【正确答案】编译(或 汇编)
【简短解析】C/C++等高级语言的标准编译过程通常分为四个阶段:预处理、编译、汇编、链接。在简化为三大步骤的考题中,通常将"编译"或"汇编"作为中间的核心转换步骤。
-
(填空题, 2分)
.rdata节起始位置的RVA=2000H,该节的起始FOA=600H,则节偏移=( )。
【正确答案】1A00H
【简短解析】节偏移(即RVA与FOA之间的差值)计算公式为:节偏移 = RVA - FOA。代入数值:2000H - 600H = 1A00H。
-
(填空题, 2分)
针对软件的逆向分析方法通常分为3类:动态分析、( )和动静结合的逆向分析。
【正确答案】静态分析
【简短解析】软件逆向分析的三大主流方法为:静态分析(不运行程序,直接反汇编/反编译代码)、动态分析(在调试器中运行程序观察行为)以及动静结合分析。
-
(填空题, 2分)
软件逆向分析的过程中类型分析主要有两种方式:基于指令语义的方式和基于( )分析的方式。
【正确答案】数据流(或 控制流)
【简短解析】在高级逆向工程(如编译器级别的类型恢复)中,类型分析通常依赖于两种核心技术:基于指令语义的启发式分析,以及基于数据流(Data Flow)的追踪分析。
判断题知识点汇总
一、 磁盘分区与文件系统底层原理
- 扩展分区的链表管理机制:扩展分区采用链表结构管理,其分区表中必须包含一项指向"下一个扩展分区"的指针,因此最多只能再包含一个逻辑分区的数据项,总计最多两个分区数据项。
- 文件系统的定义:文件系统是操作系统用于管理硬盘数据、组织文件目录结构以及控制数据读写检索的核心逻辑方法和规则。
- FAT32系统区划分 :在FAT32中,引导区(BOOT区)和文件分配表区(FAT区)合称为"系统区"。FAT表中,
00000000H表示簇是空闲/未分配的,而文件占用的最后一个簇,其对应的FAT表项应填入结束标记0FFFFFFFH。 - GPT分区的容量突破:2TB是传统MBR分区表的限制。GPT(GUID Partition Table)正是为了突破这一限制而设计的,支持远超2TB的单分区和磁盘容量。
- NTFS的BPB参数位置 :BPB(BIOS Parameter Block)参数位于NTFS的引导扇区(
$Boot)中,而不是MFT中。 - NTFS元数据保留区 :NTFS的MFT前16项(编号0-15)固定保留给系统元数据文件(如
$MFT,$LogFile,$Bitmap等),顺序和位置都是固定的。 - NTFS"一切皆属性"设计 :NTFS将文件作为属性/属性值的集合来处理,文件的实际内容(数据)属于
$DATA属性,文件名属于$FILE_NAME属性等。 - MFT与FAT结束标记的区别 :
0FFFFFFFH是 FAT32 文件分配表(FAT表)中簇链的结束标记。而MFT文件记录使用的是属性列表结束标记(通常是FF FF FF FF)。
二、 PE文件基础结构与节属性
- 资源节的特性 :资源节(
.rsrc)存放的是图标、字符串、对话框模板等静态资源,这些数据在编译链接阶段就已经确定并打包进PE文件。 - 重定位机制 :当实际加载基地址(ImageBase)与编译时的首选基地址不一致时,Windows加载器必须利用重定位表(
.reloc)修正代码和数据中的绝对地址引用。 - 引入函数节(.idata):引入函数节包含导入地址表(IAT)和导入名称表(INT),专门用于记录从外部DLL导入的函数信息。
- 节表项大小 :PE文件节表中的每一项(
IMAGE_SECTION_HEADER)大小固定为40字节,而不是16字节。 - 优先装载地址位置 :优先装载地址(ImageBase)位于可选映像头(
IMAGE_OPTIONAL_HEADER)中,而不是映像文件头(IMAGE_FILE_HEADER)中。 - 内存对齐与文件对齐:PE文件在磁盘上按文件对齐(通常512字节),在内存中按内存对齐(通常4KB)。由于对齐方式不同,内存映像大小通常大于或等于文件大小。
- 代码节属性标志 :
.text代码节的典型属性标志为60000020h,其中20h表示包含代码(CODE),20000000h表示可执行(EXECUTE),40000000h表示可读(READ)。
三、 PE导入表(Import Table)深度解析
- 导入描述符数组的长度 :导入描述符(
IMAGE_IMPORT_DESCRIPTOR)数组的长度是不固定的,取决于程序导入了多少个DLL。数组以全0的NULL结构作为结束标志,加载器通过扫描直到遇到NULL来判断数组结束。 - INT与IAT的区别 :
OriginalFirstThunk指向 INT(导入名称表),存放函数名/序号,内容不变;FirstThunk指向 IAT(导入地址表),加载器会将解析到的真实函数地址填入此处。它们指向不同的RVA,加载后IAT内容会被覆写为真实地址。
判断题
-
每一个扩展分区的分区表中最多只能有两个分区数据项。( )
A. 对
B. 错
【正确答案】A
【简短解析】扩展分区采用链表结构管理,其分区表中必须包含一项指向"下一个扩展分区"的指针,因此最多只能再包含一个逻辑分区的数据项,总计最多两个分区数据项。
-
(判断题, 1分)
文件系统是一个操作系统的重要组成部分,是操作系统在计算机硬盘存储和检索数据的逻辑方法。( )
A. 对
B. 错
【正确答案】A
【简短解析】文件系统确实是操作系统用于管理硬盘数据、组织文件目录结构以及控制数据读写检索的核心逻辑方法和规则。
-
(判断题, 1分)
FAT32文件系统中文件分配表又称为系统区。( )
A. 对
B. 错
【正确答案】B
【简短解析】在FAT32中,引导区(BOOT区) 和**文件分配表区(FAT区)**合称为"系统区",单指文件分配表是不准确的。
-
(判断题, 1分)
FAT表中一个文件占用的最后一个簇,填入的值为00000000H。( )
A. 对
B. 错
【正确答案】B
【简短解析】
00000000H表示该簇是空闲/未分配 的。文件占用的最后一个簇,其对应的FAT表项应填入结束标记,FAT32中通常为0FFFFFFFH。 -
(判断题, 1分)
使用GPT分区,单分区容量不得大于2TB。( )
A. 对
B. 错
【正确答案】B
【简短解析】2TB是传统MBR分区表的限制。GPT(GUID Partition Table)正是为了突破这一限制而设计的,支持远超2TB的单分区和磁盘容量。
-
(判断题, 1分)
NTFS文件系统中BPB参数位于MFT中。( )
A. 对
B. 错
【正确答案】B
【简短解析】BPB(BIOS Parameter Block)参数位于NTFS的**引导扇区( $ Boot)**中,而不是MFT中。MFT是主文件表,用于记录文件属性。
-
(判断题, 1分)
NTFS文件系统中MFT开始的16个元数据文件是保留的,占有固定的位置。( )
A. 对
B. 错
【正确答案】A
【简短解析】NTFS的MFT前16项(编号0-15)固定保留给系统元数据文件(如 MFT,MFT, LogFile, $ Bitmap等),顺序和位置都是固定的。
-
(判断题, 1分)
NTFS将文件作为属性/属性值的集合来处理,文件数据不属于属性值。( )
A. 对
B. 错
【正确答案】B
【简短解析】NTFS的核心设计就是"一切皆属性"。文件的实际内容(数据)属于** DATA属性** ,文件名属于** FILE_NAME属性** ,安全信息属于**$ SECURITY_DESCRIPTOR属性**等。
-
(判断题, 1分)
MFT中每个文件记录的结束标记为0FFFFFFFH。( )
A. 对
B. 错
【正确答案】B
【简短解析】
0FFFFFFFH是 FAT32文件分配表(FAT表) 中簇链的结束标记。MFT文件记录使用的是属性列表结束标记 (通常是FF FF FF FF),而不是FAT的结束标记。 -
(判断题, 1分)
PE文件的资源节存放的在编译时刻已经确定的数据。( )
A. 对
B. 错
【正确答案】A
【简短解析】资源节(
.rsrc)存放的是图标、字符串、对话框模板等静态资源,这些数据在编译链接阶段就已经确定并打包进PE文件。 -
(判断题, 1分)
若装载器不是把程序装到程序编译时默认的基地址时,就需要重定位节来做一些调整。( )
A. 对
B. 错
【正确答案】A
【简短解析】当实际加载基地址(ImageBase)与编译时的首选基地址不一致时,Windows加载器必须利用**重定位表(.reloc)**修正代码和数据中的绝对地址引用。
-
(判断题, 1分)
PE文件的引入函数节包含有从其它DLL中引入的函数。( )
A. 对
B. 错
【正确答案】A
【简短解析】引入函数节(
.idata)包含导入地址表(IAT)和导入名称表(INT),专门用于记录从外部DLL导入的函数信息。 -
(判断题, 1分)
节表中每一项的大小是16字节。( )
A. 对
B. 错
【正确答案】B
【简短解析】PE文件节表中的每一项(IMAGE_SECTION_HEADER)大小固定为 40字节,而不是16字节。
-
(判断题, 1分)
映像文件头中包含有PE文件的优先装载地址。( )
A. 对
B. 错
【正确答案】B
【简短解析】优先装载地址(ImageBase)位于**可选映像头(IMAGE_OPTIONAL_HEADER)**中,而不是映像文件头(IMAGE_FILE_HEADER)中。
-
(判断题, 1分)
PE文件在内存中所占空间与文件大小一致。( )
A. 对
B. 错
【正确答案】B
【简短解析】PE文件在磁盘上按文件对齐 (通常512字节),在内存中按内存对齐 (通常4KB)。由于对齐方式不同,内存映像大小通常大于或等于文件大小。
-
(判断题, 1分)
PE文件代码节的属性一般是60000020h,也就是可执行、可读和"节中包含代码"。( )
A. 对
B. 错
【正确答案】A
【简短解析】
.text代码节的典型属性标志为60000020h,其中20h表示包含代码(CODE),20000000h表示可执行(EXECUTE),40000000h表示可读(READ),组合起来即60000020h。 -
(判断题, 1分)
PE文件引入函数节开始是一个成员为IMAGE_IMPORT_DESCRIPTOR结构的数组,这个数组的长度是固定的。( )
A. 对
B. 错
【正确答案】B
【简短解析】导入描述符数组的长度是不固定 的,取决于程序导入了多少个DLL。数组以全0的NULL结构作为结束标志,加载器通过扫描直到遇到NULL来判断数组结束。
-
(判断题, 1分)
IMAGE_IMPORT_DESCRIPTOR结构的OriginalFirstThunk与FirstThunk字段所指向的位置永远是一样的。( )
A. 对
B. 错
【正确答案】B
【简短解析】这两个字段指向不同的表 :
OriginalFirstThunk指向 INT(导入名称表) ,存放函数名/序号,内容不变;FirstThunk指向 IAT(导入地址表),加载器会将解析到的真实函数地址填入此处。它们仅在文件未加载时指向不同的RVA,加载后IAT内容会被覆写为地址。
简答题
52. (简答题, 7分)
软件逆向分析的一般过程是什么?
参考答案:
软件逆向分析的一般过程包括以下步骤:
- 确定分析目标:明确需要分析的软件功能或行为(1分)
- 环境准备:搭建安全的分析环境,如虚拟机、沙箱等(1分)
- 静态分析:不运行程序,通过反汇编、反编译等手段分析代码结构(1分)
- 动态分析:在受控环境下运行程序,观察其行为特征(1分)
- 代码理解:分析程序逻辑,理解算法和数据结构(1分)
- 功能验证:通过测试验证对程序功能的理解(1分)
- 文档编写:记录分析过程和结果(1分)
53. (简答题, 8分)
PE文件的4个主要部分是什么?
参考答案:
PE文件的4个主要部分是:
- DOS头(MZ头):包含DOS兼容信息和PE头偏移量(2分)
- PE头(NT头):包含PE签名、文件头和可选头(2分)
- 节表(Section Table):描述各个节的属性和位置信息(2分)
- 节区(Sections):包含实际的代码、数据等内容(2分)
54. (简答题, 9分)
简述PE文件执行基本过程。
参考答案:
PE文件执行的基本过程如下:
- 加载文件:操作系统加载器读取PE文件到内存(1分)
- 验证格式:检查DOS头和PE头的有效性(1分)
- 分配内存:根据可选头中的信息分配内存空间(1分)
- 映射节区:将各个节映射到内存指定位置(1分)
- 重定位处理:如果加载地址与期望地址不同,进行重定位(1分)
- 导入处理:解析导入表,加载所需的DLL(1分)
- 地址修正:修正导入函数的地址(1分)
- 执行入口:跳转到AddressOfEntryPoint指定的位置开始执行(1分)
- 程序运行:程序开始正常执行(1分)
55. (简答题, 6分)
1)虚拟地址(VA)与相对虚拟地址(RVA)的转化计算式是什么?
2)文件偏移地址(FOA)与虚拟地址(RVA)的转化计算式是什么?
参考答案:
1)VA与RVA的转换计算式:(3分)
- VA = ImageBase + RVA
- RVA = VA - ImageBase
2)FOA与RVA的转换计算式:(3分)
- 需要通过节表进行转换:
- RVA = FOA - PointerToRawData + VirtualAddress
- FOA = RVA - VirtualAddress + PointerToRawData
(其中PointerToRawData是节在文件中的偏移,VirtualAddress是节的虚拟地址)
56. (简答题, 4分)
什么是软件逆向工程?
参考答案:
软件逆向工程是指通过对软件的二进制代码进行分析,理解其内部结构、算法和工作原理的技术过程。(2分)
其主要目的是在没有源代码的情况下,了解软件的功能、设计和实现方法。(2分)