解析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 ...
随机推荐
- 从输入url到页面呈现的过程
从输入url到页面呈现的过程包括两个基本过程:网络通信和页面渲染 网络通信主要过程是 域名解析 -> TCP连接 -> HTTP请求 -> 服务端响应,返回HTML 页面渲染的主要过 ...
- 【CCF】无线网络 搜索+思维
#include<iostream> #include<cstdio> #include<cstring> #include<string> #incl ...
- Python Base Three
//sixth day to study python(2016/8/7) 32. In python , there are have an special type dictionary , it ...
- Python实现删除文件夹内规定时间内的文件
需求: 在测试程序的时候,程序会大批量的上传文件到规定目录,然后文件根据日期DAY新建文件夹存放,比如28号上传的文件放到 .../28/* 内,29号上传的文件放到 .../29/*内,因为需要 ...
- 【POJ2104】K-th Number(主席树)
题意:有n个数组成的序列,要求维护数据结构支持在线的下列两种操作: 1:单点修改,将第x个数修改成y 2:区间查询,询问从第x个数到第y个之间第K大的数 n<=100000,a[i]<=1 ...
- ajax cache enable and ajax concurrency!
Today, forget to close ajax cache which leads to duplicate result from cache as to Jquery, this way, ...
- 学习javascript设计模式之中介者模式
1.中介者模式的作用就是解除对象与对象之间的紧耦合关系.增加一个中介者对象后,所有的相关对象都通过中介者来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知中介对象即可.中介者使各对象之间耦合 ...
- 长度rem的使用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Android Studio 快捷键整理分享-SadieYu
文章编辑整理:Android Studio 中文组 - SadieYu Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 ...
- Nginx没有启动文件、nginx服务不支持chkconfig、nginx无法自启
Nginx没有启动文件.nginx服务不支持chkconfig.nginx无法自启 问题描述: Nginx安装后,当想要设置Ngixn为开机启动时, 就需要把nginx的启动命令路径放到/etc/rc ...