手动打造一个弹窗程序

在平时的分析当中,经常会碰到PE结构的文件,虽然 010 Editor 等工具会提供一个模板,把各个部分都详细的标记出来,但是在调试的时候,经常会需要在 VS 等程序框中进行调试,所以,就需要对PE结构有一定的了解,才能够快速定位到自己想要的地方。

为了更好的了解PE结构中的每一位的作用,最好的办法就是自己手写一个PE文件,这样对每一个部分的理解,都会清晰很多。

目录

0x00 准备工作

0x01 构造DOS头

0x02 构造File头

0x03 构造Optional头

0x04 构造节表

0x05 构造导入表

0x06 执行代码

0x00 准备工作

在开始之前,有一些细节是需要提前思考好的,这些细节对于整个PE结构来说是非常重要的。

因为只需要完成一个弹窗的效果,代码量是非常少的,所以在程序的设计上,一个节表就完全足够了,同时,我们希望保证文件尽可能小,所以将文件对齐设置为200,将内存对齐设置为1000。

再加上头部和对齐的考虑,文件就需要占用400个字节了,到内存展开以后就占用2000字节。

注:PE格式中,所有可以被覆盖掉,而不影响程序运行的位置,我都会用CC来填充,这些位置可以写入字节的shellcode等。

0x01 构造DOS头

DOS头部在编辑器中占用了4行,其中的多数数据都是在16位的DOS环境下运行时所必备的,在现在看来,已经是可以占用的内容,只有两个参数是必须的:e_magic和e_lfanew。

e_magic

这个位是识别性的头部(MZ),这个位置是会被作为一个合法PE文件的检测位。

e_lfanew

用来指向一个新的结构,这个也就是我们现在来说,最重要的结构,所有的参数信息都是在这个结构中定义的。

在DOS头部后面还有一个Stub数据区,是16位程序的残留数据,是可以去掉的,所以就直接将e_lfanew指向了0x40,在这个位置开始新的结构。

0x02 构造File头

PE标识、File头以及Optional头统称为NT头,这里就不提NT的概念了,PE标识有4字节。

File头有1.4行,有4个重要的参数。

Machine

这是一组宏,表示在什么硬件下运行,一定要根据实际的情况来进行更改,当前是Intel386,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值