深入剖析PE文件】的更多相关文章

不赖猴的笔记,转载请注明出处. 深入剖析PE文件 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一.        基本结构. 上图便是PE文件的基本结构.(注意:DOS MZ Header和部分PE header的大小是不变的:DOS stub部分的大小是可变的.) 一个PE文件至少需要两个Section,一个是存放代码,一个存放数据.NT上的PE文件基本上有9个预定义的Section.分别是:.t…
工程文件petype.cpp通过调用pefile类中的函数获取文件类型. 文件类型的判断通过5个监测点完成. 监测点1:dos头的e_magic 监测点2:nt头的Signature 监测点3:文件头的Characteristics 监测点4:可选头的Magic 监测点5:可选头的Subsystem 通过监测点1和2判断是否是pe文件: 通过监测点3判断文件是否是动态库文件 通过监测点4判断文件是pe32还是pe32+还是rom映像 通过监测点5判断文件是否是0环可执行文件[驱动文件],还是3环…
一.开篇 开篇我想讲一下于本文无关的话题,其实我很想美化一下自己博客园一直没时间弄,无意间找了博客园李宝亨的博客园里面有一篇分享自己主题的文章,我就将这个模板暂时用作我的blog主题,我要讲述一个关于PE文件结构的文章,这篇文章动手能力比较强,希望大家能够动手进行操作,这边文章篇幅有可能会长一些,为了方便大家阅读我可以将其分为几个部分进行讲解,主要分为以下几个部分: ①  PE文件头 ②  导入表 ③  导出表 ④  资源表 下面我来讲解下为什么要学PE文件结构,因为了解PE文件结构就会了解到数…
合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com 综述: 首先说明我也只是PE文件的初学者,我所写的都是自己的学习记录.前3节学习了PE的一些结构,其中包括DOS头和PE头部分.总是这样去学习这些机构和理论的分析我想大家和我一样毫无兴趣,提不起精神.所以我尝试着在自己对PE了解的基础上用C++写一个小程序分析PE结构文件.我所接触的教程都是Win32汇编去实…
合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com 最近比较忙,只能抽节假日去学习和记录自己的学习,这一节我记录自己学习PE头的学习.在这里给大家介绍一本很好的学习PE的书:Windows PE权威指南.上一节我们一起学习DOS头.DOS头很多内容在16位DOS系统下面才会用到.在现在的Win32系统中,这些事冗余. 因此我们关注更多的是PE头而非DOS头.首…
合肥程序员群:49313181.    合肥实名程序员群 :128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com PE文件结构综览: 首先上图片: 看到上面的图片可以清晰的看到PE结构复杂结构式什么样子的.有DOS首部,PE头部,PE节表,很多的表块,最后就是一些调试信息. DOS头由DOS 'MZ' HEADER 和DOS stub组成,DOS "MZ"头中的MZ是PE文件的一个标志之一.后期我们在写PE小工…
接下来的内容来源于对该博客文章http://www.pediy.com/kssd/pediy06/pediy7006.htm的解析. 一.打印Sections信息.下面的程序打印出Windows_Graphics_Programming 1.1中第三个程序“Hello World Version 3:Create a Full-Screen Window"生成的可执行文件的Sections结构字节的信息 #include<stdio.h> #include<windows.h&…
当一个PE文件被执行时,PE装载器首先检查DOS MZ header里的PE header的偏移量.如果找到,则直接跳转到PE header的位置. 当PE装载器跳转到PE header后,第二步要做的就是检查PE header是否有效.如果该PE header有效,就跳转到PE header的尾部. 紧跟PE header尾部的是节表.PE 装载器执行完第二步后开始读取节表中的节段信息,并采用文件映射方法将这些节段映射到内存,同时附上节表里指定节段的读写属性. PE文件映射入内存后,PE装载器…
合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com PE概述: 在从写程序开始就知道exe后缀名.当然不是程序员,看到*.exe这样的都知道是window下的可执行文件.当时有多少人深入去想过这是什么呢??为什么直接双击就会运行??当然站在程序员角度,.exe这个后缀名其实也只是文件,从本质上讲它和.doc文件没什么区别,都是文件.这个就是被称为PE文件的特殊文…
好了,还是这张图,还是一样的Hello world. 因为本章其实很多都是讲一些命令行编译啊什么鬼的配置类的东西,要用的时候直接百度或者回头查书就可以了, 所以了解一下也就行了,也没有记录下来,接下来讲得只是我认为很有用的东西. 关于引用 请看上图,MyTest程序集下面有个引用,引用里面大家都知道有很多dll,而我们的源代码中只有那5个using引用某dll里的具体的命名空间. (引用这些dll只会对编译器造成一点影响,并不会影响最终生成的文件,更不会去影响最终的性能) 也就是说,无论你引用多…
原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable", 可移植的可执行文件)文件格式,是微软Windows NT, 中Win32.Win32s中的可执行的二进制的文件格式. 包括:.exe, .dll, .sys, .com, .ocs. PE文件最重要的两个因素: 1.磁盘上的可执行文件和它被映射到windows内存之后的格式非常相像. 2.对于Win32…
修改入口函数地址.这个是最省事的办法,在原PE文件中新增加一个节,计算新节的RVA,然后修改入口代码,使其指向新增加的节.当然,如果.text节空隙足够大的话,不用添加新节也可以. BOOL ChangeOEP(CString strFilePath) { FILE* rwFile; // 被感染的文件 IMAGE_SECTION_HEADER NewSection; // 定义要添加的区块 IMAGE_NT_HEADERS NThea; // DWORD pNT; // pNT中存放IMAGE…
资源是PE文件中非常重要的部分,几乎所有的PE文件中都包含资源,与导入表与导出表相比,资源的组织方式要复杂得多,要了解资源的话,重点在于了解资源整体上的组织结构. 我们知道,PE文件资源中的内容包括:光标.图标.位图.菜单等十几种标准的类型,除此之外,还可以使用自定义的类型,每种类型的资源中,可能存在多个资源项,这些资源项用不同的ID或者名称来分辨,在某个资源ID下,还可以同时存在不同代码页的版本. PE文件中资源的组织方式 资源的组织方式 获取资源的位置 资源目录 资源数据入口 我们怎么获取资…
[文章标题]: 纯手工编写的PE可执行程序 [文章作者]: Kinney [作者邮箱]: mohen_ng@sina.cn [下载地址]: 自己搜索下载 [使用工具]: C32 [操作平台]: win 7 [作者声明]: 只是感兴趣,没有其他目的.失误之处敬请诸位大侠赐教! ----------------------------------------------------------------------------------------------------------------…
DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE_FILE_HEADER  20个字节 PE文件头       IMAGE_OPTIONAL_HEADER32  96个字节 数据目录表         16*8=128个字节 IMAGE_SECTION_HEADER    40个字节 块表              IMAGE_SECTION_HEADER…
前几天和朋友交流技术,提到手工打造微型PE文件,他说现在网上流传的大部分版本在XP SP3下都不能运行,于是心血来潮,拍着胸脯说:“你放心,忙完了帮你做一个.”后来花了半天时间,终于打造出一个XP下可运行的微型PE,弹出一个对话框,292字节,当然这离极限也许还差得远,不过自己做了一次,还是有些心得,贴出来和大家分享一下.本文介绍的这个MiniPE可以在下载:http://download.csdn.net/source/774041 第一步 准备PE文件先创建一个PE文件,为了尽可能地小,我们…
1.实例1国外的人写的最小的PE文件--97Bytes 4D5A0000504500004C0101006A2A58C30000000000000000040003010B0108000400000000000000040000000C000000040000000C0000000000400004000000040000000400000000000000040000000000000068000000640000000000000002 功能:Do Nothing 2.实例2--161Byt…
我们已经学了许多关于 DOS header 和 PE header 的知识.接下来就该轮到 section table(节表)了.节表其实就是紧挨着 PE header 的一结构数组.该数组成员的数目由 file header (IMAGE_FILE_HEADER)结构中 NumberOfSections 域的域值来决定.节表结构又命名为 IMAGE_SECTION_HEADER. IMAGE_SIZEOF_SHORT_NAME equ 8 IMAGE_SECTION_HEADER STRUCT…
今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见的EXE.DLL.OCX.SYS.COM都是PE文件. 我们知道,一个Windows程序,它所实现的所有功能最终几乎都是调用系统DLL提供的API函数.要使用任何一个DLL所提供的函数,我们需要将它导入,也就是用到了导入表.然而对于那些提供了被导出的函数的DLL程序来说,他们必须使用导出表将函数导出,之后别的…
一.PE文件基本结构 上图便是PE文件的基本结构.(注意:DOS MZ Header和部分PE header的大小是不变的:DOS stub部分的大小是可变的.) 二.Section 详解 一个PE文件至少需要两个Section,一个是存放代码,一个存放数据.NT上的PE文件基本上有9个预定义的Section.分别 是:.text, .bss, .rdata, .data, .rsrc, .edata, .idata, .pdata, 和 .debug.一些PE文件中只需要其中的一部分Secti…
PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. 基本结构. 上图便是PE文件的基本结构.(注意:DOS MZ Header和部分PE header的大小是不变的:DOS stub部分的大小是可变的.) 一个PE文件至少需要两个Section,一个是存放代码,一个存放数据.NT上的PE文件基本上有9个预定义的Section.分别是:.text, .bss, .rdata, .data, .rsrc,…
PE(Portable Execute)文件是WIN32下可运行文件遵循的数据格式,也是反汇编调试不可缺少的文件,常见的pe文件有.exe和.dll文件.本文主要介绍pe文件的结构和虚拟内存地址转换到文件地址的方法. pe文件的基本结构 主要的pe文件主要包含下面部分:例如以下图 .text节:由编译器产生,村反击本的二进制机器码,我们调试非常烦会变得而主要对象. .data节:数据块,宏定义,全局变量,静态变量等. .idata节:可运行文件使用的动态链接库和外来函数信息与文件信息等. .rs…
PE文件的图标存储在资源文件中,而操作资源要用到的API函数就是UpdateResource首先我们需要先了解一下ICO格式,参考资料:http://www.moon-soft.com/program/FORMAT/windows/icons.htmICO格式不复杂,就是由数据头.数据目录.数据三个部分组成 一个.ico文件中可能含有若干个图标,我们需要将数据目录和数据解析出来.简单地写了个单元 unit Icons; interface uses Winapi.Windows, System.…
api hook技术的难点,并不在于hook技术,而在于对PE结构的学习和理解.如何修改api函数的入口地址?这就需要学习pe可执行文件(.exe,.dll等)如何被系统映射到进程空间中,这需要学习pe格式的基本知识.windows已经提供了很多数据结构struct帮助我们访问pe格式,记住它们,我们就不要自己计算格式的具体字节位置这些繁琐的细节.但是从api hook的实现来看,pe格式的访问部分仍然是整个编程实现中最复杂的一部分,对于经常crack的朋友不在此列. 假设我们已经了解了pe格式…
之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只要将对应的指针类型转化为各个结构类型,就可以使用指针中的箭头来直接寻址到结构中的各个成员. 这次主要说明的是PE文件头的解析,也就是之前看到的第一个界面中显示的内容,这个部分涉及到CPeFileInfo这个解析类的部分代码,以及CPeFileInfoDlg这个对话框类的代码. 选择目标文件 首先通过…
本篇文章转载自小甲鱼的一篇日志,原文地址 我们知道,Windows 将程序的各种界面定义为资源,包括加速键(Accelerator).位图(Bitmap).光标(Cursor).对话框(Dialog Box).图标(Icon).菜单(Menu).串表(String Table).工具栏(Toolbar)和版本信息(Version Information)等. 为了吸引大家的兴趣和目光,咱先来做个学前试验,然后再憧憬一下我们将来学习的内容有啥意义!好,小甲鱼先来演示一下如何用工具来修改资源实现汉化…
本文转载自小甲鱼PE文件详解系列教程原文传送门 当应用程序需要调用DLL中的函数时,会由系统将DLL中的函数映射到程序的虚拟内存中,dll中本身没有自己的栈,它是借用的应用程序的栈,这样当dll中出现类似于mov eax, [1000000]这样直接寻址的代码时,由于事先并不知道它会被映射到应用程序中的哪个位置,并且可能这个内存地址已经被使用,所以当调用dll中的函数时,系统会进行一个基址重定位的操作.系统是根据dll中的基址重定位表中的信息决定如何进行基址重定位,哪些位置的指令需要进行基址重定…
本文转载自小甲鱼PE文件讲解系列原文传送门 这次主要说明导出表,导出表一般记录着文件中函数的地址等相关信息,供其他程序调用,常见的.exe文件中一般不存在导出表,导出表更多的是存在于dll文件中.一般在dll中保存函数名称以及它的地址,当某个程序需要调用dll中的函数时,如果这个dll在内存中,则直接找到对应函数在内存中的位置,并映射到对应的虚拟地址空间中,如果在内存中没有对应的dll,则会先通过PE加载器加载到内存,然后再进行映射 导出表结构 导出表(Export Table)中的主要成分是一…
这篇文章转载自小甲鱼的PE文件详解系列原文传送门 之前简单提了一下节表和数据目录表,那么他们有什么区别? 其实这些东西都是人为规定的,一个数据在文件中或者在内存中的位置基本是固定的,通过数据目录表进行索引和通过节表进行索引都是可以找到的,也可以这么说,同一个数据在节表和数据目录表中都有一份索引值,那么这两个表有什么区别?一般将具有相同属性的值放到同一个节区中,这也就是说同一个节区的值只是保护属性相同,但是他们的用途不一定是一样的,但是在同一数据目录表中的数据的作用是相同的,比如输入函数表中只会保…
在前面几节中经常提到相对虚拟地址RVA,在这篇博客中主要说明这个概念.本来是想接着转载小甲鱼的,但是我自己根据这篇文章和他的视频来学习的时候,发现在RVA与文件的相对偏移地址进行转化的时候,那块我看不懂,不知道为什么要这样转化,而且前面很多东西都反复讲了好多遍,比如对齐的问题,所以,这篇我就自己根据自己掌握的情况来写,还是在此处放上原文的连接: 原文(上)传送门 原文(下)传送门 什么是RVA 某个位置的RVA是该位置在内存中的地址相对于整个文件在内存中首地址的偏移值,举个例子,当PE文件中某个…