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

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

这段时间一直在学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头位置。如上图。

运行成功。

转载于:https://www.cnblogs.com/killbit/p/5994670.html

PE文件格式学习之PE头移位相关推荐

  1. PE文件格式粗浅认识

    前言:最近开始学习PE文件格式,写点笔记做点记录,当然,下面这些只是我这个初学者的一些简单的认识. 1.PE文件格式图总览 2.PE文件格式介绍 PE(Portable Execute)文件是Wind ...

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

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

  3. Windows Pe 第三章 PE头文件(上)

    第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...

  4. 深入浅出PE文件格式---自己动手打造PE Show

    深入浅出PE文件格式---自己动手打造PE Show                                                             作者:WiNrOOt // ...

  5. “PE文件格式”1.9版 完整译文

    标 题: [翻译]"PE文件格式"1.9版 完整译文(附注释) 作 者: ah007 时 间: 2006-02-28,13:32 链 接: http://bbs.pediy.com ...

  6. PE文件格式”1.9版 完整译文(附注释)

    没看完,先贴上来,以再看! 标 题: [翻译]"PE文件格式"1.9版 完整译文(附注释) 作 者:ah007 时 间: 2006-02-28,13:32 链 接: http:// ...

  7. PE文件格式系列译文之

    PE文件格式系列译文之一----           [翻译]"PE文件格式"1.9版 完整译文(附注释) ==================================== ...

  8. 【翻译】“PE文件格式”1.9版 完整译文(附注释)

    标 题: [翻译]"PE文件格式"1.9版 完整译文(附注释) 作 者: ah007 时 间: 2006-02-28,13:32:12 链 接: http://bbs.pediy. ...

  9. PE文件格式”1.9版 完整译文

    2019独角兽企业重金招聘Python工程师标准>>> PE文件格式系列译文之一---- [翻译]"PE文件格式"1.9版 完整译文(附注释) ========= ...

最新文章

  1. 人类基因组注释包org.Hs.eg.db
  2. jQuery对select操作
  3. Docker 命令自动补全必须有
  4. UNIX环境编程学习笔记(6)——文件I/O之判断文件类型
  5. 计算智能-群智能算法-蚁群算法matlab实现
  6. UVA - 1378 A Funny Stone Game(博弈+sg函数)
  7. 图片合成gif_谈谈有哪些好用的制作GIF的方式
  8. 如何安装最新版本Pycharm2019
  9. Linux的目录结构与磁盘分区
  10. Docker容器时间与宿主机同步
  11. 常用傅里叶变换公式大全_高二数学常用导数公式大全
  12. JavaScript 键盘事件处理
  13. Android机顶盒网络地址端口连通性测试
  14. General VDPConfig对讲配置工具
  15. matlab图片纹理特征直方图,常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。...
  16. linux udp 端口 抓包,Linux系统-tcpdump常用抓包命令
  17. QQ开放平台调用示例--QQ登录,分享(JS环境)
  18. Python-Scrapy-抓取链家二手房信息
  19. oracle输出加文字,输出cx字符串
  20. CodeForces 19E 仙女fairy

热门文章

  1. 前端、后端、全栈都要学什么?薪资前景如何?
  2. 非线性薛定谔方程_五分钟彻底搞懂“薛定谔方程”,看后绝对不在迷惑了
  3. java 12_为什么在Java(高低)/ 2是错误但(高低) 1不是?
  4. mysql挂载数据卷_docker卷挂载技术
  5. mac计算机属性怎么找,删除Mac OS文件系统的附加属性
  6. oracle sql的正则表达式,Oracle SQL 语句中正则表达式的应用
  7. devtools 无法加载 sourcemap_用 babel-plugin 实现按需加载
  8. http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=9332 多broser
  9. OpenCV学习(7.10)
  10. 内外网同时使用解决办法