以前刚开始学网络安全,是从免杀开始的。记得那时候杀毒软件还很弱。金山江民瑞星还存在。

那会什么原理也不懂,就一直瞎鼓捣。(后来转入渗透行列了)

这段时间一直在学PE格式,突然想起来以前很古老的PE文件头移位。

网上搜了搜,看大家虽然做了视频,但是竟然没人讲原理。借着刚好在学PE格式的知识,就做个PE文件头移位的笔记。(不喜勿喷,刚学PE头文件格式,难免出错请提点,谢谢)

当然现在这种很古老的免杀方式对于杀软来说根本是不堪一击了。纯属做笔记。

PE文件的基本结构如图示:

IMAGE_DOS_HEADER 定义

IMAGE_DOS_HEADER STRUCT 

+00h WORD e_magic  // Magic DOS signature MZ(4Dh 5Ah)   DOS可执行文件标记 

+02h  WORD e_cblp   // Bytes on last page of file  

+04h WORD e_cp   // Pages in file

+06h WORD e_crlc   // Relocations

+08h WORD e_cparhdr   // Size of header in paragraphs

+0ah WORD e_minalloc   // Minimun extra paragraphs needs

+0ch WORD e_maxalloc  // Maximun extra paragraphs needs

+0eh WORD e_ss   // intial(relative)SS value   DOS代码的初始化堆栈SS 

+10h WORD e_sp   // intial SP value   DOS代码的初始化堆栈指针SP 

+12h WORD e_csum   // Checksum 

+14h WORD e_ip   //  intial IP value   DOS代码的初始化指令入口[指针IP] 

+16h WORD e_cs   // intial(relative)CS value   DOS代码的初始堆栈入口 CS

+18h WORD e_lfarlc   // File Address of relocation table 

+1ah WORD e_ovno  //  Overlay number 

+1ch WORD e_res[4]  // Reserved words 

+24h WORD e_oemid   //  OEM identifier(for e_oeminfo) 

+26h WORD e_oeminfo  //  OEM information;e_oemid specific  

+29h WORD e_res2[10]  //  Reserved words 

+3ch LONG  e_lfanew  // Offset to start of PE header   指向PE文件头 

IMAGE_DOS_HEADER ENDS

以:nc(瑞士军刀为例)

用C32ASM载入nc.exe

(图1网上转载)

偏移地址从0字节开始,就是DOS头的EXE MZ标志。也就是5A4D。有了这个标识,DOS就能识别出该程序是不是有效的执行体。(由于INTEL CPU属于LITTLE-ENDIAN类,字符存储时位低在前,高位在后)

+3ch LONG  e_lfanew  // Offset to start of PE header   指向PE文件头 ,LONG占4个字节

所以,我们得到了PE文件头偏移地址为00d8。

IMAGE_FILE_HEADER 结构
IMAGE_FILE_HEADER STRUCT
+04h WORD Machine; // 运行平台
+06h WORD NumberOfSections; // 文件的区块数目
+08h DWORD TimeDateStamp; // 文件创建日期和时间
+0Ch DWORD PointerToSymbolTable; // 指向符号表(主要用于调试)
+10h DWORD NumberOfSymbols; // 符号表中符号个数(同上)
+14h WORD SizeOfOptionalHeader; // IMAGE_OPTIONAL_HEADER32 结构大小
+16h WORD Characteristics; // 文件属性
IMAGE_FILE_HEADER ENDS

在这里,我们只需要注意即可。

+14h      WORD          SizeOfOptionalHeader;  // IMAGE_OPTIONAL_HEADER32 结构大小

从PE头开始,偏移14H也就是20个字节,得到结构大小。

结构大小为E0,我们将16换成10进制。就知道该结构有多少个字节。

将数据复制,往上移动8个字节。

因为PE头移动位置,需要重新计算PE头大小。

因为PE头已经移动过位置了,所以需要重新修改PE头大小以及DOS头指向PE头位置。如上图。

运行成功。

PE文件格式学习之PE头移位的更多相关文章

  1. PE文件结构学习

    PE:Portable Executable File Format(可移植的执行体).Windows平台主流可执行文件格式..exe与.dll文件都是PE格式.32位的叫做PE32,64位的叫做PE ...

  2. PE文件格式偏移参考

    在进行PE文件格式病毒分析的时候,经常要使用到PE文件格式的解析,尤其是对LoadPE形式的病毒的分析,经常要查看PE文件格式的偏移,特地从博客<PE文件格式的偏移参考>中转载收录一份,之 ...

  3. PE文件格式详解,第二讲,NT头文件格式,以及文件头格式

    PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...

  4. PE文件格式详解,第一讲,DOS头文件格式

    PE文件格式详解,第一讲,DOS头文件格式 今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行程序,就是一个文件格式,那么我们要了解它里面到底存了什么内容 ...

  5. PE文件格式详解,第三讲,可选头文件格式,以及节表

    PE文件格式详解,第三讲,可选头文件格式,以及节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶可选头结构以及作 ...

  6. PE文件学习系列二 DOS头分析

    合肥程序员群:49313181.    合肥实名程序员群 :128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com PE文件结 ...

  7. 逆向学习-PE文件格式

    从DOS头到节区头是PE头部分,其下的节区合称PE体.文件中使用偏移(offset),内存中使用VA(Virtual Address,虚拟地址)来表示位置.文件加载到内存时,情况就会发生变化(节区的大 ...

  8. Reverse Core 第二部分 - 13章 - PE文件格式

    @date: 2016/11/24 @author: dlive ​ PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...

  9. 深入理解 Win32 PE 文件格式

    深入理解 Win32 PE 文件格式 Matt Pietrek 这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什 ...

随机推荐

  1. 神、上帝以及老天爷--hdu2048(错排,递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2048 1. N张字条的所有可能排列自然是N!(分母). 现在的问题就是求N张字条的错排数f(N)(分子 ...

  2. 解决hung_task_timeout_secs问题【方法待校验】

    问题描述:   kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this messag ...

  3. Linux之Redis-redis哨兵集群详解

    1.Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所 ...

  4. Angular 回到顶部 滚动到特定的页面位置

    $timeout(function() { // $location.hash('bottom'); // $anchorScroll(); // var a=angular.element(&quo ...

  5. centos 解决error: rpmdbNextIterator问题 (转)

    昨天重装RedHat4以后出现了下面这个问题 [root@RedHat4 ~]# rpm -qa |grep vimerror: rpmdbNextIterator: skipping h#      ...

  6. 配置支持Basler的API函数的开发环境

    第一步:文件说明 使用默认路径安装Basler pylon x86 4.2.1.4845.exe 以后生产的文件如下: 文件说明: apps为用于配置ip和调试相机的软件 bin为驱动程序 CLPro ...

  7. What does Quick Sort look like in Python?

    Let's talk about something funny at first. Have you ever implemented the Quick Sort algorithm all by ...

  8. 元类 metaclass

    metaclass 类由Type创建 对象由创建 MetaClass作用 用来指定当前类由谁来创建(默认type创建). MetaClass 会被继承,如果父类指定了元类,那么子类也是由这个元类创建 ...

  9. python字符串搜索

    python字符串字串查找 find和index方法 更多0 python 字符串 python 字符串查找有4个方法,1 find,2 index方法,3 rfind方法,4 rindex方法. 1 ...

  10. 04 linux用户群组和权限

    作业一: 1)新建用户natasha,uid为1000,gid为555,备注信息为“master” 2)修改natasha用户的家目录为/Natasha 3)查看用户信息配置文件的最后一行 4)为na ...