willJ 发表于 2011-10-19 16:31

16进制编写简单PE(原创)

本帖最后由 xiangshen 于 2011-10-19 17:40 编辑

本人菜鸟一只,最近觉得自己对PE不是很了解{:1_937:},就查看了很多资料用16进制编辑器写了一个简单的hell52pojie的PE程序,希望大牛们以后多多指教:loveliness:,现在分享下我的学习:

MZ-DOS MZ头部(大小:64字节)


MS-DOS(大小112字节)


PE文件标志(4字节)


PE文件头(20字节)


PE文件可选头(224字节)


各段头部(i*40字节)


各段实体数据

所有的PE文件必须有一个DOS MZ头部,这是考虑到对DOS系统一个兼容性问题,有了这个头才能在DOS下识别是一个可执行文件,然后运行紧跟的MS-DOS。MS-DOS在PE文件中只是实现一句话“This program cannot run in DOS mode”来提醒用户,在编写时我直接00填充了。PE文件标志是PE结构的起始标识,就是50450000
ASCII为PE。PE文件头是IMAGE_NT_HEADERS的简称,其中包含了重要信息,当PE可以运行时可以直接跳过MS-DOS定位到PE文件头。PE可选头虽然取的名字是可选,但是是必须的,而且有重要信息,所有必须编写。各段节头部,做病毒分析时,打开lordPE里有个区段就可以看见了,Windows NT典型的拥有9个区段:.text .bss .rdata .data .rsrc .edata .idata.pdata .debug。我们也可以自己定义一些区段加入PE中,病毒感染PE就是加了自己的区段,加入代码,修改入口点执行的。大体可以看出PE可以分为4个部分:DOS部分,PE部分,各段头部,各段实体部分。下面是写的一个Hello,52pojie!的程序,非常简洁,只有重要数据,大家可以用16进制编译器(C32ASM,WinHex等)打开看看。多有总结不当,还望大牛们多多指出{:1_931:}。
连接:http://115.com/file/bhqx4ahi#

764619208 发表于 2011-10-19 17:19

大哥,你不知道CB紧张阿。发个连接吧、。

willJ 发表于 2011-10-19 17:35

回复 764619208 的帖子

喔。。。好滴,好滴。。。我修改下
页: [1]
查看完整版本: 16进制编写简单PE(原创)