代码实现exe程序释放资源内容到文件

代码实现,将资源内容独立释放出来,恶意程序常用(隐藏恶意代码)
步骤:

1.添加资源,导入资源内容
2.查找资源,加载资源,锁定资源
3.保存到文件

  • 在项目解决方案中看到名为资源文件的空文件夹,右键添加–>资源

  • 单击自定义,然后在弹出的资源类型框中随便自己想要命名的类型(例如MYRES)

  • 然后双击所创建的类型名或点击导入

  • 导入自定义资源内容

  • 编写代码释放资源到文件。这里需要注意,如果不清楚FreeResource函数第二个参数(资源ID),可以在资源头文件里查看,或者可以使用StudyPE等工具查看资源ID。如图6F就是资源ID

代码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<stdio.h>
#include<windows.h>

BOOL FreeResource(UINT,PCHAR,PCHAR);
void ShowError(const char *);

void main()
{
FreeResource(0x6F,"MYRES","Rsrc.txt");//第一个参数为资源类型,第二个为自定义的类型名,第三个为要释放的文件名
getchar();
}

BOOL FreeResource(UINT ResName,char * ResType,char * SaveName)
{
HRSRC hRsrc = FindResource(NULL,MAKEINTRESOURCE(ResName),ResType);
if (NULL == hRsrc)
{
ShowError("FindResource");
return FALSE;
}//查找资源

DWORD dwSize = SizeofResource(NULL,hRsrc);
if (0 >= dwSize)
{
ShowError("SizeofResource");
return FALSE;
}//获取资源大小

HGLOBAL hGlobal = LoadResource(NULL,hRsrc);
if (NULL == hGlobal)
{
ShowError("LoadResource");
return FALSE;
}//加载资源到内存

LPVOID lpVoid = LockResource(hGlobal);
if (NULL == lpVoid)
{
ShowError("LockResource");
return FALSE;
}//锁定资源

FILE *fp = fopen(SaveName,"wb+");
if (NULL == fp)
{
ShowError("LockResource");
return FALSE;
}
fwrite(lpVoid,sizeof(char),dwSize,fp);//资源保存到文件
fclose(fp);
FreeResource(hGlobal);
return TRUE;
}

void ShowError(const char * err)
{
printf("%s--%d",err,GetLastError());
}
  • 最终释放资源内容到文件