(加密解密技术内幕)File Header (文件头)

本文深入讲解PE文件结构中的DOS MZ header与PE header部分,包括IMAGE_DOS_HEADER及IMAGE_NT_HEADERS结构。重点介绍了PE header的FileHeader部分,详细解释了Machine、NumberOfSections和Characteristics等字段的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们将要研究PE header的file header(文件头)部分。

至此,我们已经学到了哪些东东,先简要回顾一下:

DOS MZ header又命名为IMAGE_DOS_HEADER.。其中只有两个域比较重要:e_magic包含字符串"MZ",e_lfanew包含PE 
header在文件中的偏移量。

比较e_magic是否为IMAGE_DOS_SIGNATURE以验证是否是有效的DOS header。比对符合则认为文件拥有一个有效的DOS 
header。

为了定位PE 
header,移动文件指针到e_lfanew所指向的偏移。

PE header的第一个双字包含字符串"PE\0\0"。该双字与IMAGE_NT_SIGNATURE比对,符合则认为PE header有效。

本课我们继续探讨关于PE header的知识。PE header的正式命名是IMAGE_NT_HEADERS。再来回忆一下这个结构。

IMAGE_NT_HEADERS STRUCT    Signature dd ?    FileHeader IMAGE_FILE_HEADER <>    
OptionalHeader IMAGE_OPTIONAL_HEADER32 <>IMAGE_NT_HEADERS ENDS

SignaturePE标记,值为50h, 45h, 00h, 00h(PE\0\0)。FileHeader该结构域包含了关于PE文件物理分布的一般信息。OptionalHeader该结构域包含了关于PE文件逻辑分布的信息。

最有趣的东东在OptionalHeader里。不过,FileHeader里的一些域也很重要。本课我们将学习FileHeader,下一课研究OptionalHeader。

IMAGE_FILE_HEADER STRUCT    Machine WORD ?    NumberOfSections WORD ?    TimeDateStamp dd 
?    PointerToSymbolTable dd ?    NumberOfSymbols dd ?    
SizeOfOptionalHeader WORD ?    Characteristics WORD ?IMAGE_FILE_HEADER 
ENDS

Field 
name

Meanings

Machine    该文件运行所要求的CPU。对于Intel平台,该值是IMAGE_FILE_MACHINE_I386(14Ch)。我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行。看起来,除了禁止程序执行之外,本域对我们来说用处不大。    

NumberOfSections    文件的节数目。如果我们要在文件中增加或删除一个节,就需要修改这个值。    

TimeDateStamp    文件创建日期和时间。我们不感兴趣。    

PointerToSymbolTable    用于调试。    

NumberOfSymbols    用于调试。    

SizeOfOptionalHeader    指示紧随本结构之后的OptionalHeader结构大小,必须为有效值。    

Characteristics    关于文件信息的标记,比如文件是exe还是dll。    

简言之,只有三个域对我们有一些用:Machine,NumberOfSections和Characteristics。通常不会改变Machine和Characteristics的值,但如果要遍历节表就得使用NumberOfSections。为了更好阐述NumberOfSections的用处,这里简要介绍一下节表。

节表是一个结构数组,每个结构包含一个节的信息。因此若有3个节,数组就有3个成员。我们需要NumberOfSections值来了解该数组中到底有几个成员。也许您会想检测结构中的全0成员起到同样效果。Windows确实采用了这种方法。为了证明这一点,可以增加NumberOfSections的值,Windows仍然可以正常执行文件。据我们的观察,Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。为什么我们不能忽略NumberOfSections的值?有几个原因。PE说明中没有指定节表必须以全0结构结束。Thus there may be a situation where the last array member 
is contiguous to the first section, without empty space at all. Another reason 
has to do with bound imports. The new-style binding puts the information 
immediately following the section table's last structure array member.因此您仍然需要NumberOfSections。

<think>好的,用户想知道如何判断文件是否经过TSD-Header加密。首先,我需要明确TSD-Header是什么,但用户提供的信息中没有直接提到。不过根据用户提供的引用,特别是引用[1]提到如何验证DOS header,引用[2]关于加密值生成,引用[3]关于PES包头的DTS和PTS。可能需要结合这些信息来分析。 TSD-Header可能是一种自定义的文件头结构,用于标识加密。类似DOS header的验证方法,可能需要检查文件头的特定标识符。例如,DOS header的魔数IMAGE_DOS_SIGNATURE(0x5A4D),TSD-Header可能也有类似的魔数或特征值。 根据引用[2],node版生成正确的加密值,可能涉及特定的加密算法或哈希值存储在头中。因此,判断TSD-Header加密可能需要检查文件头是否有特定的加密标识、魔数或哈希值。此外,可能需要工具来解析文件头,查看是否符合TSD的结构。 步骤可能包括:1. 检查文件头是否有已知的TSD标识符;2. 分析文件结构是否符合TSD规范;3. 使用工具解析头信息或验证加密签名。 需要确认是否有公开的TSD-Header规范,或者是否有工具支持检测该加密类型。如果TSD是专有加密,可能需要特定工具或密钥来验证。此外,引用[3]中的时间戳处理可能不相关,但如果是流媒体加密,可能与封装格式有关。 总结,判断方法可能包括检查文件头魔数、结构分析、使用特定工具或脚本验证加密特征,以及参考相关文档或加密算法信息。</think>要判断文件是否经过TSD-Header加密,可以按照以下步骤进行: ### 一、文件头特征验证 1. **魔数比对** TSD-Header作为加密标识,通常会包含特定字节序列(类似DOS header的`0x5A4D`)。使用十六进制编辑器(如HxD、010 Editor)查看文件起始字节: - 若发现固定格式的标识符(如`0x54 0x53 0x44`对应ASCII的"TSD"),则可能是TSD-Header[^1] - 示例:有效DOS header的验证逻辑可参考`if(e_magic == IMAGE_DOS_SIGNATURE)`的实现方式 2. **结构完整性检查** TSD-Header可能包含长度字段或加密参数,需验证: - 头长度是否符合预期(如固定32字节) - 是否包含加密算法标识(如AES、RSA的OID编码) - 是否存在密钥索引或哈希值(如引用[2]提到的`aHt0c6Lyn9Ox28S8K0OqN...`这类加密特征值) ### 二、加密特征分析 1. **熵值检测** 使用工具如`binwalk -E`检测文件熵值。加密后的数据熵值接近8,而未加密文件熵值通常较低。 2. **已知模式匹配** 若TSD-Header采用特定加密模式(如CBC+HMAC),可通过解密脚本尝试提取头部的IV(初始化向量)和MAC值,并验证是否符合格式。 ### 三、工具推荐 1. **010 Editor模板** 编写自定义模板解析疑似TSD-Header结构,自动校验魔数和字段逻辑关系。 ```python # 示例模板片段 if ReadByte(0) == 0x54 && ReadByte(1) == 0x53 && ReadByte(2) == 0x44 { Printf("Detected TSD-Header"); } else { Printf("Not a TSD encrypted file"); } ``` 2. **加密识别工具** - `file`命令(Linux):结合magic number数据库扩展 - `TrID`(Windows):通过文件特征库识别加密类型 ### 四、引用文献交叉验证 若文件涉及流媒体加密(如引用[3]中PES包头的时间戳机制),需注意TSD-Header可能与媒体容器格式(如MPEG-TS)的加密扩展规范相关,此时应参考相关RFC文档进行协议级验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值