|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
您现在的位置: ChinaBeta.cn 中文IT资讯 >> 网络安全 >> 菜鸟入门 >> HACK技术正文
杀毒软件实时杀毒的奥秘(vxd文件监控)
Www.ChinaBeta.Cn 更新时间:2006-11-3

【ChinaBeta.Cn 网络安全】

市面上所有号称“虚拟机”,“防火墙”的实时监控杀毒软件无一不是使用的IFSHOOK技术。但是同时也有一些朋友不断写MAIL给我打听如何实现读写的监控。下面给出用VTOOLSD写的代码,也就是所有实时杀毒软件的奥秘。同时,很多拦截文件操作的软件,例如对目录加密,文件加密等,也采用了雷同的技术。

由于代码十分简单,不分析了。

CODE:

//================================================
// 
//By Lu Lin 2000.5.10 
// Apply with VtoolsD 3.01 
// DDK version is available if requested. 
//Abstract: 
// Install a IFS hook, monitoring any read and write access 
// 
//================================================
// IFSHOOK.c - main module for IFSHOOK 

#define  DEVICE_MAIN 
#include "ifshook.h" 
#undef  DEVICE_MAIN  

//typedef EventHdl(pevent pev,pioreq pir); 

typedef struct _Monitored_Files{ 
struct _Monitored_Files *pNext_Monitored_Files;//pointer to next struct 
struct _Monitored_Files *pPre_Monitored_Files;//pointer to previous struct 
int sfn;//system file number 
int open_count; 
char path[260]; //ansi path name 
}_Monitored_Files,*pMonitored_Files; 

// 
//Declare virtual device 
// 
Declare_Virtual_Device(IFSHOOK) 

_Monitored_Files Monitored_Files; 
ppIFSFileHookFunc PrevHook; 

DefineControlHandler(SYS_VM_INIT, OnSysVMInit); 
DefineControlHandler(SYS_DYNAMIC_DEVICE_INIT, OnSysDynamicDeviceInit); 
DefineControlHandler(SYS_DYNAMIC_DEVICE_EXIT, OnSysDynamicDeviceExit); 
DefineControlHandler(SYS_VM_TERMINATE, OnSysVMTerminate); 

PCHAR ConvertPath( int drive, path_t ppath, PCHAR fullpathname ) 
{ 
  int i = 0; 
  _QWORD result; 

  // 
  // Stick on the drive letter if we know it. 
  // 
  if( drive != 0xFF ) { 

    fullpathname[0] = drive+"A"-1; 
    fullpathname[1] = ":"; 
    i = 2; 
  } 
  UniToBCSPath( &fullpathname, ppath->pp_elements, 260 , BCS_WANSI, &result ); 
  return( fullpathname ); 
} 

pMonitored_Files IsFileOpened(int i){ 
pMonitored_Files p=&Monitored_Files; 

while (p){ 
 if (i==p->sfn){ 
  return p; 
 } 
 p=p->pNext_Monitored_Files; 
} 
return 0; 
} 

BOOL ControlDispatcher( 
DWORD dwControlMessage, 
DWORD EBX, 
DWORD EDX, 
DWORD ESI, 
DWORD EDI, 
DWORD ECX) 
{ 
START_CONTROL_DISPATCH 

 ON_SYS_VM_INIT(OnSysVMInit); 
 ON_SYS_DYNAMIC_DEVICE_INIT(OnSysDynamicDeviceInit); 
 ON_SYS_DYNAMIC_DEVICE_EXIT(OnSysDynamicDeviceExit); 

END_CONTROL_DISPATCH 

return TRUE; 
} 

