4.13~4.17(PE文件结构预习+hook+进程hellow)
发布日期:2023-06-07 22:27:30
浏览次数:31
分类:技术文章
本文共 4366 字,大约阅读时间需要 14 分钟。
常见PE文件结构
常见的PE文件:exe、dll、sys
Ag: exe就不用多说,就是可执行文件 dll动态链接库 对于 Windows 操作系统,操作系统的大部分功能都由 DLL 提供 () sys是system的缩写,就是系统的意思,sys是Windows的系统文件 如安装文件,日志文件,驱动文件,备份文件,操作如播放等文件,还有些垃圾文件等诸如此类PE指纹
标志MZ、PE
用010编辑器我们观察一下 有什么用呢? 若果我改了文件扩展名(木马),但是其中的本质没有变 当然也可以用PEiD工具查看PE文件结构
从上面着两张图,我们对比上面010编辑区的图 从PE往下,就会看到块的部分 常见的区段 ,text段。一般是代码段 .data段。一般是数据段 .bss段。未初始化数据段。比如static变量,有时在函数内才初始化。 .idata和.edata段。导入表、导出表信息 .rsrc段。资源段 .reloc段。重定位信息段。 理解成容器,从汇编语言角度可以理解,我们知道用编写的程序是可以直接在CPU上工作的,而一个程序是需要代码段,数据段,栈段,同样可以放在这里理解winnt.h
DOS部分
DOS MZ文件头(实际是一个64字节的IMAGE_DOS_HEADER结构体) 如何确定是64字节? PE文件头的起始地方由DOS MZ文件头中的内容确定 e_lfanew指向PE文件头的地址 看到010编辑器的图片,我们可以看到最后四个字节,就是地址 注意在汇编指令中,存储的方式是从高字节到低字节读取 DOS块链接器的信息(可以用来隐藏信息)PE文件头
从代码层面看,方便我们就看32的typedef struct _IMAGE_NT_HEADERS { DWORD Signature;标识 IMAGE_FILE_HEADER FileHeader;标准PE头20个字节 IMAGE_OPTIONAL_HEADER32 OptionalHeader;扩展PE头224个字节} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;为什么扩展PE文件头这么大? IMAGE FILE HEADER TimeDateStamp:表示文件的创建时间。这个值是自 1970 年1月日以来用格林威治时间GMT厂计算的秒数]是一个比文件系统的日期/时间更精确的文件创建时间指示器。 PointerToSymbolTable:COFF 符号表的文件偏位置(参见 Microsof 规范的5.4节)。因为采用了较新的debug格式,所以COFF 符号表在 PE 文件中较为少见 Number0fSymhols:如果有 COFF 符号表,它代表其中的符号数目 Size0f0ptionalHeader: 紧跟IMAGE_FILE_HEADER,表示数据的大小。在 PE 文件中,这个数据结构叫作IMAGE OPTIONAL HEADER,其大小依赖于当前文件是32 位还是64位文件 Characterislics:文件属性,有选择地通过几个值的运算得到。这些标志的有效值是定义于winnth 内的IMAGE_FILE_xx 值,。警通 EXE 文的这个字的值一般是010fh.DLL 文件的这个字段的值一般是 2102h
把值转换位二进制对应到上面的表中
扩展PE文件头
typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic;/说明文件的类型 PE32 : 10BH PE32+(64位): 20BH Rom映像文件:107H BYTE MajorLinkerVersion;/链接器主版本号 BYTE MinorLinkerVersion;/链接器次版本号 DWORD SizeOfCode;/所有代码节的总和( 基于文件对齐 ) 译填的 没用 DWORD SizeOfInitializedData;/包含所有已经初始化数据的节的总大小 编译器填的 没用 DWORD SizeOfUninitializedData;/包含未初始化数据的节的总大小 编译器填的 没用 DWORD AddressOfEntryPoint;/程序入口RVA、在大多数可执行文件中,这个地址不直接指向Main、WinMain或DIMain函数,而指向运行时的库代码并由它来调用上述函数 DWORD BaseOfCode;/代码起始RVA,编译器填的 没用 DWORD BaseOfData;/数据段起始RVA,译器填的 没用 NT additional fields. DWORD ImageBase;/内存镜像基址,可链接时自己设置 DWORD SectionAlignment;/内存对齐,一般一页大小4k DWORD FileAlignment;/文件对齐,一般一区大小512字节,现在也多4k WORD MajorOperatingSystemVersion;/标识操作系统版本号 主版本号 WORD MinorOperatingSystemVersion;/标识操作系统版本号 次版本号 WORD MajorImageVersion;/PE文件自身的主版本号 WORD MinorImageVersion;/PE文件自身的次版本号 WORD MajorSubsystemVersion;/运行所需子系统主版本号 WORD MinorSubsystemVersion;/运行所需子系统次版本号 DWORD Win32VersionValue;/子系统版本的值,必须为0 DWORD SizeOfImage;/内存中整个PE文件的映射的尺寸,可以比实际的值大,必须是SectionAlignment的整数倍 DWORD SizeOfHeaders;/所有头+节表按照文件对齐后的大小,否则加载会出指 DWORD CheckSum;/校验和,一些系统文件有要求用来判断文件是否被修改 WORD Subsystem;/子系统 驱动程序(1) 图形界面(2) 控制台、DUL(3) WORD DllCharacteristics;/文件特性 不是针对DLL文件的 DWORD SizeOfStackReserve;/初始化时保留的栈大小 DWORD SizeOfStackCommit;/初始化时实际提交的大小 DWORD SizeOfHeapReserve;/初始化时保留的堆大小 DWORD SizeOfHeapCommit;/切始化时保留的堆大小 DWORD LoaderFlags; DWORD NumberOfRvaAndSizes;/数据目录项数目 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];/数据目录表} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
区块表
raw:未经加工的;生的;原始的;未制的;未的;自然状态的;未经处理的; 未经分析的; 未经训的;红肿疼的: 工作生的;冷的;真实的 raw offset : 物理地址 ( study pe工中为raw address ) file offset : 文件偏移地址 ( study pe工中为raw address ) 当PE文件存储在磁盘中时,某个数据的位置,相对于文件头部的偏移量 文件偏移地址 文件存储在磁盘中时,某个数据的位置,相对于文件头部的偏移量称作文件偏移地址( File Offset ) 物理地址( RAW Offset )头部:模块基地址后面:相对虚拟地址010103虚拟地址 = 头部 + 后面= 模块基地址 + 相对虚拟地址
文件偏移地址 虚拟地址 = 模块基地址 + 对拟地址模块基地址exe常见为0x00400000模块基地址dll常见为0x10000000 模块 : PE文件运行后,内存中的版本称为模块,此时模块基地址也叫模块句柄overlay的计算方法
overlay是一个pe文件末尾却不属于任何一个pe结构,相当于直接在pe尾部追加的内容,计算方法是用pe文件总大小减去pe文件内部记录的结构大小(另外pe结构总大小也就是overlay的起始点)
使用时,overlay因为不属于标准pe结构的任一部分,所以不会被系统加载,需要自行使用io操作或者文件映射进行读写rva to raw的计算方法
rva是类似于偏移的存在,只需要用基址+rva就可以
IMAGE_DATA_DIRECTORY IMAGE_SECTION_HEADER
IMAGE_SECTION_HEADER是程序中不同段(如.text)的保存表,保存了段的va、磁盘位置、大小、重定向信息等
pe结构总大小,用pe结构的哪些字段可以算出来?
用IMAGE_SECTION_HEADER里面取pe结构里最后一个段的位置,再加上这个段的大小就可以获得pe结构的总大小
HOOK
钩子
就是拦截技术,在传递指令的信息前,做一个处理 进程hellow就用到了hook的技术 简单理解,就是通过hook,去拿到我们想要执行的函数而不被发现进程hellow
上述主要学习于
转载地址:https://blog.csdn.net/m0_72827793/article/details/130231662 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月25日 19时08分17秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程
2019-04-28
战火再起!字节跳动称腾讯封禁飞书系列产品
2019-04-28
三分钟从入门到精通---Python模块
2019-04-28
Eclipse 官宣,干掉 VS Code !
2019-04-28
5 年 Python ,总结的 10 条 Python 使用技巧
2019-04-28
还没抢到票?试下这个用 Python 写的最新抢票神器
2019-04-28
形象解释 Python 新手最容易犯的错误
2019-04-28
zigbee 源码 02-光敏传感器
2019-04-28
zigbee 源码 03-烟雾传感器MQ-2
2019-04-28
zigbee 源码 04_人体红外传感器
2019-04-28
zigbee 源码 05火焰传感器
2019-04-28
STM32 实现 BootLoader功能(奉上源码)
2019-04-28
物联网实时内核 vnRTOS 免费开源
2019-04-28
自制国产精简内核 vnRTOS 第 2 节 代码结构
2019-04-28
在中国,程序员是青春饭吗?
2019-04-28
5G凭什么比4G快那么多?
2019-04-28
AI 培训之坑,了解一下?
2019-04-28
扒一扒编程语言排行榜
2019-04-28
计算机:上帝不掷骰子,人类居然让我们掷骰子?
2019-04-28
STM32初始化函数的另外一种写法
2019-04-28