获取PE文件的区段表

windows 加壳工具代码实现03 - 加壳逻辑实现 PACK.CPP 本文介绍了一个PE文件加壳工具的实现,主要包含两个核心组件:Stub.cpp和Pack模块。Stub.cpp编译生成Stub.dll,作为壳的实际执行代码,包含手动API获取、异或解密、MessageBox提示和跳转原始入口点等核心逻辑。Pack模块提供加壳功能,包括: 初始化PE结构(InitPE) 异或加密代码段(XorCode) 修复重定位表(FixReloc) 清除绑定导入表(ClearBundleImport) 添加新区段(AddSection) 加壳过程会对代码段进行异或加密,将壳代码作为新节区 阅读详情

    获取PE文件的区段表,用的方法是,首先打开CreateFile,然后读取这个文件的DosHeader,

从DosHeader中取e_lfanew这个成员的值,这样就能知道“PE00”的偏移,然后SetFilePointer文件的指针

到e_lfanew + sizeof(IMAGE_NT_SIGNATURE)这个地址,读取FileHeader结构

,从文件头结构中获取NumberOfSections区段的个数,根据区段个数分配够用的缓冲区,

最后SetFilePointer将文件指针从当前位置偏移FileHeader.SizeOfOptionalHeader,进行读取IMAGE_SECTION_HEADER。

 

OK,搞定。

 