int _cdecl MyIfsHook(pIFSFunc pfn, int fn, int Drive, int ResType, 
 int CodePage, pioreq pir) 
{ 
int retvar,i; 
char fullpathname[260]; 
_Monitored_Files *FileEntry; 
switch(fn){ 
 case IFSFN_OPEN:{ 
  retvar=(*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir); 
  ConvertPath( Drive, pir->ir_ppath, fullpathname ); 
  FileEntry=IsFileOpened(pir->ir_sfn); 
  if (FileEntry){ 
  FileEntry->open_count++; 
  }else{ 
  FileEntry=&Monitored_Files; 
  while(1){ 
   if (FileEntry->pNext_Monitored_Files){ 
   FileEntry=FileEntry->pNext_Monitored_Files; 
   } 
   else{ 
   break; 
   } 
  } 
  FileEntry->pNext_Mon_itored_Files= 
   HeapAllocate( sizeof(_Monitored_Files),HEAPZEROINIT); 
  FileEntry->pNext_Monitored_Files->pPre_Mon_itored_Files=FileEntry; 
  FileEntry=FileEntry->pNext_Monitored_Files; 
  FileEntry->sfn=pir->ir_sfn; 
  FileEntry->open_count=1; 
  memcpy(FileEntry->path,fullpathname,260); 
  } 
  return retvar; 
 } 

 case IFSFN_READ:{ 
  //Do something here, 
  //eg. Decrypt the file. 
  char *str; 
  int j; 
  str=pir->ir_data; 
  j=pir->ir_length; 
  retvar=(*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir); 
  FileEntry=IsFileOpened(pir->ir_sfn); 
  if (!stricmp("c:\test.txt",FileEntry->path)){ 
  for (i=0;i<j;i++){ 
   str--; 
  } 
  } 
  return retvar; 
 } 

 case IFSFN_WRITE:{ 
  //Do something here 
  //eg. Encrypt the file 
  FileEntry=IsFileOpened(pir->ir_sfn); 
  if (FileEntry){ 
  if (!stricmp("c:\test.txt",FileEntry->path)){ 
   for (i=0;i<pir->ir_length;i++){ 
   (((char*)pir->ir_data))++; 
   } 
  } 
  } 
  return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir); 
 } 

 case IFSFN_CLOSE:{ 
  FileEntry=IsFileOpened(pir->ir_sfn); 
  if (FileEntry){  
  FileEntry->open_count--; 
  if (!FileEntry->open_count){ 
   FileEntry->pPre_Monitored_Files->pNext_Mon_itored_Files= 
   FileEntry->pNext_Monitored_Files; 
   FileEntry->pNext_Monitored_Files->pPre_Mon_itored_Files= 
   FileEntry->pPre_Monitored_Files; 
   HeapFree(FileEntry,0); 
   } 
  } 
  return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir); 
 } 

}  

return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir); 
} 

BOOL OnSysVMInit(VMHANDLE hVM){ 
return OnSysDynamicDeviceInit(); 
} 

BOOL OnSysDynamicDeviceInit() 
{ 
PrevHook = IFSMgr_InstallFileSystemApiHook(MyIfsHook); 
Monitored_Files.pNext_Mon_itored_Files=0; 
Monitored_Files.pPre_Mon_itored_Files=0; 
Monitored_Files.sfn=-1; 
Monitored_Files.open_count=0; 
Monitored_Files.path[0]=0; 

return TRUE; 
} 

BOOL OnSysDynamicDeviceExit() 
{ 
IFSMgr_RemoveFileSystemApiHook(MyIfsHook); 
return TRUE; 
} 

void OnSysVMTerminate(VMHANDLE hVM){ 
return OnSysDynamicDeviceExit(); 
}
Google

(责任编辑:hahack)

注:本站所有资料均为个人爱好与广大网友分享!如用于非法!造成一切后果自负·与本站无关!
发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
热门文章 相关报道
普通HACK技术 [警戒公告]php My Admin工具中sort_by参数远… (09-22)最新HACK技术
普通HACK技术 [警戒公告]Landesk QIP Server服务 Heal报文… (09-22)最新HACK技术
普通HACK技术 [警戒公告]Windows操作系统SMB WRITE_ANDX处… (09-22)最新HACK技术
普通HACK技术 [菜鸟入门]三方法 杜绝企业网络安全管理系统… (09-03)
普通HACK技术 [菜鸟入门]掌握术语 分清电脑安全漏洞的危险… (09-03)
普通HACK技术 [编译|破解]Friendly Technologies fwRemote… (09-03)
普通HACK技术 [编译|破解]虚拟PC软件VMware2008-0014更新修… (09-03)
普通HACK技术 [菜鸟入门]三种方法 让你的交换机和路由器更… (09-02)
普通HACK技术 [编译|破解]Red Hat目录服务器LDAP请求内存泄… (09-02)
普通HACK技术 [菜鸟入门]消除隐患 创建计算机安全密码三大… (08-29)
  • 实例讲解如何处理ARP伪装攻…

  • 小心遭遇来自半路的遭劫 中…

  • 从Unix到黑客入门的探索及其…

  • 黑客攻击常见方法及安全策略…

  • 黑客经验交流技巧篇之防注入…

  • WINDOWS的钩子函数知识与汇…

  • 要小心防范 木马是这样伪装…

  • 通过卫星传输数据也不安全

  • 怎样编写自己的信箱监视程序

  • sql注入绝技--建立虚拟目…

  •   网友评论内容:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    I D *
    邮 箱
    主 页
    评 分 1分 2分 3分 4分 5分
    评 论

    关于我们  中国·国家信息产业部{粤ICP备06006652号}{陇ICP备06002562号}
    版权所有:『AK网盟基地』站长:Hahack | QQ:80505955 | E-mail:Hahack@Gmail.com
    Copyright (C) 2005-2007  akhack.org|chinabeta.cn All Rights Reserved