病毒写法,资源的释放.

病毒写法,资源的释放.

一丶简介

1.资源简介

为什么说是病毒写法资源释放.其实技术是把双刃剑.可以做好事也可以做坏事.我们知道.程序的本质就是二进制.所以在VS中我们可以添加二进制数据并且释放出来.释放的资源可以是你自定义的.也可以是已有的资源.
那么资源如何加载以及释放

以VS2013为例.新建一个控制台程序 (win32项目也可以.MFC也可以.跟项目无关) 然后打开资源视图

视图 -> 其它窗口 -> 资源视图
或者快捷键Ctrl + shift + E

我们可以添加一个自定义资源.只需要在资源视图上右键 -> 添加资源->导入->在资源类型哪里随便写就可以了.我是已经添加过了.正常没有添加过是空的.他会自动给你创建一个资源类型.

2.释放资源.

释放资源总共四步,很简单都是API函数.但是注意有坑.


查找资源
HRSRC FindResourceA(
  HMODULE hModule,                 //你要获取的资源模块,如果是当前程序可以填写NULL.如果你要获取某个DLL的.需要填写GetModule(xx.DLL);
  LPCSTR  lpName,                  //资源的ID.比如我的就是 IDR_TEST1, 注意使用MAKEINTRESOURCE进行解析
  LPCSTR  lpType                   //资源的类型.这个是你自定义的资源类型
);

获取资源大小
DWORD WINAPI SizeofResource(
  _In_opt_ HMODULE hModule,      //模块名
  _In_     HRSRC   hResInfo      //FindResource返回的句柄
);

加载资源,寻找到资源就要加载资源.
HGLOBAL
WINAPI
LoadResource(
    _In_opt_ HMODULE hModule,
    _In_ HRSRC hResInfo       //FindResource返回的句柄
    );

锁定资源,加载后的资源会进行坐定.并且返回这个资源的首地址.
WINBASEAPI
LPVOID
WINAPI
LockResource(
    _In_ HGLOBAL hResData
    );

通过上面几个API我们就可以查找资源,获取资源大小.写文件即可.

比如如果你的资源是一个PE文件(恶意EXE) 那么你可以释放出来.并且调用 CreateProcess进行调用.执行你的恶意代码.
也可以做好事.不如图片资源释放出来可以供程序使用.

唯一缺点就是文件变大.其实资源就是放到PE当中.然后你如果会解析资源表.你也可以找一下.

3.完整代码

BOOL ReleaseResource(DWORD ResourceID,const TCHAR *ResultType) //释放资源.
{
       // 或者是: HRSRC hr = ::FindResource(NULL, MAKEINTRESOURCE(IDR_BIN2), "BIN");  如果是W版本则使用 L"BIN" 注意.一定要包含头文件 resourse.h. 否则你的MAKEINTRESOURCE找不到 IDR_BIN2. 当然这个ID是你自定义的.
	HRSRC hr = ::FindResource(NULL, MAKEINTRESOURCE(ResourceID), ResultType);
	if (NULL == hr)
	{
		int ierr = GetLastError();
		return FALSE;
	}
	ULONG nResSize = ::SizeofResource(NULL, hr);  // Data size/length  
	HGLOBAL hG = ::LoadResource(NULL, hr);
	if (NULL == hG || nResSize <= 0)
	{
		//fail  
	}
	LPBYTE pData = (LPBYTE)LockResource(hG);    // Data Ptr  
	// ID方式  
	//写入到文件
	FILE *pFile = NULL;
	fopen_s(&pFile, "x64Test111.dll","wb+");
	//写入到文件
	if (NULL == pFile)
	{
		MyOutputDebugStrig(TEXT("释放资源打开文件失败"));
		return FALSE;
	}
	fwrite(pData, sizeof(char), nResSize, pFile);//写入到文件

	fclose(pFile);
}

原文地址:https://www.cnblogs.com/iBinary/p/10807146.html