windows.h : 1.资源释放

植入病毒木马时,为了使程序变得简洁不容易发现,只把exe放到用户计算机上,需要使用资源释放技术。

顾名思义就是先把需要使用的资源加载到程序中,等到程序运行的时候再从程序中释放到本地计算机,相当于一个小偷把工具先藏在口袋里,

进了用户的家门,保证自身安全之后再把作案工具都掏出来,减少潜入成功的概率,下面介绍这一技术的使用方法

以文本文档 520.txt 作为资源,加载到程序中

首先介绍几个稍后需要用到的相关函数,这几个函数都是在 windows.h 中定义的

1. FindResource 函数

HRSRC FindResource(
    HMODULE hModule,  //处理包含资源的可执行文件模块,若为NULL,则从当前进程模块中加载资源
    LPCWSTR lpName,   //指定资源的名称
    LPCWSTR lpType)   //指定资源类型

//如果函数运行成功,则返回指定资源信息的句柄,可以把句柄传递给loadResource函数来加载资源
//如果运行失败,则返回值为NULL
    

其中 HMODULE 是一个 usign类型的long 宏定义,  LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型

2. SizeofResource 函数

DWORD SizeofResource(
    HMODULE hModule,  //与FindResource中的HMODULE参数相同
    HRSRC hResInfo)   //资源句柄,此句柄必须由函数FindResource或FindResourceEx 来创建

//若执行成功,返回资源的字节数
//若运行失败,则返回值为零

3. LoadResource 函数

HGLOBAL LoadResource(
    HMODULE hModule,
    HRSRC hResInfo)
//返回资源数据句柄,若失败返回NULL

4. LockResource 函数

LPVOID LockResource(
    HGLOBAL hResData)
//返回资源数据第一个字节的指针,若失败返回NULL

释放资源的函数整体编写如下:

#include <tchar.h>
#include <Windows.h>
#include<iostream>
using namespace std;

//定义函数showError
void ShowError(const char* content) {
	cout << content << endl;
}

//资源释放
BOOL FreeMyResource(UINT uiResourceName, LPCWSTR lpszResourceType, char* lpszSaveFileName) {
	//获取指定模块里的资源
	HRSRC hRsrc = ::FindResource(NULL, MAKEINTRESOURCE(uiResourceName), lpszResourceType);
	if (NULL == hRsrc) {
		//没有找到相关资源
		ShowError("FindResource");
		return FALSE;
	}
	//获取资源大小
	DWORD dwSize = ::SizeofResource(NULL, hRsrc);
	if (NULL >= dwSize) {
		//资源大小小于0
		ShowError("SizeofResource");
		return FALSE;
	}
	//将资源加载到内存中
	HGLOBAL hGlobal = ::LoadResource(NULL, hRsrc);
	if (NULL == hGlobal) {
		//执行失败
		ShowError("SizeofResource");
		return FALSE;
	}
	//锁定资源
	LPVOID lpVoid = ::LockResource(hGlobal);
	if (NULL == lpVoid) {
		//锁定失败
		ShowError("LockResource");
		return FALSE;
	}
	//保存资源为文件
	FILE *fp = NULL;
	fopen_s(&fp, lpszSaveFileName, "wb+");
	if (NULL == fp) {
		ShowError("FREEResource");
		return FALSE;
	}
	fwrite(lpVoid, sizeof(char), dwSize, fp);
	fclose(fp);
	return TRUE;
}

 使用MFC项目来测试功能如下:

创建一个MFC项目,设置释放资源的按钮,将按钮绑定函数与上文编写的函数绑定

首先在VS installer中下载安装 MFC组件

新建MFC项目

在资源文件出点击添加资源->自定义资源类型

将资源文件导入:

在资源视图中修改ui和绑定函数:

点击资源释放发现当前目录产生了一个txt文件:

把.exe文件发送到XP 电脑上执行结果:

okk###

猜你喜欢

转载自blog.csdn.net/mid_Faker/article/details/112561913