植入病毒木马时,为了使程序变得简洁不容易发现,只把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###