PE添节

PE结构-添加节表和节(附实例代码) 文章目录预备知识添加节表和节的步骤说明:手工添加步骤1.检查是否有足够空间 预备知识 文件结构示意图: 添加节表和节的步骤说明: 1、判断是否有足够的空间,可以添加一个节表. 判断条件: SizeOfHeader - (DOS + 垃圾数据 + PE标记 + 标准PE头 + 可选PE头 + 已存在节表) >= 2个节表的大小 (如果只有一个节表以上的空间也可以加不会报错,但是会有安全隐患) 2、需要修改的数据 添加一个新的节(可以copy一份) 在新增节后面 填充一个节大小的000 阅读详情
IMAGE_DOS_HEADER DosHeader;
  IMAGE_NT_HEADERS32 ExeHeader;
  int NumOfSections;
  FILE *fp;
  fp=fopen(FileName.c_str(),"rb+");
  fseek(fp,0,SEEK_SET);
  fread(&DosHeader,sizeof(DosHeader),1,fp);
  if (DosHeader.e_magic!=IMAGE_DOS_SIGNATURE)
  {
   ShowMessage("不是有效的MZ文件");
   return ;
  }
  fseek(fp,DosHeader.e_lfanew,SEEK_SET);
  fread(&ExeHeader,sizeof(ExeHeader),1,fp);
  if (ExeHeader.Signature!=IMAGE_NT_SIGNATURE)
  {
   ShowMessage("不是有效的PE文件");
   return ;
  }
  int NumSection = ExeHeader.FileHeader.NumberOfSections;
  fseek(fp,(DosHeader.e_lfanew+sizeof(ExeHeader.Signature)+sizeof(ExeHeader.FileHeader)+  (ExeHeader.FileHeader.SizeOfOptionalHeader)),SEEK_SET);
  IMAGE_SECTION_HEADER  OLD_SECTION;
  //来到最后一个节
  for (int i = 0; i < NumSection; i++)
  {
  fread(&OLD_SECTION,sizeof(IMAGE_SECTION_HEADER),1,fp);
  }
  IMAGE_SECTION_HEADER iMageNewSection;
  memset(&iMageNewSection,0,sizeof(iMageNewSection));

  //添加新节
  memcpy((char*)iMageNewSection.Name,".fish",strlen(".fish"));
  iMageNewSection.VirtualAddress=ExeHeader.OptionalHeader.SizeOfImage;
  iMageNewSection.Misc.VirtualSize=0x1000;   
  iMageNewSection.PointerToRawData=OLD_SECTION.PointerToRawData+OLD_SECTION.SizeOfRawData;
  iMageNewSection.SizeOfRawData=0x200;
  iMageNewSection.Characteristics=IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE;
  fseek(fp,DosHeader.e_lfanew+sizeof(IMAGE_NT_HEADERS)+NumSection*sizeof(IMAGE_SECTION_HEADER),SEEK_SET);
  fwrite(&iMageNewSection,sizeof(iMageNewSection),1,fp);
  
  //设置PE头,以便使一些设置生效..
  ExeHeader.FileHeader.NumberOfSections++;
  ExeHeader.OptionalHeader.SizeOfCode=ExeHeader.OptionalHeader.SizeOfCode+0x1000;
  ExeHeader.OptionalHeader.SizeOfImage=ExeHeader.OptionalHeader.SizeOfImage+0x1000;
  ExeHeader.OptionalHeader.AddressOfEntryPoint=iMageNewSection.VirtualAddress;
  ExeHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress = 0;
  ExeHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size = 0;
  fseek(fp,DosHeader.e_lfanew,SEEK_SET);
  fwrite(&ExeHeader,sizeof(ExeHeader),1,fp);
  
 
手动修改PE文件:修改节表 目前想到的关于修改节表就是新增节和节表移位,其它的改节的读写什么的就改个Flag而已就不说了。以后有新的想法再添加。 1.新增节 现在很多解析PE格式的软件都有添加节的功能,具体代码怎么写,下面就说一下。PE格式结构排布顺序是这样:Dos头->DosStub->NT头->节表->Padding->节内容。 在节表之后因为文件对齐的关系,可能会多出一段00,这一段00就可以用来 阅读详情

