PE文件中对DOS存根的一些想法

首先先了解一下PE文件:

PE(Protable Executable),即可移植的执行体。在Windows操作系统平台下,所有的可执行文件如EXE文件、DLL文件、SYS文件、OCX文件、COM文件等均使用PE结构。

PE文件结构包含的结构体有DOS头、PE标识、文件头、可选头、目录结构、节表等。

这篇文章主要是对DOS头的一些想法,DOS头主要分为两部分即“MZ头部”和“DOS存根”。MZ头部是真正的DOS头,而DOS存根则是一段简单的DOS程序,主要用来输出类似“This program cannot be run in DOS mode.”的提示语句,由于DOS存根里的内容无关紧要,所以可以把这部分用来存储其他数据而不改变程序原本的功能。

下面是笔者对DOS存根写入数据的想法:

首先,写一个简单的看起来似乎没有什么用处的小程序:

找到编译后生成的exe文件后,用C32Asm打开该exe文件:

这里选择16进制模式打开,在开始处我们可以看到MZ头:

向下溯源,发现PE头的首地址,即00 00 00 0F(这里的十六进制地址是以小尾方式存储的):

通过PE头的首地址,我们找到PE头的具体位置,这里也看得到PE头:

找到PE头得位置后,那么PE头与MZ头之间的那一部分就是我们需要找的DOS存根部分了:

在DOS存根部分,我们也能够看到“This program cannot be run in DOS mode”的提示字符串,接下来需要做的就是通过修改DOS存根的内容来将自己想加入的东西写入程序,而不影响程序的正常使用。笔者在这里用到的内容是:“这是我的博客:https://blog.csdn.net/song_10,欢迎关注!”,不过我并不想别人用反汇编工具载入这个exe文件就可以看到我修改的信息,所以在这里用base64对这一字符串进行简单的加密,得到:“6L+Z5piv5oiR55qE5Y2a5a6i77yaaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfMTDvvIzmrKLov47lhbPms6jvvIE=”,下面进入C32Asm来将我的信息写入到DOS存根当中:

修改后保存程序,然后打开EXE文件,发现可以成功打开,但程序并没有显示之前所添加的信息:

接着将修改的程序重新载入C32Asm中,能够在DOS存根的部分看到自己加入的信息:

说明已经成功将我们想加入的内容写入一个EXE的可执行文件当中了,这时又想误导一下别人这个exe可以执行文件损坏不能打开,进而对自己加入的信息进一步“加密”,那么我们就可以对PE头动一些手脚。

首先需要了解一下PE头的作用:用来装载PE文件。

如果对PE头进行修改,那么系统就不能正常装载PE文文件,进而就营造处该文件已损坏的假象,达到目的。

同样是在C32Asm中,对PE头随意修改一个字符(修改太多的话不容易恢复,那就真正成了损坏的PE文件了):

这里,笔者将E修改为e,保存后,找到EXE文件双击打开,出现以下提示,说明目的达到:

如果想要程序正常打开,那么只需将修改PE头的内容改回原来的内容就可以了。这里除了可以修改PE头的内容来达到目的之外

还可以对MZ头进行修改,同样能够达到相同的目的(MZ头:EXE文件标志)


 
 
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值