pe文件

解析PE文件

那年仲夏 提交于 2019-12-03 05:39:25
最近在自学解析PE文件,根据小辣椒(CFF Explorer)以及各论坛上大佬的帖子,做了个黑屏打印PE文件的,历时7天完成,在此想跟有相关需要的同学们分享下思路,有不足之处也希望大家不吝赐教,指点出来。谢谢。 PE文件主要有DOS头,NT头(包含PE头,可选PE头,可选PE头中又包含着一个数据目录,里面包含了其他表单的RVA和大小),节表 表单主要有导出表,导入表,重定位表,资源表。除了资源表外,其他表单的各项数据都用代码实现了打印。 首先通过CreateFile打开文件,获得文件句柄,随后调用CreateFileMapping生成内存映射对象,再调用MapViewOfFile获得文件映射基址。 DOS头RVA=(IMAGE_DOS_HEADER)映射基址; NT头RVA=(IMAGE_NT_HEADERS)DOS头+DOS头->e_lfanew的值; PE头RVA=&((IMAGE_FILE_HEADER)NT头->FileHeader); 可选PE头RVA=&((IMAGE_OPTIONAL_HEADER)NT头->OptionalHeader); 节表RVA=IMAGE_FIRST_SECTION(NT头);//节表的位置=DOS头大小(确定)+标准PE头大小(确定)+可选PE头大小(标准PE头的成员.SizeOfOptionalHeader记录了可选PE头大小) 节表数量

PE文件代码膨胀

匿名 (未验证) 提交于 2019-12-03 00:38:01
https://bbs.pediy.com/thread-223629.htm asmjit参考 https://www.cnblogs.com/lanrenxinxin/p/5021641.html 1.代码对push/mov/add/sub/cmp指令进行膨胀 2.对push/mov的立即数进行加密 3.跳转call指令转为如下指令进行变形 /* <---esp3 |__| -16 |__| -16 |_reg2_esp0_| -16 |__| -16 |__| -12 |__| -12 |_reg1_| -12 |__| -12 |__| -8 <---esp1 |__| -8 <---esp2 |_reg2_| -8 |__| -8 <---esp4 |_reg2_| -4<--esp0 |_Jmp_addr_| -4 |_Jmp_addr_| -4 |_Jmp_addr_| -4 |_reg1_| 0 |_reg1_| 0 |_reg1_| 0 |_ret_addr_| 0 push reg1 push reg2 ;---->esp1 mov reg2, jmp_offset add reg2, addr_table_base ;根据地址表索引找到正确偏移值 mov reg1, dword ptr ds:[reg2] add reg1, base ;加上基地址,

DOS文件头和DOS块

匿名 (未验证) 提交于 2019-12-02 23:42:01
可执行文件的向下兼容性 DOS下执行一个PE文件? PE文件中的DOS部分由MZ格式的文件头和可执行代码部分组成,可执行代码被称为“DOS块”(DOS stub长度不定) DOS文件头的基本作用: 1、若在DOS下执行一个PE文件,系统可以将文件解释为DOS下的.exe可执行格式,并执行DOS部分的代码。 文章来源: https://blog.csdn.net/dyxcome/article/details/91357880

PE操作类--判断PE文件

匿名 (未验证) 提交于 2019-12-02 23:39:01
判断一个文件是否为合法PE文件通常只需判断“MZ”头和“PE”头 //判断是否为PE结构 BOOL CPe32 ::IsPeFile(TCHAR* pFileName) { if (pFileName == NULL) { return FALSE ; } //获得指定文件句柄 HANDLE hFile = CreateFile (pFileName, GENERIC_READ , FILE_SHARE_READ , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , 0); if (hFile == NULL || hFile == INVALID_HANDLE_VALUE) { return FALSE ; } WORD dwTempRead; //word 占两个字节,就是头两个字节,两字节的缓冲区 DWORD dwReadInFactSize; //读取字节数=2 //读取文件开始两字节,即MZ头 BOOL bRead = ReadFile(hFile, &dwTempRead, sizeof( WORD), &dwReadInFactSize, NULL); if (!bRead || sizeof (WORD) != dwReadInFactSize) { CloseHandle(hFile); return FALSE ; }

PE文件操作类

匿名 (未验证) 提交于 2019-12-02 23:39:01
1、分析类中需要存储的信息 2、声明类 3、类构造函数:传入PE文件完整路径,判断PE文件合法性,加载PE文件,为PE各部分结构体指针变量赋值。 4、析构函数:释放内存 5、赋值函数:为PE各结构体的指针赋值 文章来源: https://blog.csdn.net/dyxcome/article/details/91358059

关于pe结构

