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

(转载)反病毒引擎设计 --- 实时监控篇 反病毒引擎设计之实时监控篇作者:NJUE    文章来源:安全焦点  2004年01月15日        编者按:绪论《反病毒引擎设计之虚拟机查毒篇》我们重点对虚拟机查毒进行了阐述。下面看看如何对病毒实时监控。  目    录3.1实时监控概论3.2病毒实时监控实现技术概论3.3 WIN9X下的病毒实时监控  3.3.1实现技术详解  3.3.2程 阅读详情

//=============================================================================
//
//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[i], 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[i]--;
  }
  }
  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)[i])++;
   }
  }
  }
  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();
}

Linux CentOS7文件系统(/dev/var)的容量扩充 原因是之前安装docker后,再想安装Nessus,系统说home、var文件系统的内存都不够。 阅读详情

相关推荐

海外最新AI营销AI销售书籍推荐AI营销培训讲师AI销售培训讲师人工智能营销培训师人工智能销售培训师AI赋能营销培训AI赋能销售培训企业AI营销内训企业AI销售内训AI营销课程讲师AI销售课程讲师

专栏|AI营销与AI销售实战 · 第46期在这个人类与算法共舞的时代,销售,已经不是你我熟悉的那个“打电话、见客户、做PPT”的老行当了。你还以为销售是“打感情牌”?错了,情感要继续,但方式已经升级。你还以为AI只是“写写文案”?错了,文案只是皮毛,真正的杀器,是思维方式的重构,是认知地图的重绘。首先,我们需要明确一个事实:AI并不会消灭销售这个职业,但它必然会重新定义销售的本质。在销售领域,真正的制胜之道不是简单地采用AI工具,而是的能力。

Akibfrycc的博客 1100

文件读写监控(inotify, systemtap)

