获取PE文件的OEP值 (源码)
来源:互联网 发布:java解析json对象 编辑:程序博客网 时间:2024/06/06 09:54
两种方法读取PE文件的OEP值:一是 直接读取文件,二是 通过内存映射。
#include "stdafx.h"
#include <afx.h>
//-------------------------------
//read the file of .exe get the OEP (Original Entry Point)
//-------------------------------
BOOL ReadOPEbyFile(LPCSTR szFileName)
{
HANDLE hFile;
if ((hFile = CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0))==INVALID_HANDLE_VALUE)
{
printf("Can't open the file");
return FALSE;
}
DWORD dwOEP,cbRead;
IMAGE_DOS_HEADER dos_head[sizeof(IMAGE_DOS_HEADER)];
if (!ReadFile(hFile,dos_head,sizeof(IMAGE_DOS_HEADER),&cbRead,NULL))
{
printf("Read image_dos_header failed ./n");
CloseHandle(hFile);
return FALSE;
}
int nEntryPos = dos_head->e_lfanew+40;
SetFilePointer(hFile,nEntryPos,NULL,FILE_BEGIN);
if (!ReadFile(hFile,&dwOEP,sizeof(dwOEP),&cbRead,NULL)) {
printf("Read OEP failed ./n");
CloseHandle(hFile);
return FALSE;
}
CloseHandle(hFile);
printf("OEP by file: %d/n",dwOEP);
return TRUE;
}
//-----------------------------------------
//fileMapping get the OEP
//-----------------------------------------
BOOL ReadOEPbyMemory(LPCSTR szFileName)
{
struct PE_HEADER_MAP
{
DWORD signature;
IMAGE_FILE_HEADER _head;
IMAGE_OPTIONAL_HEADER opt_head;
IMAGE_SECTION_HEADER section_header[6];
}*header;
HANDLE hFile;
HANDLE hMapping;
void *basepointer;
//open the file
if ((hFile = CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0))==INVALID_HANDLE_VALUE) {
printf("Can't open the file");
return FALSE;
}
if (!(hMapping = CreateFileMapping(hFile,0,PAGE_READONLY|SEC_COMMIT,0,0,0))) {
printf("Mapping failed./n");
CloseHandle(hFile);
return FALSE;
}
if (!(basepointer = MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0)))
{
printf("View failed./n");
CloseHandle(hMapping);
CloseHandle(hFile);
return FALSE;
}
IMAGE_DOS_HEADER *dos_head = (IMAGE_DOS_HEADER *)basepointer;
header = (PE_HEADER_MAP *)((char *)dos_head+dos_head->e_lfanew);
DWORD dwOEP = header->opt_head.AddressOfEntryPoint;
UnmapViewOfFile(basepointer);
CloseHandle(hMapping);
CloseHandle(hFile);
printf("OEP by memory :%d/n",dwOEP);
return TRUE;
}
int main(int argc, char* argv[])
{
printf("Hello World!/n");
ReadOPEbyFile("D://jp.exe");
ReadOEPbyMemory("D://jp.exe");
return 0;
}
- 获取PE文件的OEP值 (源码)
- VC读取PE文件的OEP(程序入口)
- VC读取PE文件的OEP
- vc编写自己的壳之一:对pe文件OEP的修改
- vc编写自己的壳之一:对pe文件OEP的修改
- 两种方法获取文件OEP
- 通过文件读取oep值
- 指针实现找PE OEP
- 查找OEP PE入口点
- 获取PE文件的导出函数列表
- 获取PE文件的导出函数
- 获取PE文件信息的封装
- 获取PE文件信息的封装
- 获取PE文件的区段表
- C++获取PE文件的入口点
- 读取文件的OEP的方法
- 感染PE文件源码
- 获取PE文件自校验值
- Ubuntu Linux关闭红外连接[00原创]
- 深入探究JFreeChart(2)
- 事件处理程序中sender参数的用法
- c++中的引用的使用原理以及使用实例 (3)
- 如何得到磁盘的分区格式,如 fat32,ntfs等
- 获取PE文件的OEP值 (源码)
- sqlserver2000数据库置疑的解决方法
- 将金额转换成大写汉字
- 终于买了房子了!
- 巧取指定记录与外关联查询
- 解决mscomm控件无license的问题
- [转载]六十八个经典故事
- jfreechart 的 api
- 简单小问题,数据窗口相邻行颜色不同