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

PE完整镜像可匹配Shellcode特征但各段均搜索不到的原因是什么?

问题原因
  • pefile使用错误:你调用sec.get_data(sec.PointerToRawData, sec.SizeOfRawData)的参数完全不符合接口要求。Section.get_data()的第一个入参是相对于当前段自身起始位置的偏移,不是PE文件的全局文件偏移。sec.PointerToRawData是该段在磁盘文件中的全局起始偏移,你把这个值作为段内偏移传入,相当于从段开头跳过了数千字节,绝大多数情况已经超出段本身的长度,根本读不到有效数据,自然匹配不到特征。
    正确写法直接调用sectionData = sec.get_data()即可,无参状态下默认读取整个段的所有原始数据。
  • 存储位置预期错误:你定义的unsigned char buf[]是栈上局部变量,初始化所用的字符串字面量默认会被编译器放在.rdata只读数据段,而非你预期的.data可写数据段。如果开启了较高等级的编译优化,编译器甚至会把这个短常量直接作为立即数嵌入到.text代码段的指令流中,不会单独出现在数据段。
  • 内存镜像与磁盘文件的差异:get_memory_mapped_image()返回的是PE按照内存加载规则对齐后的镜像,会包含段之间的内存填充、重定位修正后的内容,和磁盘上存储的原始段数据存在差异,甚至部分特征刚好落在段之间的填充区域,遍历单个段原始数据就会漏掉。
排查要点
  • 修正pefile的段数据读取代码后重新匹配
  • 检查编译选项:确认是否开启了O2/O3优化、字符串常量合并、常量嵌入等优化开关
  • 用IDA、x64dbg等反汇编工具手动定位目标特征字节的地址,确认其所属的段范围
  • 排查特征字节是否存在跨段的情况:如果特征一部分在前一个段末尾,一部分在后一个段开头,单段匹配自然无法命中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:21:04