左心房为你撑大大i 提交于 2019-12-01 08:31:08
每一种操作系统它最重要的格式就是它的可执行文件格式, 因为操作系统就是为了支持这些文件而生成的,内核里面有很多机制,也是配合这种文件格式设计的。 换句话说,这种文件格式也是适合操作系统设计的。 比如: PE 它是 windows 下的文件格式,是 MZ 打头的(4D5A)只有两个字节,后面很大一片就是对这个结构体的管理, 比如:声音在什么位置,图像在什么位置,文字在什么位置,在前面这一片都是有记录的, 也就是说,前面开头不只是标志而已,前面这一片是一个结构体。 PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等 1.pe文件的两种状态 pe文件,例如.exe文件,在磁盘中和内存中的状态是不同的; 例如:用winhex打开一个测试程序crackme.exe; 直接打开,和在内存中打开,比较两种状态的区别; 1)直接打开 运行winhex ->file ->open ->选择crackme.exe 2)在内存中打开 运行winhex ->运行crackme.exe使程序加载到内存 ->tools-> open Memory ->找到crackme.exe 3)比较pe文件两种状态下的区别 1】开头部分 磁盘中: 内存中: 可以看到: 两种状态下开头部分都一样; 磁盘中的pe文件总是以00000000开头

JAVA用geotools读写shape格式文件

流过昼夜 提交于 2019-11-29 05:52:02
转自:http://toplchx.iteye.com/blog/1335007 JAVA用geotools读写shape格式文件 (对应geotools版本:2.7.2) (后面添加对应geotools 10.0版本的写法) 读shape文件。 shape格式文件最少包含3个文件,他们的后缀是:.shp, .dbf, .shx。 .shp存储地理形状和位置信息,.dbf存储属性信息,.shx是索引文件。 单独读取DBF文件 public void readDBF(String path) { Java代码 DbaseFileReader reader = null ; try { reader = new DbaseFileReader( new ShpFiles(path), false , Charset.forName( "GBK" )); DbaseFileHeader header = reader.getHeader(); int numFields = header.getNumFields(); //迭代读取记录 while (reader.hasNext()) { try { Object[] entry = reader.readEntry(); for ( int i= 0 ; i<numFields; i++) { String title =

专杀工具-熊猫烧香

寵の児 提交于 2019-11-26 20:05:22
转载自看雪论坛大神-江湖百晓生 https://bbs.pediy.com/thread-250115.htm 复现熊猫烧香 熊猫烧香的介绍 熊猫烧香是一个感染性的蠕虫病毒,它能感染系统中的 exe ,com ,pif,src,html,asp 等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为 gho 的文件,该文件是一系统备份工具 GHOST 的备份文件,使用户的系统备份文件丢失。被感染的用户系统中所有的.exe可执行文件图标全部被改成熊猫烧香的图标,如下图所示: 病毒结构分析 从上述的流程图中我们可以看到,含有病毒体的文件被运行后,病毒将自身拷贝至系统目录,同时修改注册表,将自身设置为开机启动项,并遍历各个驱动器,将自身写入磁盘根目录,增加一个 autorun.inf 文件,使得用户打开该盘符时激活病毒体。随后病毒体开一个线程进行本地文件感染,同时开另外一个线程连接网站下载 DDoS 程序发起恶意攻击。 具体行为分析 病毒的主要行为分为以下三部分: 自我保护与自我复制 感染 病毒自我保护 自我保护与自我复制行为就是复制自身到系统目录、双击被感染程序可以检测判断 spcolsv.exe 是否存在,从被感染的文件分裂出病毒程序重新执行。 感染的行为主要是感染全盘(本地)、定时器感染全盘(本地)、局域网感染(联网) 病毒自我保护行为主要是设置注册表、停止杀软

实验1 可移植可执行文件格式应用

淺唱寂寞╮ 提交于 2019-11-26 07:31:37
2.1实验目的 1. 熟悉各种 PE 编辑查看工具,详细了解 PE 文件格式 2. 重点分析 PE 文件文件头、引入表、引出表,以及资源表 2.2实验步骤及内容 PE 文件格式分析 使用 WinHex 观察 PE 文件例子程序 test.exe 的 16 进制数据,在 屏幕截图中 使用图形编辑软件标出 该 PE 文件基本结构 的 DOS 头、 PE 文件文件头、 PE 文件可选文件头、数据目录表、导入表、导出表 。 2. 使用 Ollydbg 对该程序进行初步调试,了解该程序功能结构,在内存中观察该程序的完整结构。 3. 熟悉各类 PE 文件格式查看和编辑工具( PEView 、 PE-Explore 等)。 实验操作过程: 1.1PE 文件分为几个部分,分别是: DOS 头 DOS Stub NT 头( PE 头) 文件头 可选头 区段头(一个数组,每个元素都是一个结构体,称之为 IMAGE_SECTION_HEADER ) .text .rdata .data .rsrc .reloc ... 1.2 DOS 头和 DOS Stub 在文件的开始有两位 16 进制数据 4D 5A ,对应 ASCII 字符是 MZ ,这是 DOS MZ Header 的标志,即 DOS 头。 DOS Stub 1.3 DOS Header ,其中的 e_lfanew 字段的值为 C0 ,它指向了