相关推荐

滴水逆向——PE新增一个节

1.问题描述: 2.注意事项: (1)首先判断头部的空白区够不够加节表, 所有的节表后面必须跟40个字节0。所以添加节表时得确保有两个节表大小(即80字节)的连续剩余。 分三种情况:a.头部的最后一个节表后直接可以放下两个节区 b.节表后放不下,但是dos头后pe前可放下 c.前两种情况都不行,需扩大最后...

sunr. 1270

PE添加节_手动

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   今天在学习PE的过程中通过通过手动对PE文件进行节的添加,过程中遇到了一些问题,写下来以便今后及时复习 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   [1] 确定节的对齐尺

赤坂龙之介的博客 603

PE新增节

测试了几个32位程序,有的能正常工作,有的不行。出错的程序有个共同点是他们最后一个节表后面并不是0,而是有一些奇怪的数据,以32位notepad为例,最后一个节表后面的数据是这样的: 对于其他程序,如ipmsg,还有一个我自己写的32位GUI程序,新增节后都可以正常运行。 对于这个问题,解决方案可以改为扩大最后一个节,或者让NT头上移,就是覆盖掉原来dos stub那部分数据,然后改一下e_lfanew,由于不是本次作业的重点,我就不写了。 下面是函数代码,只包含添加节的函数,其他函数就不贴了,上一篇博客有

hambaga的博客 879

滴水逆向----代码区添加shellcode

上次海哥讲到FileBuffer------>ImageBuffer,这次我们需要在代码区添加代码 我们这次要添加的代码功能:双击exe,先跳出MessageBox,然后软件正常使用 需要的知识点: 1.我们添加的代码不是c,不是汇编,而是二进制,因为exe都是二进制组成的,我们要知道一些汇编的硬编码,call的硬编码是E8,jmp的硬编码是E9 2.知道了call的硬编码,那么后面的地址是直接用编译器打开的地址吗?不是的,地址是经过转换得到的,公式:真正要跳转的地址=E8下一条指令的地址+X

clayoa的博客 937

PE 文件中.reloc节 删除记录

PE文件是windows 下的一种可移植执行体,其设计目的使用来解决跨平台问题(但实际上只是在windows下使用)。通常在windows下使用的.exe .dll .sys等文件都是PE文件,符合PE文件格式规范,有其自身的格式。不熟悉的朋友也可以网上查找相关资料。 PE文件的.reloc 节 即是使用了PE重定位技术。PE加载到进程虚拟地址时,会加载到PE中的IMAGE_OPTIONAL_H

ez scope 2887

Windows进程通信之PE文件共享节

本文由danny发表于 http://blog.youkuaiyun.com/danny_share   说明:建议先下载本文配套工程,其中 SectionDLL、SectionMain工程、SectionASub工程,SectionBSub工程分别用于演示进程间通信的DLL工程、主进程和两个子进程 下载地址:http://download.youkuaiyun.com/detail/danny_share/77

danny的记事本 2343

PE感染-添加节区

#include #include #include //本程序只适用于载入基址定位的。。。非随机基址 //感染指定目录的PE文件 char ItIs[MAX_PATH] = "D:\\桌面\\感染PE\\感染目录"; //添加了一个新节区 //然后shellcode是添加一个名为a,密码为a的administrator //然后PEB定位kernel32只在我的win7 x64电脑上测试

收集学习过程中对自己有帮助的牛人文章 1407

[数据转换]将NetCDF(NC)文件转换成单个GeoTIFF文件

有时候要提取tif格式数据中的气象数据,但从气象网站上下载的却是NC格式的文件。这就需要我们将NC格式的文件转换成TIF格式的文件。

G_sea_young的博客 1004

滴水---------新增节

上节课讲到任意节添加ShellCode,这节课海哥让我们新增一个节,为什么要新增一个节呢?直接在后面添加不好吗,因为节的空间不够大,我们需要从新增加一个节。 需要的知识点: 1.我们需要看是否有足够的空间增加一个节表,一个节表40个字节,但是我们要判断剩余的空间是否为80个字节,因为规定最后一个节表后面需要跟着40空字节,代表结束。 2.需要修改的属性 1) 添加一个新的节表(可以copy .text) 2) 修改标准PE头的NumberOfSection 3) 修改sizeOfImage 3

