图解PE文件实例研究
一 使用Win32汇编的PE信息查看小工具查看和研究PE文件
PE信息查看工具有多种。下面先使用在《Windows PE权威指南》中所附带的用Win32汇编编写的PE信息查看小工具来查看PE信息。此处可下载《Windows PE权威指南》所附带源码:
http://pan.baidu.com/s/1o6Odgl8
该程序用Win32汇编写成,可执行文件仅有9K,当作一个PE信息查看工具挺不错的;
以下用上面说的peinfonor.exe打开PE文件;
1 查看一个Win32汇编写的窗口程序,该程序有窗口和菜单;
PE文件结构中区段表也称节表,其作用相当于一本书中的目录;此程序有四个节;.text为代码段;.rdata为只读数据区段;.data为可读写的数据段;.rsrc为资源区段。
导入了Windows自身的动态链接库user32和kernel32;导入表在.rdata节;
2 打开一个纯SDK所写的窗口程序,该程序实现了简单键盘钩子功能,有菜单;
节的数量为6;.idata为导入数据区段;.reloc区段包含重定位信息;
导入表在.idata节;导入了Windows的三个核心动态库:user32, kernel32,gdi32;
PE文件基址重定位(Base Relocation),程序编译时每个模块有一个优先加载地址ImageBase,这个值是连接器给出的,因此连接器生成的指令中的地址是在假设模块被加载到ImageBase前提之下生成的,那么一旦程序没有将模块加载到ImageBase时,那么程序中 的指令地址就需要重新定位,例如:假设一个可执行文件,基址是0x400000,在这个image偏移0x1234处是一个指针,指向一个字符串,字符串始于实际地址0x404002处,所以指针应该是0x404002,加载文件时,由于种种原因,加载器决定把他加载到0x600000处,连接器假设的地址和实际的地址之差成为delta,上例delta为0x200000,整个位置提高了0x200000,那么字符串位置应该为0x604002,原来指向字符串的指针就错误了,所以要把delta加到指针值中,为了让加载器有这样的能力做调整,可执行文件内含许多个"基址重定位项",给那些存放指针的位置使用,加载器必须把delta加载到各个基址上。本例中应该把0x200000加给原来的指针值,0x404002,并将0x604002写回原处。
3 打开一个VC++的简单单文档程序;编译为debug版本;
节的数量为7;.textbss - 这节是和微软Incremental Linking(增量链接)特性相关的;
导入了两个MFC的DLL;
导入了Windows自带的DLL;
很多的重定位项。
4 打开一个.Net所写的简单程序,一个窗口上面有几个控件;编译为Debug;
节的数量-3;
导入一个mscoree.dll,导入表所处节为.text;没有其他的导入库;这个mscoree.dll应该是和.net运行时相关的;
一旦没有MSCOREE.DLL,.net程序,就算是最简单的Hello World也无法运行;
上述3中打开的VC所写的程序中导入的Windows自身的三个核心动态库所实现的功能,应该是由.Net运行时实现的。
由上述可见,实现大体相同的功能,Win32汇编所写程序最小,SDK写的变大,VC++写的更大;VC++所写除了导入Windows自身的动态库,还导入MFC的动态库;.Net所写的.exe文件虽不太大,但是必须要有.Net运行时的支持;很多的功能由.Net运行时代替实现。
图解PE文件实例研究相关推荐
- 基于windows PE文件的恶意代码分析;使用SystemInternal工具与内核调试器研究windows用户空间与内核空间...
基于windows PE文件的恶意代码分析:使用SystemInternal工具与内核调试器研究windows用户空间与内核空间 ******************** 既然本篇的主角是PE文件,那 ...
- 小甲鱼 OllyDbg 教程系列 (二) :从一个简单的实例来了解PE文件
小甲鱼视频讲解: https://www.bilibili.com/video/av6889190?p=6 https://www.bilibili.com/video/av6889190?p=7 从 ...
- 图解VC++版PE文件解析器源码分析
该源码下载自 http://download.csdn.net/download/witch_soya/4979587 1 Understand 分析的图表 2 PE结构解析的主要代码简要分析 首先看 ...
- 对Windows 平台下PE文件数字签名的一些研究
Windows平台上PE文件的数字签名有两个作用:确保文件来自指定的发布者和文件被签名后没有被修改过.因此有些软件用数字签名来验证文件是否来自家厂商以及文件的完整性,安全软件也经常通过验证文件是否有数 ...
- PE文件学习笔记(五):导入表、IAT、绑定导入表解析
1.导入表(Import Descriptor)结构解析: 导入表是记录PE文件中用到的动态连接库的集合,一个dll库在导入表中占用一个元素信息的位置,这个元素描述了该导入dll的具体信息.如dll的 ...
- PE文件和COFF文件格式分析——导出表
在之前的<PE可选文件头>相关博文中我们介绍了可选文件头中很多重要的属性,而其中一个非常重要的属性是(转载请指明来源于breaksoftware的CSDN博客) IMAGE_DATA_DI ...
- PE文件和COFF文件格式分析——RVA和RA相互计算
之前几节一直是理论性质的东西非常多.本文将会讲到利用之前的知识得出一个一个非常有用的一个应用.(转载请指明来源于breaksoftware的csdn博客) 首先我们说下磁盘上A.exe文件和正在内存中 ...
- PE文件和COFF文件格式分析--MS-DOS 2.0兼容Exe文件段
MS 2.0节是PE文件格式中第一个"节".其大致结构如下:(转载请指明来源于breaksoftware的csdn博客) 在VC\PlatformSDK\Include\WinNT ...
- PE文件和COFF文件格式分析--概述
刚工作的时候,我听说某某大牛在做病毒分析时,只是用notepad打开病毒文件,就能大致猜到病毒的工作原理.当时我是佩服的很啊,同时我也在心中埋下了一个种子:我也得有这天.随着后来的工作进行,一些任务的 ...
最新文章
- # 2017-2018-1 20155224 《信息安全系系统设计基础》实验四
- 在MAC上搭建eclipse+android开发环境以及eclipse的svn插件的安装
- redis集群安装和java应用
- Linux培训教程 Git在linux下的使用
- 使用docker commit将修改后的容器保存为镜像及其使用注意事项
- java redis 命令_命令界面:使用Java中的动态API处理Redis
- 明白90/10的原理吗?
- Nginx加密与上游服务器的TCP网络通信
- 分布式链路追踪(Sleuth、Zipkin)
- HCIE-Security Day9:5个实验理解NAT Server
- Ubuntu安装Apache+PHP
- SLAM_信息矩阵协方差矩阵
- [多图]Maclean的巴厘岛游记
- java根据中文汉字获取拼音——java
- 国内外中英文版一元购网站开发案例源码
- 计算机excel中钱的符号,在excel中输入钱的符号
- Android 相机预览 横屏竖屏 -- 显示
- 亿图图示----MindMaster思维导图示例
- 做玫瑰花的方法 用纸_用纸折玫瑰花的方法简单又快速
- 鸿蒙首推机型,华为Mate 40成首载鸿蒙机型,花粉终于如愿所偿!
热门文章
- PyQt5 技术篇-调用消息对话框(QMessageBox)进行简单提示!
- C++ leetCode 判断一个整数是否为回文数 9. 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- codeforces831c 思维
- java精确测量文本高度_Android精确测量文本宽高及基线位置的方法
- Sympy常见多个变量【一行代码创建】
- 2.1.3 正则化(归一化)的用处以及何时使用
- 选择纯种犬还是杂种犬?
- vue 中使用scss
- Laravel 系列入门教程(一)【最适合中国人的 Laravel 教程】
- css3+jQuery制作导航菜单(带动画效果)