异或文件加密测试

直接上代码吧,写的时候遇到了点问题, 找到根源以后,就搞定了,

注意define的 语法, 错的挺郁闷的


// 20180110_01.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define  FileKey 0x86

//加载PE文件到内存中,并获取文件长度
LPVOID LoadPEFile(LPSTR lpszFile,DWORD &fileSize)
{
	FILE *pFile = NULL;
	//DWORD fileSize = 0;
	LPVOID pFileBuffer = NULL;
	
	//打开文件
	pFile = fopen(lpszFile,"rb");
	
	if(!pFile)
	{
		printf("无法打开文件EXE文件");
		return NULL;
	}
	
	fseek(pFile,0,SEEK_END);
	fileSize = ftell(pFile);
	fseek(pFile,0,SEEK_SET);
	
	//分配缓冲区
	pFileBuffer = malloc(fileSize);
	if(!pFileBuffer)
	{
		printf("分配空间失败!\n");
		fclose(pFile);
		return NULL;
	}
	
	//文件读取
	
	size_t n = fread(pFileBuffer,fileSize,1,pFile);
	
	if(!n)
	{
		printf("读取数据失败\n");
		free(pFileBuffer);
		fclose(pFile);
		return NULL;
	}
	
	//关闭文件
	fclose(pFile);
	return pFileBuffer;
	
}


//内存直接写入到文件
void WirteToFile(LPVOID pFileBuffer,size_t fileSize,LPSTR lpszFile)
{
	FILE *pFile = NULL;	
	//打开文件
	pFile = fopen(lpszFile,"wb");
	
	if(!pFile)
	{
		printf("无法打开文件EXE文件");
		return;
	}
	
	size_t writeSize = fwrite(pFileBuffer,fileSize,1,pFile);
	printf("WirteSize:%d\n",writeSize);
	
	//关闭文件
	fclose(pFile);
	return;
	
}


int main(int argc, char* argv[])
{
	//printf("Hello World!\n");
	//TCHAR srcFilePath = {0};
	LPSTR filePath = "C://noteTemp.exe";
	LPSTR outPath = "C://noteTemp1.exe";
	DWORD fileSize = 0;
	
	LPVOID pFileBuffer = LoadPEFile(filePath,fileSize);
	CHAR* pOld = (CHAR*)pFileBuffer;

	LPVOID pFileBufferNew = malloc(fileSize);
	memset(pFileBufferNew,fileSize,0);
	CHAR* pNew = (CHAR*)pFileBufferNew;

	//数据加密
	for(int i=0;i<(int)fileSize;i++)
	{
		pNew[i] = pOld[i]^FileKey;
		//pOld[i]^=FileKey;
		//int a = pOld[i]^FileKey;

		//memcpy(pNew+i,pOld+i,1);

	}


	WirteToFile(pFileBufferNew,fileSize,outPath);

	return 0;
}

原文链接: 异或文件加密测试 版权所有,转载时请注明出处,违者必究。
注明出处格式:流沙团 ( http://www.gyarmy.com/post-362.html )

发表评论

0则评论给“异或文件加密测试”