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;
}

運行結果

釋放成功。
在這裏插入圖片描述在這裏插入圖片描述

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