zoukankan      html  css  js  c++  java
  • 病毒写法,资源的释放.

    病毒写法,资源的释放.

    一丶简介

    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);
    }
    
    
  • 相关阅读:
    泛型
    a版本冲刺第四天
    a版本冲刺第三天
    a版本冲刺第二天
    a版本冲刺第一天
    第四次团队作业——系统设计
    团队项目——需求规格说明书
    第二次团队作业——预则立&&他山之石
    团队项目选题报告
    Alpha 冲刺4
  • 原文地址:https://www.cnblogs.com/iBinary/p/10807146.html
Copyright © 2011-2022 走看看