Windows下的资源释放技术[C\C++]

资源释放技术:

是一种病毒木马经常使用的技术,为了是程序变得更加简洁,当程序要使用一些图片、文本文件时可以把他们作为资源插入到程序中,当程序运行时,在释放到本地。
这样编译出来就只有一个exe文件。

实现原理:

插入资源:首先创建资源,然后在VS里添加自定义资源,并导入创建的资源。
然后利用FindResource()定位程序里的资源,获得资源信息块。
再利用SizeofResource()获得资源的大小
通过LoadResource()把资源加载到程序内存中。
接着通过LockResource()锁定加载到内存中的资源,防止其他操作影响这块内存。
最后从内存中读取出这块内存并保存。

实现步骤:

这里创建一个文本文件为例:
在这里插入图片描述
添加资源:选择自定义。
在这里插入图片描述
导入刚刚创建的txt文件
在这里插入图片描述
在这里插入图片描述
导入结果:
在这里插入图片描述
最后是代码实现。

代码实现:

#include<Windows.h>
#include<iostream>
#include<tchar.h>
#include"resource.h"    //要包含资源文件的头文件

BOOL FreeMyResource(UINT uiResourceName, TCHAR* lpszResourceType, char *lpszSaveFileName);

int _tmain()
{
	_tprintf(_T("资源释放技术 \r\n"));
	FreeMyResource(IDR_MYRESOURCE, TEXT("MYRESOURCE"), "TEST.txt");
	getchar();
	return 0;
}


BOOL FreeMyResource(UINT uiResourceName,TCHAR* lpszResourceType,char *lpszSaveFileName)
{
	//获取指定模块的资源
	HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(uiResourceName), lpszResourceType);

	if (hRsrc == NULL)
	{
		_tprintf(_T("FindResource Failed!"));
		return FALSE;
	}


	//获取资源大小
	DWORD dwSize = SizeofResource(NULL, hRsrc);
	
	if (dwSize<=0)
	{
		_tprintf(_T("SizeofResource Failed!"));
		return FALSE;
	}


	//将资源加载到内存
	HGLOBAL hGlobal = LoadResource(NULL, hRsrc);

	if (hGlobal==NULL)
	{
		_tprintf(_T("LoadResource Failed!"));
		return FALSE;
	}
	

	//锁定资源
	LPVOID lpVoid = LockResource(hGlobal);
	
	if (lpVoid==NULL)
	{
		_tprintf(_T("LockResource Failed!"));
		return FALSE;
	}


	//将资源保存为文件
	FILE* fp = NULL;
	
	fopen_s(&fp, lpszSaveFileName, "wb+");//打开一个文件/创建新文件
	
	if (fp==NULL)
	{
		_tprintf(_T("LockResource Failed!"));
		return FALSE;
	}
	fwrite(lpVoid, sizeof(char), dwSize, fp);

	fclose(fp);

	return TRUE;
}

运行结果

释放成功。
在这里插入图片描述在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章