Java教程

PE结构-DOS头

本文主要是介绍PE结构-DOS头,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.DOS头的运用

DOS头的用处:

DOS头作为PE总体格式中的第一个头,是用来兼容MS-DOS操作系统的,目的是当这个文件在MS-DOS上运行时提示一段文字,大部分情况下是:This program cannot be run in DOS mode.还有一个目的,就是指明NT头在文件中的位置。

image

DOS头的结构 , 共有19个元素 , 40H/60个字节

image

主要看的就是那些有中文注释的元素

image

继续细分的话,也就看两个东西 , Windows程序PE结构中 , DOS头需要的只有这两个元素

  1. e_magic: DOS可执行文件的标识,没了这个标识符我们的程序也就跑不起来了.
  2. e_lfanew: 指向PE文件头 , 即NT头

image

为什么说DOS头只需要这两个元素呢?

我们将DOS头除了这两个元素以外的元素 , 全部清0 , 保存->运行程序

image

程序正常运行

image

有同学可能注意到了 , 文件里的数字 , 是倒着的 0108在文件中的显示为(0801)这个知识点是小端存储 , 自行百度去吧

DOS头的内容也就这些了 , 为什么标题为DOS头的运用呢? , 因为这是一个PE结构的专题 , 肯定讲讲反调试啥啥啥的啊 , 别急 , 让我们先完成第一个功能: 清除DOS头不必要的元素(即第一个元素和最后一个元素)并添加水印"hi i love you" , 磨刀不误砍柴工 , 先来练练手

清除DOS头元素 , 这段代码抽象 , 复制粘贴就好了

image

添加水印 "hi i love you" , 这个水印长度不能到指向PE头的元素e_lfnew

image

现在要做的就是调用保存文件函数了 , 哈哈

image

image

程序可以运行 , 水印也加上去了

image

DOS头的运用 - 反调试

DOS头是用来兼容MS-DOS操作系统的,目的是当这个文件在MS-DOS上运行时提示一段文字,大部分情况下是:This program cannot be run in DOS mode. 这是我们开头所说的一句话(我从隔壁博客偷来的) , 我们要是改掉他呢? , 需要运用到后面的知识了

将程序的DOS头修改成这样后 , 保存->继续修改PE相关的元素

image

将程序的入口修改成这样 , 保存->用强力的OD进行创建调试

image

程序报错并结束运行 , 看看

image

其实这是这个OD中的StrongOD插件里的一个功能导致的 , 暂时称他为BUG吧

image

编写代码 , 代码源码放在末尾了 , 这是22年的第一天, 也是PE结构学习的第一天 , 这个所谓的PE变异 , 并未有骚操作 , 只是随便改了改 , 在以后的PE变形中 , 将对其进行修改

image

链接:https://pan.baidu.com/s/120Wbal3HQ5f9VOjHNSEl1w
提取码:0000

这篇关于PE结构-DOS头的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!