PE练习代码@硬盘上的PE文件->FileBuffer->ImageBuffer->NewBuffer->存盘

实现功能: 硬盘上的PE文件-》FileBuffer(原封不动的复制到内存)-》ImageBuffer(拉伸为4G空间存储模式)=>NewBuffer(又还原成FileBUffer)=>存盘(保存为PE文件)

//主程序 硬盘上的PE文件-》FileBuffer(原封不动的复制到内存)-》ImageBuffer(拉伸为4G空间存储模式)=>NewBuffer(又还原成FileBUffer)=>存盘(保存为PE文件)
#include <stdio.h>
#include <stdlib.h>
#include "func.h"

int main(void)
{
   
	PrintNTHeaders();//打印PE头信息

	LPVOID pFileBuffer = NULL;
	LPVOID pImageBuffer = NULL;
	LPVOID pNewBuffer = NULL;
	size_t size;
	if (!ReadPEFile(FILEPATH, &pFileBuffer))
	{
   
		printf("文件读取失败\n");
		return;
	}

	printf("newbuffer开始的位置:%p \n", pNewBuffer);
	CopyFileBufferToImageBuffer(pFileBuffer, &pImageBuffer);
	size=CopyImageBufferToNewBuffer(pImageBuffer, &pNewBuffer);
	printf("newbuffer里的pImageBuffer当前位置:%p \n", pNewBuffer);

    MemeryTOFile(pNewBuffer, size, "D:/逆向学习/soure/b.exe");



	getchar();
	return 1;

}
//func.h  头文件
#pragma once
#include <Windows.h>
#define FILEPATH "D:/逆向学习/soure/HelloWorld.exe"
//函数声明								

//**************************************************************************								
//ReadPEFile:将文件读取到缓冲区								
//参数说明:								
//lpszFile 文件路径								
//pFileBuffer 缓冲区指针								
//返回值说明:								
//读取失败返回0  否则返回实际读取的大小								
//**************************************************************************								
DWORD ReadPEFile(IN LPSTR lpszFile, OUT LPVOID* pFileBuffer);

//CopyFileBufferToImageBuffer:将文件从FileBuffer复制到ImageBuffer								
//参数说明:								
//pFileBuffer  FileBuffer指针								
//pImageBuffer ImageBuffer指针								
//返回值说明:								
//读取失败返回0  否则返回复制的大小								
//**************************************************************************								
DWORD CopyFileBufferToImageBuffer(IN LPVOID pFileBuffer, OUT LPVOID* pImageBuffer);

//**************************************************************************								
//CopyImageBufferToNewBuffer:将ImageBuffer中的数据复制到新的缓冲区								
//参数说明:								
//pImageBuffer ImageBuffer指针								
//pNewBuffer NewBuffer指针								
//返回值说明:								
//读取失败返回0  否则返回复制的大小								
//**************************************************************************								
DWORD CopyImageBufferToNewBuffer(IN LPVOID pImageBuffer, OUT LPVOID* pNewBuffer);

//MemeryTOFile:将内存中的数据复制到文件								
//参数说明:								
//pMemBuffer 内存中数据的指针								
//size 要复制的大小								
//lpszFile 要存储的文件路径								
//返回值说明:								
//读取失败返回0  否则返回复制的大小								
//**************************************************************************								
BOOL MemeryTOFile(IN LPVOID pMemBuffer, IN size_t size, OUT LPSTR lpszFile);


//打印PE文件信息
VOID PrintNTHeaders();
//func.c 函数的实现

#include "func.h"
#include <stdio.h>


DWORD ReadPEFile(LPSTR lpszFile, OUT LPVOID* pFileBuffer)
{
   
	FILE* pFile = NULL;
	DWORD fileSize = 0;
	//LPVOID pFileBuffer = NULL;

	//打开文件	
	pFile = fopen(lpszFile, "rb");
	if (!pFile)
	{
   
		printf(" 无法打开 EXE 文件! ");
		return NULL;
	}
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值