代码如下:

 

 //清空列表控件
 m_ListCtrlSection.DeleteAllItems();

 

 IMAGE_DOS_HEADER DosHeader = {0};
 IMAGE_FILE_HEADER FileHeader = {0};
 HANDLE  hFile = INVALID_HANDLE_VALUE;
 DWORD  dwReadLen = 0;
 WORD  NumOfSec = 0; //区段表个数
 IMAGE_SECTION_HEADER *pSecHeader = NULL;
 //打开文件
 hFile = CreateFile("C://windows//system32//cmd.exe",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 if (hFile == INVALID_HANDLE_VALUE)
 {
  MessageBox(_T("无法打开文件,分析失败!"));
  return;
 }
 
 //读取数据
 if (!ReadFile(hFile,&DosHeader,sizeof(DosHeader),&dwReadLen,NULL))
 {
  MessageBox(_T("无法读取文件,分析失败!"));
  return;
 }
 SetFilePointer(hFile,DosHeader.e_lfanew + sizeof(IMAGE_NT_SIGNATURE),NULL,FILE_BEGIN);
 ReadFile(hFile,&FileHeader,sizeof(FileHeader),&dwReadLen,NULL);
 //得出区段个数
 NumOfSec = FileHeader.NumberOfSections;
 //分配区段内存
 DWORD SectionSize = NumOfSec * IMAGE_SIZEOF_SECTION_HEADER;
 char *pSecBuff = new char[SectionSize + 1];
 //移动指针到区段表
 SetFilePointer(hFile,FileHeader.SizeOfOptionalHeader,NULL,FILE_CURRENT);
 ReadFile(hFile,pSecBuff,SectionSize,&dwReadLen,NULL);

 //读取完毕,关闭句柄
 CloseHandle(hFile);

 int iIndexItem = 0;
 TCHAR tzBuff[10] = {0};
 char szSecName[IMAGE_SIZEOF_SHORT_NAME] = {0};
 //内存数据指针转换
 pSecHeader = (PIMAGE_SECTION_HEADER)pSecBuff;
 for (int i = 0; i < NumOfSec; i++)
 {
  memcpy(szSecName,pSecHeader->Name,8);
  iIndexItem = m_ListCtrlSection.InsertItem(i,(LPCTSTR)szSecName);
  
  //显示VirtualAddress和VirtualSize
  wsprintf(tzBuff,_T("%08X"),pSecHeader->VirtualAddress);
  m_ListCtrlSection.SetItemText(iIndexItem,1,tzBuff);
  wsprintf(tzBuff,_T("%08X"),pSecHeader->Misc.VirtualSize);
  m_ListCtrlSection.SetItemText(iIndexItem,2,tzBuff);
  
  //显示RawAddress和RawData
  wsprintf(tzBuff,_T("%08X"),pSecHeader->PointerToRawData);
  m_ListCtrlSection.SetItemText(iIndexItem,3,tzBuff);
  wsprintf(tzBuff,_T("%08X"),pSecHeader->SizeOfRawData);
  m_ListCtrlSection.SetItemText(iIndexItem,4,tzBuff);

  wsprintf(tzBuff,_T("%08X"),pSecHeader->Characteristics);
  m_ListCtrlSection.SetItemText(iIndexItem,5,tzBuff);

  //指针后移
  pSecHeader++;
 }
 //释放内存
 if (pSecBuff)
 {
  delete []pSecBuff;
 }

PE应用免杀 之 shellcode 编写 本文介绍了Shellcode的基础知识和编写过程。Shellcode是一种不依赖环境的可执行代码,通常用于渗透测试和二进制漏洞利用。文章重点讲解了Shellcode编写的注意事项:绝对避免直接使用字符串,必须采用字符数组或动态加载方式处理字符串。具体编写过程包括:通过Hash对比获取函数地址、处理导出表获取GetProcAddress、定义函数原型、处理字符数组、生成Shellcode字节码等步骤,最终生成可注入的机器码。文中还提供了一个完整的Shellcode示例代码,展示了如何通过字符数组方式实现字符串 阅读详情

相关推荐

易语言取PE文件区段源码-易语言

易语言取PE文件区段源码

PE基础4-练习-导入表-到处表-重定位表-重写写成新文件

PE基础练习 #include <windows.h> #include <stdio.h> struct TypeOffset { WORD Offset : 12; WORD Type : 4; }; // 保存文件大小 DWORD FileSize = 0; // 保存文件的基址 DWORD FileBase...

weixin_30480075的博客 152

PE文件节区添加并弹出简单的对话框

PE文件自动添加节区,并弹出一个简单的对话框(可以自己修改成其它的东西)

【PE结构】3.区段头

一、前言二、PE整体结构三、DOS头四、NT头    4.1.文件头    4.2.扩展头五、区段头六、导出表七、导入表八、资源表九、其他表五、区段头概念:    区段头表存储着PE文件主体也就是区段的一些属性。    整个区段头表,是一个结构体数组。    数组中的每个元素,也就是每个结构体,对应着PE文件主体中的一段数据,这段数据成为段或节。    结构体:    这个结构体在winnt.h中...

SMOne 2294

使用逻辑分析仪处理IIC信号

逻辑分析仪

xc_123的博客 4486

WinServer 2012 R2 搭建 AD 单域多站点 及 DNS各站点的子网掩码排序调整

WinServer 2012 R2 搭建 AD 单域多站点 及 DNS各站点的子网掩码排序调整

一直被模仿,从未被超越 5535

PE格式解析-区段表及导入表结构详解

PE格式区段表与导入表的结构详解

走在成长的路上 1万+

共封装光学(CPO):下一代互联革命

Nvidia:产品:Quantum-X Q3450(115.2T,144×800G,2025H2上市)、Spectrum 6800(409.6T,512×800G,2026H2上市);技术路线:TSMC COUPE封装、MRM调制器、光栅耦合、外部激光源(Lumentum/Ayar Labs供应);战略定位:以横向扩展CPO验证供应链,最终聚焦纵向扩展场景(Feynman架构)。

存储随笔 4973

遍历PE文件头、扩展头、数据目录表、区段表信息

遍历PE文件头、扩展头、数据目录表、区段表信息

cyxvc 3127

基于多智能体协作的量化交易研究框架TradingAgents详解

量化交易系统通过算法模型分析市场数据,旨在实现自动化投资决策。其核心原理在于利用计算机强大的数据处理能力,结合统计学和机器学习方法,从历史数据中挖掘可重复的盈利模式。这一技术的价值在于能够克服人类情绪干扰,实现纪律性交易,并快速处理海量信息。在应用场景上,量化策略广泛应用于股票、期货、外汇等多个金融市场。本文聚焦的TradingAgents框架,创新性地引入了**多智能体协作**和**对抗性验证**机制,通过模拟真实投研团队的分工与辩论流程,构建了一个研究友好、决策过程可解释的量化交易研究平台,为探索大语言

weixin_36019375的博客 433

内核工作FAST‘25 Artifact Evaluation流程记录

在我们的paper中,复现需要用到傲腾持久化内存,因此,需要AE Reviewer访问到内网服务器中。我们的思路是购买云服务器,将其作为跳板机,内网服务器通过SSH反向代理与公网服务器建立隧道,AE Reviewer通过隧道访问内网服务器。我们在AE过程中使用。然后,把一切复现需要的代码环境,在chroot里面配置完成。

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 1215

PE文件增加区段

该程序主要是对PE文件增加区段,如果对您有帮助请点一个赞,那方面写的不好的请直接评论批评,我一定会尽最大努力改正 #include <stdio.h> #include <stdlib.h> #include <windows.h> int main () { HANDLE hfile = CreateFileA( "C:\\Users\\486\\Desktop\\WP\\magic.exe", GENERIC_ALL, FILE_SHARE_R

weixin_52971884的博客 1088

从爆仓到流畅发货:我们如何用EIQ分析给跨境小电商仓库做了一次‘体检’与‘手术’

本文分享了如何通过EIQ分析工具为跨境小电商仓库进行诊断与优化,从爆仓危机到流畅发货的实战经验。通过ABC分类法、动态路径算法等策略,拣货效率提升40%,错发率降低91%,日均处理能力翻倍。文章为小电商提供了轻量级工具选择和关键指标监控的实用建议。

weixin_28707739的博客 399

C++ 获取 PE 文件的各种信息

首先感谢 cyxvc 老哥,他的代码可读性超高,精简有用以理解,我找这方面的资料好久了,这篇文章对我帮助很大。 参考代码: #include "stdafx.h" #include <Windows.h> extern void DirectoryString(DWORD dwIndex); int _tmain(int argc, _TCHAR* argv[]) { //获...

LYSM 2606

RK3568平台(电源篇)电源域IO配置

在kernel之前需要修改电源域,主控电源域的IO电平要与对接外设芯片的IO电平匹配,还要注意软件的电压配置要跟硬件的电压一致,否则,最坏的情况可能会导致IO的损坏。其实就是管理 IO 输出的电平;假如硬件上 IO 电源域配置为 3.3V,则 IO 输出最大电平为 3.3V;同理 IO 电源域硬件配置为 1.8V,则 IO 输出最大电平是 1.8V;这样有利于 IO 电平的灵活配置;

weixin_49303682的博客 3479

VisionTransformer改进(11):结合CoordAtt注意力机制

​​CoordAtt模块​​:一个轻量级的坐标注意力机制​​ViT模型​​:基于标准Vision Transformer架构,但集成了CoordAtt模块模型最终通过CNNModel函数封装,虽然名称是CNN,但实际上是一个Transformer模型。引入了轻量级的CoordAtt注意力机制,增强了模型对空间位置信息的捕捉能力保持了ViT的主要优势,同时通过注意力机制提升了特征表示能力设计简洁高效,适合作为基础模型进行进一步研究和应用。

2401_82355416的博客 701

php 解析pe版本号,PE 文件解析2-获取PE头、区段、数据目录

本帖最后由 appsion 于 2020-10-31 12:33 编辑PE 文件解析2 -获取PE头、区段、数据目录新手学习PE文件解析记录,持续更新. 部分参考来源于网络, 无法逐一标注, 如果侵权,请及时联系. 如有错误请指正,误喷.上文链接:https://www.52pojie.cn/thread-1294150-1-1.html2.png (61.5 KB, 下载次数: 0)2020...

weixin_28976179的博客 450

pscad IEEE标准系统搭建说明

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

PE文件解析(2):RVA与FOA转换和区段表

PE文件的相对虚拟地址是PE文件中的数据、模块等运行在内存中的实际地址相对PE文件装载到内存的基址之间的距离。举例说明,如果PE文件装入虚拟地址(VA)空间的400000h处,且进程从虚址401000h开始执行,我们可以说进程执行起始地址在RVA 1000h。: 虚拟内存地址(Virtual Address)PE 文件被操作系统加载进内存后的地址。文件偏移地址,和内存无关,它是指某个位置距离文件头的偏移。一个程序的各段在内存和文件中的对齐方式是不一样的。FOA:文件对齐值是0x200。

ylh的博客 1548

jre9下载 jdk9

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

简单的PE文件解析

pe文件结构解析

m0_46689007的博客 455

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

我的PE了解

一、什么是PE文件。         PE(Portable Executable)格式,是微软Win32环境可移植可执行文件(如exe、dll、vxd、sys和vdm等)的标准文件格式。 二、PE文件格式         2.1RVA、VA和OFFSET转换和理解         OFFSET 就是010Editor以[0x00]开始的文件中的位置       OFFSET  = RVA

Ye_The_World的博客 544

SHELL手动加壳

SHELL壳的运行原理:加壳过的EXE文件是可执行文件,它可以同正常的EXE文件一样执行。用户执行的实际上是外壳程序,这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序,这一切工作都是在内存中运行的,整个过程对用户是透明的。•编译:将单个的 .c 或 .cpp 编译成中间文件 (.obj),在 VS 下,这个过程由 cl.exe 程序完成。•链接:将编译出的...

weixin_30954607的博客 633

木马常见行为之内存加载DLL资源

前言 很多木马在初次释放恶意代码时,会加载资源文件到内存中。 在内存中展开区段数据,之后再修复重定位、导入表,然后执行恶意代码。 此次用代码实现一下。 详细代码 1.获取资源文件 //获取资源数据 LPVOID LoadDll::GetResourceData(DWORD index) { //声明变量初始化 HMODULE hModule = NULL; HRSRC hRes = NULL; HGLOBAL hLoadRes= NULL; DWORD error .

qq1010624的博客 1010

Dll反射式注入法-代码学习

原理 --------------------------------------------------------------------------------有任何错误,请留言指正。 主要功能:将需要注入的dll写入进程内存,用注射器实现LoadLibrary的功能,使用CreateRemoteThread函数将注射器启动。 将待注入DLL读入自身内存,Dll的导出注射器Reflecti...

yshshx的博客 1361

C++源码免杀与PE加壳实战:从特征消除到动态加载的实现

在软件安全领域,程序保护与恶意代码检测是一场持续的技术博弈。其核心原理在于理解可执行文件的结构与加载机制,特别是PE(Portable Executable)文件格式作为Windows平台的基础,决定了程序在磁盘和内存中的组织方式。从技术价值看,掌握PE结构解析、内存映射和动态链接机制,不仅能深化对操作系统底层运行逻辑的理解,更是实现软件加固、逆向分析及安全研究的关键。在实际应用场景中,这直接关联到软件加壳、代码混淆、反调试等保护技术,以及对应的免杀(Antivirus Evasion)对抗。通过修改源代码

djph26741的博客 444

Aspack壳代码分析

​00417000 90 NOP00417001 > 60 PUSHAD00417002 E8 03000000 CALL 00_aspac.0041700A ; 下一条是花指令 按100417007 90 NOP00417008 EB...

weixin_30954607的博客 316
上一篇: 手动脱UPX壳的几种方法
下一篇: Win7下拖拽文件的bug
sysprogram
博客等级 码龄17年 298粉丝 442原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值