病毒写法,资源的释放.
Posted ibinary
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了病毒写法,资源的释放.相关的知识,希望对你有一定的参考价值。
病毒写法,资源的释放.
一丶简介
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(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);
}
以上是关于病毒写法,资源的释放.的主要内容,如果未能解决你的问题,请参考以下文章