扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
typedef struct tagBmpFileHeader //位图文件头结构
{
char bfSign[2]; //文件特征,一般是标志“BM”
unsigned long bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned long bfOffBits;
}BmpFileHeader;
typedef struct tagBmpInfoHeader //位图信息头结构 (Windows 风格)
{
unsigned long biSize; //信息结构的大小,40,这个字段必须正确填写
long biWidth;//位图的宽度
long biHeight;//位图的高度
unsigned short biPlanes;
unsigned short biBitCount; //颜色深度
unsigned long biCompression;
unsigned long biSizeImage;//位图数据的大小
long biXPelsPerMeter;
long biYPelsPerMeter;
unsigned long biClrUsed;
unsigned long biClrImportant;
}BmpInfoHeader;
文件头结构的bfSign必须是“BM”,bfSize是整个位图文件的大小,bfOffBits对于24位位图就是文件头结构加位图信息头结构的大小,对于使用调色版的位图文件还要跨过调色版区域,一般可以随便填写,防病毒软件通常不检查这个字段,bfReserved1和bfReserved2必须是0。位图信息头结构的biSize必须是40,biBitCount通常选择24,因为24位位图计算大小比较简单。biSizeImage 由biWidth和biHeight以及biBitCount字段共同决定,可以根据可执行文件的大小适当的填写,但是要保证biWidth*biHeight*biBitCount / 8稍大于可执行文件的大小,在计算biSizeImage还要注意位图文件的数据每行按4字节对齐,适当的选择biWidth和biHeight,使计算出来的biSizeImage稍大于可执行文件的大小,多出来的部分可以用随机数字填充。
骗过浏览器和防病毒软件之后要做的事情就是找到我们的假bmp位图文件,将可执行文件从位图文件中还原并执行。IE在浏览网页时会将网页中嵌入的媒体文件下载到一个缓存目录中,这个缓存目录可以从注册表中得到,其位置是:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache
使用脚本对象WScript.Shell的RegRead方法可以很方便地得到这个目录,这样就可以找到我们的假位图文件,当然为了防止缓存目录中存在重名文件的问题,可以为我们的假位图文件适当地取一个长一点的比较怪异的名字。找到浏览器自动下载的假位图文件之后就可以从假位图文件中还原出我们的可执行程序,不过在IE的缓存目录中直接操作文件会引起Windows系统的警告,所以还要将伪装的位图文件复制到系统的临时目录中执行还原操作。直接操作二进制文件并不是VB Script的特长,并且通过Scripting.FileSystemObject对象操作二进制文件会引起防病毒软件的警觉,但是使用Scripting.FileSystemObject操作文本文件一般不会引起防病毒软件的注意,所以我们可以结合Win-DOS的批处理文件和DEBUG命令巧妙地解决这个问题。Win-DOS批处理文件是一个由DOS命令组成的文本文件,类似于Unix/Linux的Shell程序,其文件扩展名为.bat,我们生成的这个批处理文件要完成以下几个任务:将假位图文件从IE缓存目录拷贝到Windows的临时目录中,从假位图文件中还原出可执行文件,删除临时文件,将还原出的可执行程序拷贝到Windows的系统目录中,删除临时目录中的假位图文件以及最后运行还原出的可执行程序。只有还原出可执行文件的操作麻烦一点,其他的操作都可以用copy和del命令完成,所以我在下一段重点讲解如何不使用Scripting.FileSystemObject对象从假位图文件中还原可执行文件的操作。
还原可执行文件需要另外一个DOS命令:Debug,Debug是一个功能强大的调试工具,它有很多子命令,可以将二进制文件映射到内存中,也可以将内存中的数据写入文件,我们就利用这个特性完成可执行程序文件的还原工作。Debug命令的w子命令可以将二进制文件在内存中的映射的部分或全部写回到文件中,使用w子命令时BX寄存器存放要写入数据大小的高16位,CX寄存器存放写入数据大小的低16位,这个写入数据的大小就是我们嵌入假位图文件中的可执行文件的大小。使用w子命令要指定写入数据开始位置的偏移量,也就是要跳过假位图文件的头结构和位图信息头结构。现在举一个例子,假设嵌入假位图文件的可执行文件大小是143562字节,换算成16进制就是230C9H,位图头结构加位图信息头结构共54个字节,换算成16进制就是36H,这时Debug命令序列可以这样写:
debug ..\假位图文件的位置\fakefile.bmp //装入假位图文件
-rbx
-2 //显示BX寄存器的值并修改成2
-rcx
-30C9 //显示CX寄存器的值并修改成30C9
-w136 //从36H处开始写回文件
-q //退出Debug命令
此时假位图文件fakefile.bmp的大小是143562字节,其内容就是可执行文件,将其更名为fakefile.exe并拷贝到系统目录就可以执行了。
以上就是对这种方法的完整描述,可以看出来,这是一种非常危险的方法,网页制作者可以不经允许在访问者的计算机上执行非法程序,甚至可以使用Del,Deltree,Format等DOS命令破坏用户的文件系统。虽然这种方法设计的很巧妙,能够骗过防病毒软件,貌似很厉害,其实也很容易防范。该方法的重点在脚本代码方面,只要卸载Windows的脚本调试器就可以阻断脚本代码的执行,如果是Windows 95/98.Me的用户,可以将Windows 的Command目录下的Deltree.com、Format.com、Debug.com、Fdisk.exe这几个命令程序改个文件名就可以防范脚本代码通过Win-DOS的批处理文件执行这些命令。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者