You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pefile区分PE文件中的代码字节与数据字节

PE文件代码字节与数据字节区分方法
  • 节属性判断:PE节头中包含明确的段属性标记,原生.data节默认属性为IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE,被标记为可读写数据段,无执行权限;常规代码段(包括你植入shellcode的.CRT节如果配置为可执行)会携带IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ属性,默认无写入权限,这是最基础的判别依据。
  • 反汇编合法性校验:数据段字节反汇编后会出现大量无效操作码、非法指令,或是频繁出现无意义的超长指令、异常操作数,比如.data段存储的全局变量值反汇编结果大多是CPU无法正常执行的无效内容;而人工植入的shellcode属于合法可执行代码,反汇编后全部为x86/x64架构下的合规指令,序列连贯,符合寄存器操作、函数调用的常规逻辑。
  • 字节序列统计特征:代码段的字节分布完全符合对应架构指令集的编码规律,比如x86架构下0x90(nop)、0x55(push rbp)这类高频操作码的出现概率远高于数据段;数据段的字节分布更随机,大量出现ASCII码、小端序整数常量等数据类型特征值,常见指令操作码的出现概率极低。
  • 控制流逻辑校验:有效代码的指令序列可以构建出完整的控制流图,存在明确的跳转目标、函数出入口结构(比如典型的函数序言push rbp; mov rbp, rsp、尾声leave; ret);而数据字节反汇编得到的内容无法构建连贯控制流,跳转目标大多指向无效地址,不存在正常的函数结构。
  • 交叉引用类型校验:正常代码段的指令会被段内跳转、调用指令引用,也会和导入表、重定位表等PE结构产生关联;而.data段的字节只会被代码的内存读写指令引用,不会作为执行流的跳转目标出现,你植入的可执行shellcode只要能被触发,必然存在指向它的执行流引用,和普通数据的引用类型完全不同。

内容的提问来源于stack exchange,提问作者hashy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:42:03