clayoa的博客 565

基于PDF文档结构的数字隐写

PDF隐写

xiongshivigor的博客 1426

RV1126B芯片实战:如何用这款视觉处理器SoC打造你的第一个AI摄像头项目

本文详细介绍了如何利用瑞芯微RV1126B视觉处理器SoC从零构建AI摄像头项目。涵盖硬件选型、开发环境搭建、ISP配置、AI模型部署及系统集成等关键步骤,帮助开发者高效实现边缘计算方案,特别适合智能安防和工业检测应用。

dropout6artist的博客 932

PE插缝 和PE添节

#include "stdafx.h"#include #include #include #include typedef struct tagPeInfo{        DWORD dwPeNewEntryAddress;        DWORD dwPeOldEntryAddress;        DWORD dwPePhysicalSize;        DWORD dwPePhy

969

QT+SOEM主站协议库实战指南—从编译到嵌入式应用

本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。

u6v7w8x的博客 442

俩种方式注入机器码

PE插缝 和PE添节  Pe插缝:[Copy to clipboard] [ - ]CODE://by 小浩 Q82602935#include "stdafx.h"#include #include #include #include typedef struct tagPeInfo{        DWORD dwPeNewEntryAddress;        DWOR

1365

从零到一:RT-Thread与W5500的硬件抽象层设计哲学与实践启示

本文深入探讨了RT-Thread操作系统下W5500以太网模块的硬件抽象层(HAL)设计哲学与实践。通过GD32F103和STM32F103平台的适配案例,详细阐述了如何利用RT-Thread的驱动框架实现跨平台硬件无关性、模块化设计及配置定制,为嵌入式开发者提供了可复用的HAL设计方法论和实战经验。

7z8x2c4v6b9的博客 198

机械臂的运动学分析-工业机器人

机械臂的运动学是研究机械臂各连杆坐标系之间的运动关系,是对机械臂进行运动控制的基础。本章分析了所设计的六自由度机械臂的运动学。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。

qq_59137727的博客 6650

PE文件:节表-添加节

在所有节的空白区域都不够存放我们想要添加的数据时,这个时候可以通过添加节来扩展我们可操作的空间去存储新的数据(如导入表、代码或资源)。

WolvenSec的博客 1484

(ICLR 2025)【源码讲解+复现】TIMER-XL: Long-Context Transformers for Unified Time Series Forecasting

本文提出了一种统一的多变量时序预测模型Timer-XL,其核心创新包括:1)采用自回归解码器架构,将多变量时序预测统一为next-token预测问题;2)设计TimeAttention机制,通过相对位置编码和因果掩码捕获时序位置和变量间交互;3)支持长上下文预训练以提升零样本迁移能力。模型架构包含嵌入层、时间感知注意力块和预测头,采用MSE损失进行端到端训练。实验表明该方法在多种时序任务上表现优异,特别是在长跨度预测和少样本场景下。代码实现提供了完整的模型定义、数据加载和训练流程,支持自定义配置参数。

1147

PE文件结构:节表

在 PE(Portable Executable)文件结构中,是 PE 文件的重要组成部分之一,位于 PE 头之后。节表记录了各节的虚拟地址、大小、节在 PE 文件中的实际大小和节属性等内容,用于定义程序在内存中的逻辑布局,操作系统加载 PE 文件时,根据节表将不同节的数据映射到正确的内存区域;定义了各节的属性,如是否可执行、可读、可写等,操作系统会根据这些属性对相应内存区域进行保护。在调试过程中,节表可以用来定位代码和数据在文件和内存中的位置,辅助调试器解析程序结构。

WolvenSec的博客 1565

Codex入门24-效率倍增秘籍(终极总结:10个让你开发速度翻倍的Codex高级技巧)

专栏收官之作!经过前23篇的系统学习,你已经掌握了 Codex CLI 的核心用法。本文浓缩10个实战验证的高级技巧:管道化提示词将复杂任务拆成递进指令链,模板化 SKILL.md 打造个人技能库,Shell 别名让操作快如闪电,多模型切换省钱又高效……这不是理论课,每个技巧都配有可直接运行的代码。掌握全部10招,构建你的 AI 开发工作流闭环,让开发速度真正翻倍!

