DOS头作为PE总体格式中的第一个头,是用来兼容MS-DOS操作系统的,目的是当这个文件在MS-DOS上运行时提示一段文字,大部分情况下是:This program cannot be run in DOS mode.还有一个目的,就是指明NT头在文件中的位置。
主要看的就是那些有中文注释的元素
继续细分的话,也就看两个东西 , Windows程序PE结构中 , DOS头需要的只有这两个元素
我们将DOS头除了这两个元素以外的元素 , 全部清0 , 保存->运行程序
程序正常运行
有同学可能注意到了 , 文件里的数字 , 是倒着的 0108在文件中的显示为(0801)这个知识点是小端存储 , 自行百度去吧
DOS头的内容也就这些了 , 为什么标题为DOS头的运用呢? , 因为这是一个PE结构的专题 , 肯定讲讲反调试啥啥啥的啊 , 别急 , 让我们先完成第一个功能: 清除DOS头不必要的元素(即第一个元素和最后一个元素)并添加水印"hi i love you" , 磨刀不误砍柴工 , 先来练练手
程序可以运行 , 水印也加上去了
DOS头是用来兼容MS-DOS操作系统的,目的是当这个文件在MS-DOS上运行时提示一段文字,大部分情况下是:This program cannot be run in DOS mode. 这是我们开头所说的一句话(我从隔壁博客偷来的) , 我们要是改掉他呢? , 需要运用到后面的知识了
将程序的DOS头修改成这样后 , 保存->继续修改PE相关的元素
将程序的入口修改成这样 , 保存->用强力的OD进行创建调试
程序报错并结束运行 , 看看
其实这是这个OD中的StrongOD插件里的一个功能导致的 , 暂时称他为BUG吧
编写代码 , 代码源码放在末尾了 , 这是22年的第一天, 也是PE结构学习的第一天 , 这个所谓的PE变异 , 并未有骚操作 , 只是随便改了改 , 在以后的PE变形中 , 将对其进行修改
链接:https://pan.baidu.com/s/120Wbal3HQ5f9VOjHNSEl1w
提取码:0000