病毒写法,资源的释放.

时间:2022-06-21
本文章向大家介绍病毒写法,资源的释放.,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

目录

病毒写法,资源的释放.

一丶简介

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