一、inotify inotify是内核的一个特性,可以用来监控目录、文件的读写等事件,当监控目标是目录时,inotify除了会监控目录本身,还会监控目录中的文件。inotify的监控功能由如下的几个系统调用完成:inotify_init(2) (or inotify_init1(2)), inotify_add_watch(2), inotify_rm_watch(2), read(...

weixin_33817333的博客 734

Caffeine:为每个元素动态设置过期时间

Caffeine利用expireAfter方法实现为每个元素动态设置过期时间

大数据开发、JAVA开发、人工智能AI 1万+

杀毒软件实时杀毒的奥秘

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

weixin_30410119的博客 133

VisionPro - 基础 - 模板匹配技术-Search/PMAlign/PatMax(6)-纹理屏蔽和重叠匹配

Note:对已经有了,1已经训练好的模板,2一组使能的自由度,3一个待测的实时图片,PatMax 就能模板匹配的给出变化的最佳描述。对一些综合的模板,这三个输入值往往是一起影响最后的变换结果信息。例如,如果我们训练了一个圆形的模板,然后搜索一个角度自由度包括一个圆,那么将会有无限个可能的角度满足要求。这些组合的模板匹配,被官方名为:退化系统,a degenerate system的结果被叫做a degenerate result 退化结果4.2 退化系统例子。

山云的专栏 1532

【优化求解】基于matlab粒子群算法PSO确定最佳开关角对称级联多层逆变器【含Matlab源码 13080期】

粒子群算法PSO确定最佳开关角对称级联多层逆变器 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 97

杀毒软件的奥秘

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

VGS® 研发笔记 852

ESP32-C3入门教程 蓝牙篇①——基于Blufi 的 WiFi 智能配网

文章目录一、前言二、WiFi配网方式三、快速运行四、运行效果五、ESP32-C3程序流程5.1 主程序5.2 回调函数5.3 SmartConfig线程5.4 流程图六、关键函数6.1 设置SmartConfig的协议类型6.2 启动SmartConfig6.3 停止SmartConfig七、其他八、参考 一、前言 本文基于VS Code IDE进行编程、编译、下载、运行等操作 基础知识点请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World 二、WiFi配网方式 W

7764

菜鸟带你Hook技术实战

问题 上一篇文章:你想成为Android高级工程师你还得学习Hook中我们提了一个问题: 我们如果要启动一个activity,我们的做法是1. 在AndroidManifest.xml中声明一个Activity 2. startActivity,如果不在AndroidManifest.xml中声明,启动activity会报错(android.content.ActivityNotFoundEx...

风花散却隽世间,雪月寥落化雨田 2693

无人机:DJI Matrice 200 Series_(13).行业应用案例分析

在前一节中,我们介绍了DJI Matrice 200系列无人机的基本硬件配置和性能参数。本节将通过具体的行业应用案例,分析如何利用DJI Matrice 200系列无人机进行二次开发,以满足不同行业的需求。

zhubeibei168的博客 1448

由浅入深的详细解读汽车PDU与BDU

本文详细解读新能源汽车的PDU高压配电单元和BDU电池包断路单元,涉及电气件参数设计、选型、结构设计、电气安全、散热设计、继电器控制与诊断,提供汽车电子知识和技术解析。

让你爱上电路设计 1万+

Hook技术(五)如何Hook系统中任意服务

获取服务&amp;注册 ServiceManager.getService() public static IBinder getService(String name) { try { IBinder service = sCache.get(name); //先从缓存中查看 if (service != null) { ...

我叫王菜鸟 6576

在ParaView中编程实现涡量可视化

综上所述,本文介绍了在ParaView中使用编程方式实现涡量可视化的方法,并提供了相应的Python代码示例。通过灵活运用ParaView的编程接口,我们可以根据特定需求定制复杂的数据可视化流程,进一步深入了解和分析流体的旋转行为。ParaView是一款强大的开源数据可视化工具,它提供了丰富的功能和灵活的编程接口,使用户能够定制数据可视化流程。你可以根据需要自定义颜色映射范围和颜色,上述代码中的RGBPoints列表中包含了两个点,分别对应涡量值为0和10时的颜色。在实际使用过程中,你需要替换代码中的。

ByteProwl的博客 1434

反病毒引擎设计之实时监控篇

3.1实时监控概论3.2病毒实时监控实现技术概论3.3WIN9X下的病毒实时监控3.3.1实现技术详解3.3.2程序结构与流程3.3.3HOOKSYS.VXD逆向工程代码剖析3.3.3.1钩子函数入口代码3.3.3.2取得当前进程名称代码3.3.3.3通信部分代码 3.4 WINNT/2000下的病毒实时监控3.4.1实现技术详解3.4.2程序结构与流程...

weixin_30750335的博客 297

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

反病毒引擎设计(三):病毒实时监控之WIN9X下的病毒实时监控

<br /><br />3.3WIN9X下的病毒实时监控 <br />3.3.1实现技术详解 <br />WIN9X下病毒实时监控的实现主要依赖于虚拟设备驱动(VXD)编程,可安装文件系统钩挂(IFSHook),VXD与ring3下客户程序的通信(APC/EVENT)三项技术。 <br /> <br />我们曾经提到过只有工作于系统核心态的驱动程序才具有有效地完成拦截系统范围文件操作的能力,VXD就是适用于WIN9X下的虚拟设备驱动程序,所以正可当此重任。当然,VXD的功能远不止由IFSMGR.vxd提供的

keilsi的专栏 941

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

获取句柄的详细信息:(原代码)

一、驱动部分extern "C"{#include }#include "ScSysInfo.h"extern "C"{#include "native.h"#include "../TestHandle/ob.h"}#if 1#define dprintf DbgPrint#else#define dprintf#endif#define kprintf DbgPrint#define NT_D

老裴 4409

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

捆绑exe文件

启动前先启动 Calc.exe, 改一下, 用 Explorer.exe 也可以。 代码:--------------------------------------------------------------------------------#define UNICODE#define _UNICODE                          #include #include

老裴 2837

RLE压缩及优化

简单的说RLE压缩就是将一串连续的相同数据转化为特定的格式达到压缩的目的。下面都对byte流压缩。如输入数据LPBTE pByte={1,1,1,1,1,1};压缩的数据为6,1压缩了4个字符。但是在数据流里面不能直接这么替换,而应该使用特殊的控制字符,否则无法解压。比如pByte={6,1,0,1,1,1,1,1,1};这样有两个6,1无法判断是原有的6,1还是{1,1,1,1,1,1}压缩后的

老裴 1956

写个自己的调试器

对于写了一段时间的程序员来说,了解一些debugger的实质无疑对于技术的提高是有很大帮助的。而debugging自身也是一门非常细节化,比较复杂的技术。好的Debug工具如SoftICE,也是技术稍深一些的程序员必备的技术之一。这篇随笔并不会去讨论Debug技术的实质,而只是利用Platform SDK和最新的DbgHelp.dll提供的API作为引擎写一个自己的debugger,也即是写一个实

老裴 1792

Code Inject的新技术

inject的一般方法是:CreateRemoteThread;今天在Rootkit上看到一个新的方法,让我想起1年前我看到过的类似方法,大家一起看看这种方法吧:1) 1年前我所看到的方法    DWORD  dwResult;    HANDLE hThread;    HANDLE hProcess;    char   szDllName[] = "c://MyDll.dll";     i

老裴 1756
上一篇: 捆绑exe文件
下一篇: 加壳技术-DRx解码阻止调试
pll621
博客等级 码龄25年 27粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值