20145314郑凯杰《网络对抗技术》资源融合捆绑(资源捆绑)的实现

20145314郑凯杰《网络对抗技术》资源融合捆绑(资源捆绑)的实现

一、本节摘要

  • 简介:资源融合捆绑,在PE文件结构中有一块特殊的节结构——资源节。即是将被捆绑的文件,存至目标PE文件的资源节中,这样既可以实现文件的隐蔽捆绑,也可以在关键的时候将它调出来使用。可以通过将资源(恶意病毒或正常文件)注入该段,实现资源的隐藏。进一步可以通过另一种方法将资源再释放出来,就可以实现攻击。
  • 目标:
    1. 用VS编译器对WIN32程序进行操作,将恶意程序注入进其资源节,实现绑定。
    2. 编写一个回调函数,利用API函数实现对资源内容的替换,在需要攻击的时候将恶意代码释放。1. 结合免杀后门,应用system语句实现释放资源时的自动攻击。
  • 工作环境:
    • Linux——Kali(提供回连靶机)
    • Windows 7
  • 最终成果:已全部实现目标

二、实现过程

1·在PE资源段注入目标文件

打开VS2013,建立一个WIN32程序(不可以用其他方式,首先是因为回调函数的需要,其次是因为只有在win32project下才有resource.h的资源头,对于病毒化游戏比较适合)。可见如图:

为源程序添加EXE资源,这里选择我的老资源,也就是运行游戏的EXE文件:

另外,还需要加上我们的后门,以达到病毒化程序的效果:

因此,直接在项目上右键,添加资源,选择导入:

将两个文件都导入进去,并在类型中,创建一项exe文件

这时候,就可以看到资源已经被添加进来了:

最关键的一步来了,此时的资源还不算是真正这个程序的资源,而是作为一种引用资源。这一点我们单击该资源,在下面的具体路径中就能看出。

所以现在要做的,就是把这个资源列为程序的资源段中的资源:

右击项目,打开属性:

找到:

配置属性→常规→项类型 将其中原本的“不参与生成”改为"PRI资源"(注意,不能改为“资源”,否则会出现路径错误)

此时,基本上就完成了捆绑,只要再在主程序中编写一个窗口,提示大家点击时解压。我们点击生成,一个捆绑了资源的EXE就出现了。

这时就可以把原来的EXE删掉了,对比大小,发现病毒化后的EXE还是会比原先大出一些的(不过在平时应用中,几十KB的变化没有人会在意,更何况360之类的愚蠢杀软还杀不出来)

执行后,出现弹窗。接下来我们要做的就是让大家点击这个弹窗后,释放存于该EXE中的文件,并执行我们的后门程序。

2·对绑定的文件分析,确认绑定

用PE explorer打开绑定后的exe文件,进入resourse view查看:

可以看到,已经绑定了三个EXE文件(其中一个是我绑了两次的后门程序)

看到上面的数字129 130 131,这个数字的含义是什么呢?

经过不断百度和学习,我确定了这个数字是资源ID

那么如何确认呢?

打开我们WIN32工程项目的resourse.h头文件,找到了这几个字段:

这就是资源的ID,每次添加PRI资源后,在该头文件都会进行追加定义,并赋予资源ID。

这有什么用呢?很显然的一点是可以在这个EXE中准确地找到该资源,对于我们的调出资源很有用。但是怎么用?

接下来我要开始编写一段回调函数,实现资源的调出。

3·将PE文件中捆绑的资源释放出来,最终实现攻击

首先确定是触发条件,因为在前面我已经编写了一个交互窗口,所以出发条件很显然就是点击那个按钮。

再来,思路是读出来、写进去

  1. 定位自定义资源——FindResource
  2. 加载资源到内存中,并获取对应句柄——LoadResource
  3. 锁定资源,获取指针——LockResource
  4. 最后将资源写入文件——fwrite

部分核心代码如下:

					//定位自定义资源,返回资源的句柄
					hRsrc = FindResource(NULL, //包含所需资源的可执行文件句柄,为NULL代表是程序本身的句柄
						   MAKEINTRESOURCE(IDR_EXE3),//资源ID
						   _T("EXE"));//资源类型
					   if (hRsrc == NULL)
					   {
						   break;
					   }
					   //加载资源到内存中,返回资源数据的句柄
					hGlobal = LoadResource(NULL,//同上,模块句柄
						   hRsrc);//定位资源函数的返回值
					   if (hGlobal == NULL)
					   {
						   break;
					   }
					   //锁定资源,返回值是指向该资源的内存指针(重要,之后便可以用该指针来进行操作)
					pBuffer = LockResource(hGlobal); //LoadResource的返回值
					   if (pBuffer == NULL)
					   {
						   break;
					   }
					   //获取资源的大小
					dwSize = SizeofResource(NULL, hRsrc);
					   if (dwSize == 0)
					   {
						   break;
					   }
					   //测试写到磁盘
					   
					   fopen_s(&fp, "辅助游戏程序.exe", "wb");
					   if (fp != NULL)
					   {
						   //fwrite的三个参数(1,待写入的数据;2、(数据块的大小)每次写的长度;3、数据块的数目;4、文件指针)
						   //返回值是写入的数据块的个数。
						   if (fwrite(pBuffer, 1, dwSize, fp) == dwSize);
						   {
							   fclose(fp);
						   }
					   }

这样就实现了从EXE中的资源节将资源释出来的效果

实测:

在游戏目录下,先把原EXE删了,再打开我们的病毒化入口程序:

单击按钮:

释放了两个EXE文件,并自动运行。讲解如图,根据系统时间和文件修改时间也能看出来,文件就是刚生成的。

另外图中有个亮点,就是360两大卫士一直傻乎乎的在看。hhhh

查杀一下

没有问题。完成免杀。

posted on 2017-06-16 21:11  20145314郑凯杰  阅读(637)  评论(0编辑  收藏  举报

导航