解析PE文件的附加数据
解析程序自己的附加数据,将附加数据写入文件里。
主要是解析PE文件头。定位到overlay的地方。写入文件。
常应用的场景是在crackme中,crackme自身有一段加密过的附加数据。在crackme执行的过程中解析自己的附加数据,然后解密这段数据。。
。。
代码留存:
//解析自己的PE文件
TCHAR szModuleFile[MAX_PATH] = {0};
::GetModuleFileName(NULL, szModuleFile, MAX_PATH); HANDLE hFile = ::CreateFile(szModuleFile, 0X80000000, 0X1, NULL, 0x3, 0x80, NULL );
if (!hFile)
{
AfxMessageBox("create file error");
return ;
}
DWORD dwFileSize = 0;
dwFileSize = ::GetFileSize(hFile, NULL);
if (!dwFileSize)
{
AfxMessageBox("GetFileSize error");
return ;
}
TCHAR *pBuffer = new TCHAR[dwFileSize+1];
DWORD dwReadBytes = 0;
BOOL bSuc = ::ReadFile(hFile, pBuffer, dwFileSize, &dwReadBytes, NULL);
if (!bSuc)
{
AfxMessageBox("read file error");
return ;
}
IMAGE_DOS_HEADER *pDosHead =(IMAGE_DOS_HEADER *)pBuffer;
IMAGE_NT_HEADERS *pNtHeader;
// 得到PE文件头.
pNtHeader = (IMAGE_NT_HEADERS*)((char*)pDosHead + pDosHead->e_lfanew);
WORD wNumOfSection = pNtHeader->FileHeader.NumberOfSections;
//DWORD dwTemp = wNumOfSection * (sizeof(IMAGE_SECTION_HEADER)/sizeof(DWORD));
WORD wSizeOfOptionalHeader = pNtHeader->FileHeader.SizeOfOptionalHeader; DWORD *pOverLay;
DWORD *pLastSectionVirualAddress;
DWORD *pLastSectionVirualSize;
DWORD *pLastSectionPhyAddress, *pLastSectionPhySize; pLastSectionVirualSize = (DWORD*) ((char*)pNtHeader+ sizeof(IMAGE_NT_HEADERS) + (wNumOfSection-1)*sizeof(IMAGE_SECTION_HEADER) + sizeof(BYTE)*IMAGE_SIZEOF_SHORT_NAME );
pLastSectionVirualAddress = pLastSectionVirualSize + 1;
pLastSectionPhyAddress = pLastSectionVirualSize + 2;
pLastSectionPhySize = pLastSectionVirualSize + 3; DWORD dw1 = *pLastSectionPhyAddress;
DWORD dw2 = *pLastSectionPhySize;
pOverLay = (DWORD*)(dw1 + dw2 + pBuffer);
DWORD dwOverlaySize = dwFileSize - (dw1 + dw2); HANDLE hOutFile = ::CreateFile("C:\\Users\\Administrator\\Desktop\\crackme.exe.overlay", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, NULL, NULL);
if (!hOutFile)
{
return ;
}
DWORD dwWritten = 0;
::WriteFile(hOutFile, pOverLay, dwOverlaySize, &dwWritten, NULL);
::CloseHandle(hOutFile); if ((char *)pOverLay == 0x0)
{
AfxMessageBox("附加数据首字节为0");
return ;
} ::free(pBuffer);
::CloseHandle(hFile);
解析PE文件的附加数据的更多相关文章
- 解析PE文件
最近在自学解析PE文件,根据小辣椒(CFF Explorer)以及各论坛上大佬的帖子,做了个黑屏打印PE文件的,历时7天完成,在此想跟有相关需要的同学们分享下思路,有不足之处也希望大家不吝赐教,指点出 ...
- 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据
开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中 ...
- 解析Excel文件并把数据存入数据库
前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...
- 解析excel文件并将数据导入到数据库中
今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...
- PE文件附加数据感染之Worm.Win32.Agent.ayd病毒分析
一.基本信息 样本名称:1q8JRgwDeGMofs.exe 病毒名称:Worm.Win32.Agent.ayd 文件大小:165384 字节 文件MD5:7EF5D0028997CB7DD3484A ...
- PE文件详解二
本文转自小甲鱼的PE文件相关教程,原文传送门 咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用! 接着我们来谈谈 IMAGE_OPTIONAL_HEADER 结构 ...
- 动态修改PE文件图标(使用UpdateResource API函数)
PE文件的图标存储在资源文件中,而操作资源要用到的API函数就是UpdateResource首先我们需要先了解一下ICO格式,参考资料:http://www.moon-soft.com/program ...
- PE文件常用结构体
Dos头结构: typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number WORD e_c ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
随机推荐
- 定时任务管理之python篇celery使用
一.为什么要用celery celery是一个简单.灵活.可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具.他是一个专注于实时处理的任务队列,同时也支持任务调度. celery是异 ...
- hdu 4602 递推关系矩阵快速幂模
Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 21深入理解C指针之---通过指针传递数据
一.在C程序设计中,主要活动就是操纵数据 1.数据传递:将数据作为参数传入参数和将数据作为数据返回两种 2.函数: 1).函数类型:主要是指函数返回数据的类型,可以是基本类型或复杂数据类型,即使函数无 ...
- linux 头文件以及库的路径
原来在编译的时候可以指定执行时去哪里找需要的lib文件,长知识了 本文详细介绍了Linux 下gcc头文件指定方法,以及搜索路径顺序的问题.另外,还总结了,gcc动态链接的方法以及路径指定,同样也讨论 ...
- [TL-WR845N V4] 无线桥接(WDS)设置 + 迅捷桥接配置
官方文章转载备忘: http://service.tp-link.com.cn/detail_article_697.html?spm=a220o.1000855.0.0.eTMbmU 迅捷桥接配置: ...
- Day 22 生成器yield表达式及内置函数(一丢丢)
本日知识点: ################################### #一.上节课复习:在for循环式,调用对象内部的__iter__方法, # 把他们变成了可迭代对象然后for循环调 ...
- WEB学习-兼容问题
css选择器 儿子选择器 (IE7开始兼容,IE6不兼容.) div>p{ color:red; } div的儿子p.和div的后代p的截然不同. 能够选择: <div> <p ...
- formValidator阻止提交跳转
formValidator这个前台校验插件非常好用,其中有几个很有特点的方法可以单独提出使用,效果非常棒这里要说的是其核心方法之一,阻止提交动作,先校验,校验成功再执行提交动作 $("#ph ...
- Java 基础【06】复合赋值运算
这是今天在开发当中遇到的问题,虽然不是很大,但还是花了一点时间去琢磨. 嗯,好了.先看一段源代码 short value=2; value-=2; 源码就是上面这个样子的,我动手写的时候因为理解的问题 ...
- Tarjan缩点+DAG图dp
题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...