yueyeguzhuo的专栏 191

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

PE文件(三)节表

Name数组的长度最大为8字节,如果定义节的名称为.text,由于.text对应的ASCII码分别为0x2E, 0x74, 0x65, 0x78,0x74,所以Name数组中的数据为2E 74 65 78 74 00 00 00,一共8字节。所有的节表一起记录了该.exe文件中所有的节的信息,每一个节都有对应的节表来存储信息,所有的节对应的节表组合在一起就构成了PE文件的节表结构。内存中的地址:节表在4GB内存中的地址要加上imagebase的值,才是节表真正在内存中的起始地址。

2301_78838647的博客 1702

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

8.PE文件之新增节

目录 新增节对PE文件中哪些值会有影响? 新增节步骤: 手动新增节 代码新增节 如果需要在PE文件中构建一端SHELLCODE(默认节区剩余空间不足情况下),可以通过新增节来解决此问题.通常大部分加壳软件都会新增节来移动或者备份各种目录项数据. 新增节对PE文件中哪些值会有影响? IMAGE_FILE_HEADER→NumberOfSections(当前PE文件节的数量,如果新增节需要修正此值). IMAGE_OPTIONAL_HEADER → SizeOfImage(新增节后在内存中的大小

kernelhack 4698

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PE文件实战教程之手动实现新增节

前面我们说过在空白节添加代码,想要更多空间的话,可以扩大节,但是在最后一个节进行扩大的话,还需要修改原来节的属性,比较麻烦,所以不如直接新增一个节! 并且我们通过手动新增节,可以直观地看到非常多的细节,帮助我们理解原理! 手动实现新增节什么是新增一个节?了解一下节表新增节表的步骤1.判断是否有足够的空间增加一个新节.2.节表新增一个成员,在原最后一个成员后面添加3.修改节的数量4 修改sizeOfImage的大小5.再原有数据的最后,新增一个节的数据(内存对齐的整数倍)6 修正新增节表的属性节.Virt.

weixin_43742894的博客 1900

PE合并节

把所有节合并成一个节,好处是可以腾出节表空间,保证能成功新增节。 方法是先拉伸成imagebuffer,修改第一个节的VirtualSize = SizeOfRawData = SizeOfImage - VirtualAddress,因为PE文件本身就对齐好了,所以不用关心对齐问题。由于修改了SizeOfRawData ,处理后PE文件会变大。除此之外还要修改节的数量,和第一个节必须具有其他节的属性。 代码 // 合并所有节 BOOL MergeSection(LPVOID pImageBuffer, L

hambaga的博客 941

10.PE文件之合并节

目录 合并节对PE文件中哪些值会有影响? 合并节步骤: 手动合并节 代码合并节 合并节与新增节、扩大节有一点区别.合并节如果文件与内存对齐不同需拉伸到内存后进行合并节. 合并节对PE文件中哪些值会有影响? IMAGE_FILE_HEADER→NumberOfSections(当前PE文件节的数量,如果更改需要修正此值). .第一个节得包含其余所有节的属性. 修正第一个节内存中的大小以及文件中的大小. 如果文件对齐与内存对齐相等则不需要拉伸即可完成.如果文件对齐与内存对齐不相同必须拉伸

kernelhack 4260

9.PE文件之扩大节

目录 扩大节对PE文件中哪些值会有影响? 扩大节步骤: 手动扩大节 代码扩大节 通常扩大最后一个节比较方便,假设扩大第一个节则后续所有节对应的数据都需要更改. 扩大节对PE文件中哪些值会有影响? 最后一个IMAGE_SECTION_HEADER结构成员中SizeOfRawData和VirtualSize. IMAGE_OPTIONAL_HEADER → SizeOfImage(扩大节后在内存中的大小需要修正). 扩大节步骤: 将最后一个节文件中的大小修改为当前文件大小加新增大小(文

kernelhack 4044
上一篇: Kaspersky Anti-Virus Driver Decrypt code
下一篇: PE插缝 和PE添节
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值