存档

文章标签 ‘PE’

PE文件格式学习资料

2011年9月26日 5 条评论

以前学习时收集了一些资料,感觉其中有些资料还是很不错的,现在电脑上的文件也是乱七八糟的,拿出来做个备份。
学习PE最权威的资料当属微软官方的《Microsoft Portable Executable and Common Object File Format Specification》,可能现在文档的名字变了,最新的下载地址在http://msdn.microsoft.com/en-us/windows/hardware/gg463119,点击Accept就可以看到了。
上面的PE文件介绍是[......]

继续阅读

分类: PE文件格式 标签: , ,

系统即时调试器注册表设置

2011年5月26日 没有评论

最近几天比较闲,于是想扩展一下原来写的PE工具,发现那个太差了,不好意思拿出手,所以现在又模仿了PETools的一些功能。今天做了一下那个调试功能:把选中的进程附加到系统的即时调试器。
一开始我以为是要用DebugActiveProcess这个API来附加到进程,后来发现DebugActiveProcess这个API是用来将自己附加到指定进程。也就是说,如果你自己是调试器,去调用DebugActiveProcess才有意义。于是就不知道该怎么办了。后来,用OD简单分析了一下PETools的这个功[......]

继续阅读

分类: 逆向调试 标签: , ,

PE文件格式解析(五)——导出表的解析

2011年4月19日 没有评论

昨天看了一下PE感染的实现,发现还是存在很多疑问,所以决定继续写那个PE工具。这里要实现导出表的解析。
输出表一般存在于Dll之中,在Winnt.h中的定义如下:

typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD N[......]

继续阅读

分类: PE文件格式 标签: , , ,

PE文件格式解析(三)——导入表的解析

2011年4月16日 没有评论

在解析导入表之前,要先得到PE文件的数据目录表,数据目录表存在于可选头之中,以一个数组的形式存在,第二个元素指出导入表的一些信息。具体请参考《PE文件之IMAGE_OPTIONAL_HEADER》一文。
通过IMAGE_DATA_DIRECTORY的第二个VirtualAddress可以得到导入表的RVA(到处都是RVA,所以弄懂RVA的概念以及熟悉RVA与Offset的转换是十分重要的,具体请参考《PE文件格式解析(二)》一文)。将RVA转为Offset之后,就可以读取IMAGE_IMPORT[......]

继续阅读

分类: PE文件格式 标签: , ,

神奇的栈溢出

2011年4月12日 4 条评论

最近,我在写一个简单一点的PE文件分析器,也就是把PE里面的一些信息反馈到界面上面来,界面的话模仿了LordPE的编辑器界面。
我觉得要动手去解析这些结构,才会对PE文件有一个更加深刻的了解。
也许有人会问,什么是PE?PE是Windows下可执行程序的一种格式,PE的意思是Portable Executable(可移植的执行体),所有Win32执行体都是用PE文件格式,其中包括SYS, DLL, EXE, COM, OCX等。
作为一个程序员,你可以不了解PE的具体结构,但是如果你能仔细去研究[......]

继续阅读

PE文件之IMAGE_SECTION_HEADER

2011年3月12日 没有评论

在IMAGE_NT_HEADERS之后,是IMAGE_SECTION_HEADER。
重要的数据成员有:8字节大小的NAME,如果节区名称小于8个字节,则多余的用0填充,否则全部填充节名,末尾不保证有1个0,同样会被名字填充。VirtualSize指出实际的节区大小。VirtualAddress为节区被装载到内存中的RVA地址。PointerToRawData为节区在PE文件中的便宜。Characteristics为节区的属性,如可读、可写、可执行等。
IMAGE_SECTION_HEADER的[......]

继续阅读

分类: PE文件格式 标签: ,

PE文件之IMAGE_OPTIONAL_HEADER

2011年3月12日 没有评论

可选头位于IMAGE_NT_HEADERS内,紧接与IMAGE_FILE_HEADER之后,可选头的大小由文件头中倒数第二个成员指定。
可选头中重要的数据成员有:
第一个成员WORD Magic,这个对于32位可执行文件来说为0x010B。DWORD AddressOfEntryPoint,这个成员是程序执行的入口RVA地址。ImageBase为建议的装载地址。对于可执行文件来说一般是0×00400000。SectionAlignment为内存中节的对齐大小,一般为0×000[......]

继续阅读

分类: PE文件格式 标签: ,

PE文件之IMAGE_FILE_HEADER

2011年3月12日 没有评论

IMAGE_NT_HEADERS的第一个成员是一个DWORD类型的PE签名,第二个成员就是IMAGE_FILE_HEADER了。IMAGE_FILE_HEADER的大小为20字节。第一个成员为WORD类型的Machine,这个通常为0x014C(intel 386系列CPU);第二个成员为WORD类型的NumberOfSections,即文件中节的数量,这个对应的文件具体的节区数量。第三个成员为DWORD类型的TimeDateStamp,是一个时间戳,对应于从1970年1月1日开始的秒数。第四个[......]

继续阅读

分类: PE文件格式 标签: ,

PE文件之IMAGE_NT_HEADERS

2011年3月12日 没有评论

继续看PE文件格式:IMAGE_NT_HEADERS紧接在DOS Stub之后,其位置由IMAGE_DOS_HEADER中的e_lfanew所指;IMAGE_NT_HEADERS由三部分组成,他们分别是DWORD类型的PE签名Signature;IMAGE_FILE_HEADER类型的FileHeader;以及IMAGE_OPTIONAL_HEADER32类型的OptionalHeader。IMAGE_NT_HEADERS总的大小为248字节,其中签名占用4字节,文件头占用20字节,可选头占用2[......]

继续阅读

分类: PE文件格式 标签: ,

PE文件之IMAGE_DOS_HEADER

2011年3月12日 5 条评论

Windows系统下的可执行文件,是基于Microsoft设计的一种新的文件结构,此结构被称之为PE结构。PE的意思是Portable Executable(可移植的执行体),所有Win32执行体都是用PE文件格式,其中包括SYS、DLL、EXE、COM、OCX等。
不管是学习逆向、破解还是安全,了解PE文件格式都是非常必要的。
PE文件的第一个部分是IMAGE_DOS_HEADER,大小为64B,这里面有两个重要的数据成员。第一个为e_magic,这个必须为MZ,即0x5A4D。当然,0x5A[......]

继续阅读

分类: PE文件格式 标签: ,