EXE伪装术之Word捆绑
前几天有朋友问我有没有把木马和Word文档捆绑在一起的程序。记得以前自己写过这么一个小程序,就从N重文件夹下找了出来给他。正在读本文的读者可能要问了,干嘛要那么麻烦,直接把EXE程序的图标改成Word文档的图标不就好了吗?以前我也是这么想的,后来我发现被压缩过的EXE程序图标资源替换比较困难,此外别人点了换了图标的木马,发现没有打开相应的Word文档会提高警惕进而查杀你的木马。
其实各大黑客类、安全类站点收集了不少捆绑器,其中也不乏捆绑非EXE格式文件的工具,所以这里我不是说自己的程序多么有用,只是和朋友们一起扩展思路提高编程能力。本文中我所做的程序参考了徐景周的文件捆绑器的代码,《黑客防线》以前有文章介绍,读者可以翻看理解原理。
在系统容错允许下,于EXE文件末尾添加数据,EXE文件是可以正常执行的。我们要做就是把木马的数据和Word文挡的数据写到伪装器的尾部。结构如下:
---------------------------------------
|bind.exe|muma.exe|Word.doc|
---------------------------------------
当捆绑的bind.exe运行后,读取捆绑的数据生成muma.exe和Word.doc一并运行,而自身则结束进程。当然这里bind.exe要做的远比我说的要复杂的多,它还承担写数据的功能。
程序界面。
首先说说如何利用Word的图标,前面提到我们是把数据写到伪装器尾部,可见最后生成的捆绑程序利用的是伪装器的图标,所有我们直接把伪装器的图标换成Word文档的图标。
本程序代码中Bind_Files()函数负责写数据到伪装器的尾部。伪代码如下:
Bind_Files()
{
_stat(my_name, &ST);//获取自身文件伪装信息
fread(buf, 1, modify_data.my_length, myself);//储存自身文件信息到缓冲区
out = fopen("xicao.exe", "wb");//创建最终合成文件
fwrite(buf, 1, bytesin, out);//写入第一个要伪装的文件数据
fwrite(buf, 1, bytesin, out);//写入第二个要伪装的文件数据
}
另一个重要的函数就是Unbind_and_Run(),它负责读数据并运行捆绑的文件。伪代码如下:
Unbind_and_Run()
{
GetSystemDirectory(chSystemDir,MAX_PATH);//将文件在系统目录中展开
out =fopen(strSystemDir + "\\NEW.doc", "wb"); //创建第一个伪装的文件
out =fopen(strSystemDir + "\\WINWord.EXE", "wb"); //创建第二个伪装的文件
HINSTANCE result =ShellExecute(NULL, _T("open"),strSystemDir + "\\NEW.doc", NULL,NULL, SW_SHOW);//打开WROD
Create_Process(strSystemDir + "\\WINWord.EXE");//运行木马文件
}
正如伪代码中所描述的,为了具有迷惑性,我们还将木马的进程名改为WINWord.EXE。
读者又要问了,应该什么时候用Bind_Files(),什么时候用Unbind_and_Run()函数呢?其实就是如何判断自己有没有捆绑数据。本程序通过判断程序本身的大小来决定:当自身大小小于35K时是非捆绑状态,显示正常界面。否则调用Unbind_and_Run()函数,退出自身进程。
怎么样,伪装的很象吧,当运行之后就可以运行木马程序和打开Word文档了。当然了,只要显示文件的后缀,就原形毕露了。
另外,图中看到的“Microsoft Word 文档”和“56 K”字样是修改了程序的版本资源(VS_VERSION_INFO)所得到的。
我一直认为,只要弄清楚了程序的原理和算法,程序的实现就指日可待。所以本文并没有解释大段大段的代码,只是告诉了大家原理,程序的具体实现请大家参看源代码。
搜索更多相关主题的帖子:
Word EXE 木马 黑客 捆绑 Word EXE 捆绑