sf123,中变传奇,今日刚开一秒变态sf
当前位置:网站首页 > 中变传奇 > 正文

pe格式基础及程程序在内存中 pe格式变不变序的装入

作者:admin发布时间:2022-01-11分类:中变传奇浏览:96评论:8


导读:部分是DOS时代遗留的产物,是PE文件的一个遗传基因,一个程序如果在DOS下也是可以执行,只是提示:“”然后就结束执行,提示执行者,这个程序要在系统下执行。部分是DOS插桩代码,是...

pe格式基础及程序的装入

部分是DOS时代遗留的产物,是PE文件的一个遗传基因,一个程序如果在DOS下也是可以执行,只是提示:“”然后就结束执行,提示执行者,这个程序要在系统下执行。

部分是DOS插桩代码,是DOS下的16位程序代码,只是为了显示上面的提示数据。这段代码是编译器在程序编译过程中自动添加的。

是真正的程序的格式头部,其中包括了PE格式的各种信息,指导系统如何装载和执行此程序代码。

部分是PE代码和数据的结构数据,指示装载系统代码段在哪里,数据段在哪里等。对于不同的PE文件,设计者可能要求该文件包括不同的数据的。所以有一个SectionTable作为索引。Section多少可以根据实际情况而不同。但至少要有一个Section。如果一个程序连代码都没有,那么他也不能称为可执行代码。在SectionTable后,Section数目的多少是不定的。

二、程序的装入

当我们在explorer.exe(资源管理器)中双击某文件,执行一个可执行程序,系统会根据文件扩展名启动一个程序装载器,称之为Loader。Loader会首先检查DOSMZHeader,如果存在,就继续寻找PEheader,如果这两项都不存在,就认为是DOS16位代码,如果只存在DOSMZHeader,而其中又指示了而其中又指示了PEHeader的位置,那么Loader就判定此文件不一个有效的PE文件,拒绝执行。

如果DOSHeader和PEHeader都正常有效,那么Loader就会根据PEHeader及SectionTable的指示,将相应的代码和数据映射到内存中,然后根据不同的Section进行数据的初始化,最后开始执行程序段代码。

三、PE格式高级分析

下面我们以一个真实的程序为例详细分析PE格式,分析PE格式最好有PE分析器,常用的软件是LordPE,也有其它的分析工具和软件如PEEditor、StudPE等。

先分析一下磁盘文件的内容,这里我们使用UltraEdit32(UE)工具,这是一个实用的文件编辑器,可以编辑文本和二进制文件。

这是一个PE文件的DOSHeader,其中我们最关心的就是e_lfanew这个字段的值,它指向了PEHeader在磁盘文件中

通过实验得出,之所以OllDbg会发出如此的警告,是因为该文件的PE信息中AddressOfEntryPoint超出了CodeSection(.text)段所记录的地址(0000000h~00270000h)。将.text判定为代码段,由PE头的BaseOfCode得出。如果将此段代码植入.text段,那么将不会出现此提示。

PE文件能否正常加载执行,与磁盘文件结构密切相关,但一旦将磁盘文件映射为内存镜像后,就与磁盘文件脱离了关系。所以磁盘仅仅是一个规范的数据结构。

通过实验,我们可以得出这样的结论:对于一个小的代码段(其二进制代码长度小于代码段下一节的RVA-(BaseOfCode+代码段的VirtualSize)),植入是成功的。

那么我们通过分析磁盘文件和内存映射的关系,就可以修改代码段,将代码植入到代码段。在植入代码段后,要对PE文件的磁盘数据和进行一次定位修复,就可以完成代码的整体植入。

代码段一般是PE文件的第一个Section,如果此段变长,就要将其后续段的RVA和磁盘偏移地址都要进行修正。修正完成后,仅仅是保证了PE文件的磁盘格式正确,接下来主要就是修改导入表数据,资源表数据。最后要参照原PE文件将新PE文件对数据段的数据的引用进行修正。

至此,我们完成了一次对PE文件新代码的引入问题的研究。但对于一个复杂的PE文件,修改还远不如此。还要处理输出表、TLS表及其它数据的表的内容

标签:程序在内存中 pe格式变不变


已有8位网友发表了看法:

欢迎 发表评论: