免杀基础之一文学废PE文件格式
前言
PE文件的全称是Portable Executable ,意为可移植的可执行文件,常见的有EXE,DLL,SYS,COM,OCX,PE文件是微软Windows操作系统上的程序文件。
简单来理解,就是一种数据结构。我们知道知道CPU只认识二进制数,所以可执行文件保存在磁盘中都是以二进制数保存的,不过为了查看,所以市面上的编辑器都是用16进制显示的,比如下面这样,使用010Editer打开一个PE文件:
PE文件结构如下:
有的数据结构是用来执行的代码,有的数据结构是用来保存数据。
基础知识
- 基地址(ImageBase):当PE文件通过Windows加载器载入内存后,内存中的版本称为模块,映射文件的起始地址称为模块句柄,可通过模块句柄访问内存中其他数据结构,这个内存起始地址就称为基地址。
- 虚拟地址(VA):在Windows系统中,PE文件被系统加载到内存后,每个程序都有自己的虚拟空间,这个虚拟空间的内存地址称为虚拟地址。
- 相对虚拟地址(RVA):可执行文件中,有许多地方需要指定内存中的地址。例如,应用全局变量时需要指定它的地址。为了避免在PE文件中出现绝对内存地址引入了相对虚拟地址,它就是在内存中相对于PE文件载入地址的偏移量。
它们之间的关系:虚拟地址(VA) = 基地址(Image Base)+相对虚拟地址(RVA)
- 文件偏移地址(Offset):当PE文件存储在磁盘中时,某个数据的位置相对于文件头的偏移量称为文件偏移地址(File Offset)。文件偏移地址从PE文件的第一个字节开始计数,起始值为0
PE 头解析
MS—DOS头解析
首先是DOS头和DOS存根,它们的存在主要是用来兼容DOS系统。当我们的程序运行在DOS系统的时候,就会运行DOS存根中的代码,代码内容就是输出一段字符串告诉用户,这个程序不能在16位系统运行。
而DOS头保存了程序的信息,DOS头的定义如下:
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE headerWORD e_magic; // Magic numberWORD e_cblp; // Bytes on last page of fileWORD e_cp; // Pages in fileWORD e_crlc; // RelocationsWORD e_cparhdr; // Size of header in paragraphsWORD e_minalloc; // Minimum extra paragraphs neededWORD e_maxalloc; // Maximum extra paragraphs neededWORD e_ss; // Initial (relative) SS valueWORD e_sp; // Initial SP valueWORD e_csum; // ChecksumWORD e_ip; // Initial IP valueWORD e_cs; // Initial (relative) CS valueWORD e_lfarlc; // File address of relocation tableWORD e_ovno; // Overlay numberWORD e_res[4]; // Reserved wordsWORD e_oemid; // OEM identifier (for e_oeminfo)WORD e_oeminfo; // OEM information; e_oemid specificWORD e_res2[10]; // Reserved wordsLONG e_lfanew; // File address of new exe header} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
这里面有用的信息就两个:
第一个成员e_magic,作为判断是否为PE文件的一个表示,如果不是"MZ"(16进制0x5A4D),那就不是PE文件,如果是还要看PE头标识。
最后一个成员e_lfanew,指定PE头的开始位置距离文件的偏移,它的数值就是NT头的开始地址。如下图,这里是E8,那么NT头开始地址就是E8的地方。
PE头结构如下:
注意:e_magic是word类型,占两个字节;Signature是dword类型,占四个字节。
Signature表示是否是PE,vs中有一个宏来定义它:
PE头其实由两部分组成,一个是标准PE文件头,一个是可选头。
先说标准PE头:
标准PE头
在VS中继续跟进查看PE文件头结构体:
typedef struct _IMAGE_FILE_HEADER {WORD Machine; //运行平台,在不同平台上,其值也不一样WORD NumberOfSections; //区段数据数量DWORD TimeDateStamp; //文件什么时候被创建的DWORD PointerToSymbolTable; //指向符号表的偏移指针DWORD NumberOfSymbols; //符号表中的符号数量WORD SizeOfOptionalHeader; //文件头扩展头的大小WORD Characteristics; //PE文件的属性
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
下面做一些重点介绍:
Machine:
微软也给出了相应平台的宏定义:
NumberOfSections:
用loadPE打开一个PE文件,可以看到其区段:
常用区段:
.text: 代码段,里面的数据都是代码,有的编译器也叫做code段,其实都是宏定义的;
.data:数据段(可读写),存放全局变量和静态变量;
.rdata:数据段(只读);
.idata:导入数据区段,存放导入表数据信息;
.edata:导出数据区段,存放导出表数据信息;
.rsrc:资源段;
.bss:存放未初始化数据;
.crt:c++ 运行时库 runtime;
.reloc:重定位;
.tls:线程局部存储。
Characteristics:
PE文件的属性,相应宏定义如下:
扩展PE头
其结构体成员如下:
typedef struct _IMAGE_ROM_OPTIONAL_HEADER {WORD Magic; //文件类型的标识 32位的PE还是64位PEBYTE MajorLinkerVersion; //链接器主版本号BYTE MinorLinkerVersion;//链接器子版本号DWORD SizeOfCode; //区段的总大小DWORD SizeOfInitializedData; //已初始化数据段的大小DWORD SizeOfUninitializedData;//未初始化数据段的大小DWORD AddressOfEntryPoint; // 程序入口RVADWORD BaseOfCode; //代码段机址RVADWORD BaseOfData;//数据段基址RVADWORD BaseOfBss;//入口点,文件在内存中的首选装入地址DWORD GprMask;DWORD CprMask[4];DWORD GpValue;
} IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER;typedef struct _IMAGE_OPTIONAL_HEADER64 {WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD
免杀基础之一文学废PE文件格式相关推荐
- python免杀基础——三步(查杀、连接、代码)情况
python免杀基础 目录 python免杀基础 1.远程调用shellcode.使用windowAPI: (1)查杀情况 (2)连接情况 (3)代码情况 2.远程加载shellcode和执行代码 ( ...
- GoPass系列免杀基础(一)
Goby社区第 23 篇插件分享文章 全文共:7730 字 预计阅读时间:20 分钟 小板凳提示:过数字全家桶(开启晶核).某绒.卡巴.WD.某管家.魔法保姆.机器人.橘子,全程新手简单版,欢迎师傅们 ...
- TideSec远控免杀学习一(免杀基础+msfvenom隐藏的参数)
参考链接:https://mp.weixin.qq.com/s/3LZ_cj2gDC1bQATxqBfweg 参考资料 免杀技术有一套:https://anhkgg.com/aanti-virus/ ...
- 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...
- 【黑客免杀攻防】读书笔记1 - 初级免杀基础理论(反病毒软件特征码提取介绍、免杀原理、壳)...
在52pojie发表<xxxx>病毒查杀的帖子后,感谢论坛里的会员GleamJ牛不但指出我文章后所添加服务名字符串作为特征码方式的不足,还分享了他工作中4种提取特征码的方法.让我更加觉得要 ...
- PHP-Webshell免杀研究
不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~ 有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软件查 ...
- 免杀的N种姿势-基础篇
免杀概念 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV),逐字翻译为"反-反病毒", ...
- 黑客攻击-木马免杀之PE文件
当你好不容易弄出来一个木马(具体可参考这里)的时候,却被杀毒软件轻易的就检测出来了,那一切岂不是白费了.Win10中的windows defender基于流量检测很容易把常见的木马程序检测出来,那怎么 ...
- 远控免杀从入门到实践(1):基础篇
郑重声明 1.文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 2.文中提到的杀软检测指标是 virustotal.com(简称 ...
- 远控免杀专题文章(1)-基础篇
脉搏文库 TideSec [](javascript:void(0)) 2020-02-20 6,218 *前**言* 一直是从事web安全多一些,对waf绕过还稍微有些研究,但是对远控免杀的认知还大 ...
最新文章
- mysql两列查询结果列拼接一个表输出_sql select语句,查询出两列结果拼接在一起...
- devmem 实际应用到 驱动中 通用接口
- @Data注解使用后get set报错解决方法
- 12- Library at ROM
- VS2010(VS2008)下安装配置OpenCV
- 树莓派debian配置lamp【解决apache不显示php】
- SQL Server将数据库中的表复制到另一个数据库
- 短板决定高度 | 人工智能的数学基础
- 大学计算机试卷分析报告,(最新整理)大学试卷分析报告
- 好莱坞标志将以NFT形式进行慈善拍卖
- 小程序云函数实现微信支付如此简单
- 苏宁易购正在“酝酿”下一场蝶变?
- Router Support for Fine-Grained Latency Measurements阅读笔记
- 计算机制图基本知识6,机械制图基础知识
- migration php,Lavarel常用语句之Migration
- 同一个人两次被雷电击中,张益唐攻克世纪难题朗道-西格尔零点猜想?
- 导数的定义、性质与求导
- 计算机动画 vr技术应用,三维动画与VR交互和虚拟现实性技术的结合
- 产能提升咨询项目阶段评审结果
- 缓冲器74HC541D/SN74HC541PWR/74HC541PW/AIP74HC541最新中文资料