监视设备驱动通讯内容

Foxmail 7.2.25以下版本XSS漏洞实战复现:手把手教你如何构造恶意邮件(含防御方案) 本文深入解析Foxmail 7.2.25以下版本的XSS漏洞(CNVD-2025-06036),详细展示如何构造恶意邮件进行跨站脚本攻击,并提供从客户端升级到企业级防护的多层次防御方案,帮助用户有效防范安全风险。 阅读详情
监视设备驱动通讯内容

Author:  sinister
Email:   sinister@whitecell.org
Homepage:http://www.whitecell.org
Date:    2006-01-10

/*****************************************************************
  文件名        : WssFilterDrv.c
  描述          : 跟踪记录现有设备驱动
  作者          : sinister
  最后修改日期  : 2006.1.09

 *****************************************************************/


#include "ntddk.h"
#include "string.h"
#include "stdio.h"

//
// 输入标志
//
#define IN_BUFFER_FLAG  0x925
//
// 输出标志
//
#define OUT_BUFFER_FLAG 0x926

////////////////////////////////////////////////////////////////
// 结构作用 :设备对象扩展结构,用于保存过滤设备信息
// 注意 : 需设备对象 DEVICE_OBJECT 有效情况下使用
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
typedef struct _DEVICE_EXTENSION
{
    PDEVICE_OBJECT DeviceObject;  // 过滤设备对象
    PDEVICE_OBJECT TargetDevice;  // 附加后的设备对象
    PFILE_OBJECT FileObject;      // 原设备的文件对象
    ULONG DeviceExtensionFlags;   // 预留的扩展标志
}DEVICE_EXTENSION, * PDEVICE_EXTENSION;

VOID DriverUnload( IN PDRIVER_OBJECT DriverObject );
NTSTATUS DispatchPassThrough( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
NTSTATUS CompletionRoutine( IN PDEVICE_OBJECT DeviceObject,
                            IN PIRP Irp,
                            IN PVOID Context );

NTSTATUS WriteLog( PVOID lpBuffer, ULONG uSize );
NTSTATUS GetSystemBuffer( PIRP Irp, PVOID pBuffer, SIZE_T Length, LONG* pMode );
NTSTATUS FormatMessage( ULONG IoControl,
                        PUCHAR pBuf,
                        ULONG uSize,
                        ULONG dwStatus,
                        ULONG uMode );
NTSTATUS ReadIOCtrlBuffer( PIRP Irp,
                           PIO_STACK_LOCATION pIrpStack,
                           ULONG dwStatus );


/////////////////////////////////////////////////////////////////
// 函数类型 :自定义工具函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 :创建过滤设备将其附加到需要跟踪的设备上,保存设备相关
//        信息,返回附加后的驱动对象
// 注意 : 
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
NTSTATUS
AttachFilterDevice( IN UNICODE_STRING* DeviceName, // 需要跟踪的设备名
                    IN PDRIVER_OBJECT  DriverObject, // 过滤驱动也就是本驱动的驱动对象
                    OUT PDRIVER_OBJECT* FilterDriverObject ) // 返回附加后的驱动对象
{
  PDEVICE_OBJECT DeviceObject; 
  PDEVICE_OBJECT FilterDeviceObject;
  PDEVICE_OBJECT TargetDevice; 
  PFILE_OBJECT FileObject; 
  PDEVICE_EXTENSION DevExt;

  NTSTATUS ntStatus; 

  //
  // 根据设备名称找到需要附加的设备对象
  //
  ntStatus = IoGetDeviceObjectPointer( DeviceName,
                                       FILE_ALL_ACCESS,
                                       &FileObject,
                                       &DeviceObject ); 

  if ( !NT_SUCCESS( ntStatus ) )
  {
    DbgPrint( "IoGetDeviceObjectPointer() %d/n", ntStatus );
    return ntStatus;
  } 

  //
  // 创建过滤设备对象
  //
  ntStatus = IoCreateDevice( DriverObject,
                             sizeof( DEVICE_EXTENSION ),
                             NULL,
                             FILE_DEVICE_UNKNOWN,
                             0,
                             FALSE,
                             &FilterDeviceObject ); 

  if ( !NT_SUCCESS( ntStatus ) )
  {
    ObDereferenceObject( FileObject ); 
    DbgPrint( "IoCreateDevice() %d!/n", ntStatus );
    return ntStatus;
  } 

  //
  // 得到设备扩展结构,以便下面保存过滤设备信息
  //
  DevExt = ( PDEVICE_EXTENSION ) FilterDeviceObject->DeviceExtension;

  //
  // 将过滤设备对象附加在目标设备对象之上,并返回附加后的原设备对象
  //
  TargetDevice = IoAttachDeviceToDeviceStack( FilterDeviceObject,
                                              DeviceObject ); 
  if ( !TargetDevice )
  {
    ObDereferenceObject( FileObject ); 
    IoDeleteDevice( FilterDeviceObject ); 
    DbgPrint( "IoAttachDeviceToDeviceStack() %d!/n", ntStatus );
    return STATUS_INSUFFICIENT_RESOURCES;
  } 

  //
  // 保存过滤设备信息
  //
  DevExt->DeviceObject = FilterDeviceObject; 
  DevExt->TargetDevice = TargetDevice; 
  DevExt->FileObject = FileObject;

  //
  // 设置过滤设备相关信息与标志
  //
  FilterDeviceObject->DeviceType = TargetDevice->DeviceType; 
  FilterDeviceObject->Characteristics = TargetDevice->Characteristics; 
  FilterDeviceObject->Flags |= ( TargetDevice->Flags & ( DO_DIRECT_IO |
                                                         DO_BUFFERED_IO ) ); 

  //
  // 返回附加后的驱动对象
  //
  *FilterDriverObject = TargetDevice->DriverObject;

  ObDereferenceObject( FileObject ); 

  return STATUS_SUCCESS;
}

/////////////////////////////////////////////////////////////////
// 函数类型 :自定义工具函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 得到内核/用户模式 I/O 缓冲区数据,并返回当前数据所
//         在模式
// 注意 : 在 "过滤模块" 中此函数是为了配合 ReadIOCtrlBuffer 
//         函数得到数据
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
NTSTATUS
GetSystemBuffer( PIRP Irp, PVOID pBuffer, SIZE_T Length, LONG* pMode )
{
  PUCHAR pSysBuffer = NULL;

  if ( pBuffer == NULL )
  {
    return STATUS_INSUFFICIENT_RESOURCES;
  }

  //
  // 判断当前 I/O 模式与数据存放的位置
  //
  switch ( Irp->RequestorMode )
  {
    case KernelMode:
      *pMode = 0; // 内核模式 I/O

      if ( Irp->UserBuffer )
      {
        pSysBuffer = Irp->UserBuffer;
      }
      else if ( Irp->MdlAddress )
      {
        pSysBuffer = ( PUCHAR )
                     MmGetSystemAddressForMdlSafe( Irp->MdlAddress,
                                                   NormalPagePriority );

        if ( pSysBuffer == NULL )
        {
          return STATUS_INSUFFICIENT_RESOURCES;
        }
      }

      break;

    case UserMode:
      *pMode = 1; // 用户模式 I/O

      if ( Irp->UserBuffer )
      {
        pSysBuffer = Irp->UserBuffer;
      }
      else if ( Irp->MdlAddress )
      {
        pSysBuffer = ( PUCHAR )
                     MmGetSystemAddressForMdlSafe( Irp->MdlAddress,
                                                   NormalPagePriority );

        if ( pSysBuffer == NULL )
        {
          return STATUS_INSUFFICIENT_RESOURCES;
        }
      }
      break;

    default:
      break;
  }

  //
  // 输出得到的缓冲区
  //
  RtlCopyMemory( pBuffer, pSysBuffer, Length );

  return STATUS_SUCCESS;
}

/////////////////////////////////////////////////////////////////
// 函数类型 :自定义工具函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 格式化缓冲区数据,并记录日志
// 注意 : 在 "过滤模块" 中此函数作用是格式化 GetSystemBuffer 
           函数得到的数据。因为此函数调用了日志函数,所以此函数
//         仅能在 IRQL == PASSVIE_LEVEL  级别运行。
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 : sinister
// 修改日期 : 2006.01.03
// 修改内容 : 在函数中增加了记录日志函数
/////////////////////////////////////////////////////////////////
NTSTATUS
FormatMessage( ULONG IoControl,
               PUCHAR pBuf,
               ULONG uSize,
               ULONG dwStatus,
               ULONG uMode )
{
  ULONG uLen;
  ULONG uCount = 0;
  PVOID pBuffer = NULL;
  UCHAR uTitle[100];
  UCHAR uTemp[3];

  if ( pBuf == NULL || uSize < 0 )
  {
    return STATUS_INSUFFICIENT_RESOURCES;
  }

  //
  // 低层驱动返回数据后,设置此标志
  //
  if ( dwStatus == OUT_BUFFER_FLAG )
  {
    if ( uMode == 0 )
    {
      sprintf( uTitle, "KERNEL MODE: IoControl=%x, OUTBUFFER:/n", IoControl );
    }
    else
    {
      sprintf( uTitle, "USER MODE: IoControl=%x, OUTBUFFER:/n", IoControl );
    }
  }

  //
  // 上层向低层驱动发送数据,设置此标志
  //
  else if ( dwStatus == IN_BUFFER_FLAG )
  {
    if ( uMode == 0 )
    {
      sprintf( uTitle, "KERNEL MODE: IoControl=%x, INBUFFER:/n", IoControl );
    }
    else
    {
      sprintf( uTitle, "USER MODE: IoControl=%x, INBUFFER:/n", IoControl );
    }
  }

  //
  // 记录日志,目的是记录分析,所以没有考虑效率。
  //
  WriteLog( uTitle, strlen( uTitle ) );

  for ( uLen = 0; uLen < uSize; uLen++ )
  {
    sprintf( uTemp, "%.2X ", pBuf[uLen] );
    WriteLog( uTemp, sizeof( uTemp ) );
    if ( uLen % 16 == 0 )
    {
      WriteLog( "/n", 1 );
    }
  }

  WriteLog( "/n", 1 );

  return STATUS_SUCCESS;
}

/////////////////////////////////////////////////////////////////
// 函数类型 :自定义工具函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 得到 IRP_MJ_DEVICE_CONTROL 的 I/O 数据
// 注意 : 
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
NTSTATUS
ReadIOCtrlBuffer( PIRP Irp, PIO_STACK_LOCATION pIrpStack, ULONG dwStatus )
{
  ULONG InBufLen;
  ULONG OutBufLen;
  ULONG IoControl;

  PUCHAR pSysBuffer = NULL;
  KEVENT KrnlEvent;
  NTSTATUS ntStatus;
  ULONG uMode;

  //
  // 得到设备控制字与 I/O 缓冲区长度
  //
  InBufLen = pIrpStack->Parameters.DeviceIoControl.InputBufferLength;
  OutBufLen = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
  IoControl = pIrpStack->Parameters.DeviceIoControl.IoControlCode;

  if ( dwStatus == OUT_BUFFER_FLAG )
  {
    //
    // 如果是低层驱动返回的数据,缓冲区长度则要这样获得
    //
    OutBufLen = Irp->IoStatus.Information;

    pSysBuffer = ( PUCHAR ) ExAllocatePool( PagedPool,
                                            OutBufLen + sizeof( PUCHAR ) );
    if ( pSysBuffer == NULL )
    {
      return STATUS_INSUFFICIENT_RESOURCES;
    }

    ntStatus = GetSystemBuffer( Irp, pSysBuffer, OutBufLen, &uMode );
    if ( !NT_SUCCESS( ntStatus ) )
    {
      ExFreePool( pSysBuffer );
      return STATUS_INSUFFICIENT_RESOURCES;
    }

    FormatMessage( IoControl, pSysBuffer, OutBufLen, dwStatus, uMode );
  }
  else
  {
    pSysBuffer = ( PUCHAR ) ExAllocatePool( PagedPool,
                                            InBufLen + sizeof( PUCHAR ) );
    if ( pSysBuffer == NULL )
    {
      return STATUS_INSUFFICIENT_RESOURCES;
    }

    ntStatus = GetSystemBuffer( Irp, pSysBuffer, InBufLen, &uMode );
    if ( !NT_SUCCESS( ntStatus ) )
    {
      ExFreePool( pSysBuffer );
      return STATUS_INSUFFICIENT_RESOURCES;
    }

    FormatMessage( IoControl, pSysBuffer, InBufLen, dwStatus, uMode );
  }

  if ( pSysBuffer )
  {
    ExFreePool( pSysBuffer );
  }

  return Irp->IoStatus.Status;
}

/////////////////////////////////////////////////////////////////
// 函数类型 :系统函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 替换指定设备的驱动例程使其指向当前过滤驱动的派遣例程
// 注意 : 
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
NTSTATUS
DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )
{
  PDRIVER_OBJECT FilterDrvObj; 
  UNICODE_STRING DeviceName;
  PDRIVER_DISPATCH EmptyDispatch; 
  NTSTATUS ntStatus; 
  ULONG iCount;

  EmptyDispatch = DriverObject->MajorFunction[IRP_MJ_CREATE];

  RtlInitUnicodeString( &DeviceName, L"//Device//FNT0" ); 
  FilterDrvObj = NULL;

  DriverObject->DriverUnload = DriverUnload;

  ntStatus = AttachFilterDevice( &DeviceName, DriverObject, &FilterDrvObj );
  if ( !NT_SUCCESS( ntStatus ) || FilterDrvObj == NULL )
  {
    DbgPrint( "Attach Device to failed!/n" );
    return STATUS_INSUFFICIENT_RESOURCES;
  }

  //
  // 只过滤目标驱动对象使用的例程
  //
  for ( iCount = 0; iCount < IRP_MJ_MAXIMUM_FUNCTION; iCount++ )
  {
    if ( FilterDrvObj->MajorFunction[iCount] != EmptyDispatch &&
         DriverObject->MajorFunction[iCount] == EmptyDispatch )
    {
      DriverObject->MajorFunction[iCount] = DispatchPassThrough;
    }
  } 

  return STATUS_SUCCESS;
} 

/////////////////////////////////////////////////////////////////
// 函数类型 :系统函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 删除并卸载过滤设备
// 注意 : 卸载列程中并没有做过多的处理,在过滤驱动中如果当前所
//         附加的设备IRP 很多的情况下,这样做可能会导致 BSOD
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
VOID
DriverUnload( IN PDRIVER_OBJECT DriverObject )
{
  PDEVICE_OBJECT FilterDevice; 
  PDEVICE_OBJECT TargetDevice; 
  PDEVICE_EXTENSION DevExt; 
  NTSTATUS ntStatus; 

  FilterDevice = DriverObject->DeviceObject;
  DevExt = ( PDEVICE_EXTENSION ) FilterDevice->DeviceExtension;
  TargetDevice = DevExt->TargetDevice;

  //
  // 从目标断开附加设备,并删除过滤设备
  //
  IoDetachDevice( TargetDevice ); 
  IoDeleteDevice( FilterDevice ); 

  return;
}


/////////////////////////////////////////////////////////////////
// 函数类型 :自定义工具函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 过滤驱动的派遣例程
// 注意 : 
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
NTSTATUS
DispatchPassThrough( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
  PIO_STACK_LOCATION pIrpStack;
  PDEVICE_OBJECT pDeviceObject;
  PDEVICE_EXTENSION DevExtension = ( PDEVICE_EXTENSION )
                                   DeviceObject->DeviceExtension; 
  NTSTATUS ntStatus; 
  KEVENT KrnlEvent;

  pIrpStack = IoGetCurrentIrpStackLocation( Irp );

  //
  // 这里只过滤了 IRP_MJ_DEVICE_CONTROL 需要过滤更多的控制字可以
  // 在这里增加判断
  //
  if ( pIrpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL )
  {
    //
    // 上层发送数据,设置 IN_BUFFER_FLAG 标志记录。
    //
    ReadIOCtrlBuffer( Irp, pIrpStack, IN_BUFFER_FLAG );

    //
    // 因为是上层过滤驱动,所以必须向低层驱动请求返回数据
    // 这里虽然没有对数据进行修改,但为了以后扩充方便
    // 还是复制了 IRP 堆栈和安装完成列程
    //
    IoCopyCurrentIrpStackLocationToNext( Irp );
    IoSetCompletionRoutine( Irp, CompletionRoutine, NULL, TRUE, TRUE, TRUE );

    ( void ) IoCallDriver( DevExtension->TargetDevice, Irp );
    //
    // 当低层驱动返回数据后,设置 OUT_BUFFER_FLAG 标志,再次记录。
    //
    ntStatus = ReadIOCtrlBuffer( Irp, pIrpStack, OUT_BUFFER_FLAG );

    return ntStatus;
  }

  //
  // 对于其他控制字则直接传递到低层驱动,无须安装完成列程
  //
  else
  {
    IoSkipCurrentIrpStackLocation( Irp );
    return IoCallDriver( DevExtension->TargetDevice, Irp );
  }
} 

/////////////////////////////////////////////////////////////////
// 函数类型 :系统回调函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 
// 注意 : 这里没有对返回数据做操作
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
NTSTATUS
CompletionRoutine( IN PDEVICE_OBJECT DeviceObject,
                   IN PIRP Irp,
                   IN PVOID Context )
{
  if ( Irp->PendingReturned )
  {
    IoMarkIrpPending( Irp );
  } 

  return STATUS_SUCCESS;
} 

/////////////////////////////////////////////////////////////////
// 函数类型 :自定义工具函数
// 函数模块 : 过滤模块
////////////////////////////////////////////////////////////////
// 功能 : 记录日志到 C 盘的 WSSFILTER.LOG 中
// 注意 : 只能在 IRQL == PASSVIE_LEVEL 级别使用
/////////////////////////////////////////////////////////////////
// 作者 : sinister
// 发布版本 : 1.00.00
// 发布日期 : 2005.12.27
/////////////////////////////////////////////////////////////////
// 重   大   修   改   历   史
////////////////////////////////////////////////////////////////
// 修改者 :
// 修改日期 :
// 修改内容 :
/////////////////////////////////////////////////////////////////
NTSTATUS
WriteLog( PVOID lpBuffer, ULONG uSize )
{
  NTSTATUS status; 
  IO_STATUS_BLOCK IoStatusBlock; 
  OBJECT_ATTRIBUTES ObjectAttributes; 
  FILE_POSITION_INFORMATION FilePOTInfo; 
  FILE_STANDARD_INFORMATION FileSTDInfo; 

  ANSI_STRING ansiString; 
  UNICODE_STRING filenameString; 
  HANDLE hFile;
  WCHAR LogFile[] = L"//??//C://WSSFILTER.LOG"; 


  RtlInitUnicodeString( &filenameString, LogFile );     

  InitializeObjectAttributes( &ObjectAttributes,
                              &filenameString,
                              OBJ_CASE_INSENSITIVE,
                              NULL,
                              NULL ); 

  status = ZwCreateFile( &hFile,
                         GENERIC_WRITE | SYNCHRONIZE | GENERIC_READ,
                         &ObjectAttributes,
                         &IoStatusBlock,
                         0,
                         FILE_ATTRIBUTE_NORMAL,
                         FILE_SHARE_DELETE,
                         FILE_OPEN_IF,
                         FILE_SYNCHRONOUS_IO_NONALERT,
                         NULL,
                         0 ); 

  if ( !NT_SUCCESS( status ) )
  {
    return status;
  } 

  ZwQueryInformationFile( hFile,
                          &IoStatusBlock,
                          ( void * ) &FileSTDInfo,
                          sizeof( FileSTDInfo ),
                          FileStandardInformation );


  if ( !NT_SUCCESS( IoStatusBlock.Status ) )
  {
    return IoStatusBlock.Status;
  } 

  FilePOTInfo.CurrentByteOffset = FileSTDInfo.EndOfFile; 

  ZwSetInformationFile( hFile,
                        &IoStatusBlock,
                        ( void * ) &FilePOTInfo,
                        sizeof( FilePOTInfo ),
                        FilePositionInformation ); 


  if ( !NT_SUCCESS( IoStatusBlock.Status ) )
  {
    return IoStatusBlock.Status;
  }

  ZwWriteFile( hFile, 0, 0, 0, &IoStatusBlock, lpBuffer, uSize, NULL, NULL ); 

  ZwClose( hFile ); 

  return IoStatusBlock.Status;
}


WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。
WSS 主页:http://www.whitecell.org/
WSS 论坛:http://www.whitecell.org/forums/
1、2022 应用密码学与网络安全会议亮点与关键技术解读 2022年应用密码学与网络安全会议(ACNS 2022)在意大利罗马成功举办,会议涵盖了密码学与网络安全的多个前沿领域,包括键控全同态加密、隐私保护技术、区块链、后量子密码学和多方计算等。会议共收录44篇论文,展示了众多创新的研究成果,为学术研究和实际应用提供了新的思路和方法。本次会议促进了学术界和工业界的交流与合作,推动了密码学与网络安全行业的发展。 阅读详情

相关推荐

Aspice的理解

ASPICE 是由汽车行业的主要公司和组织合作开发的,包括德国汽车工业联合会(VDA)和国际汽车工作组(Automotive SIG)。其目标是通过标准化的软件开发流程,提高汽车电子系统的软件质量和可靠性。

hkj8808的博客 2017

Ring3与Ring0通信方法若干

本人在[(原创)应用程序与驱动通信的若干方式]文章中阐述了,上下层通信的技术实现部分,但没有结合应用,下面的文章就具体应用给大家展示了使用方法,希望能够大家一些启发。               Ring3与Ring0同步是很有用的手段,在此做一个简要的整理,希望对开发这方面程序的朋友有帮助,好了,开始吧。          1 同步的策略          初写驱动的朋友都知道,通过Dev

2220

Android 默认授予所有应用权限以及特殊权限处理

PackageManagerService作为android的主要系统服务之一,包含处理应用权限相关的职责。源码地址如下:在PMS成功启动时并收到回掉systemReady回进行应用权限授予。DefaultPermissionGrantPolicy为权限处理策略管理类。这里并没有赋予所有系统应用权限,所以当进行应用时还是会显示权限检查的弹框。可通过此方法进行所有应用权限赋予:如果不想所有应用都授予权限,可考虑在system/etc下的权限相关xml文件添加应用包名和所需权限。

Jimmy的专栏 1512

Hook技术简介

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到...

tubaluer 298

浪涌电流测试仪的工作原理

浪涌电流脉冲形成的开始由同步电路 13 确定,该同步电路 13 发送命令以打开和第二开关 10 和 11,向发生器 14 发送控制命令以生成被测半导体器件 5 的控制信号和参考信号整形器 9 的触发脉冲。电流源的功率输出并联连接,以对流经被测半导体样品的电流求和。此外,使用数字控制扩展了测试仪的功能,能够产生各种形状的电流脉冲,例如梯形电流脉冲,以估计被测晶闸管的导通状态扩展时间。由于晶体管3的栅极是连接的,并且平衡电阻4包含在晶体管3的源中,因此通过每个晶体管3的电流脉冲大致相同,并重复参考信号的形状。

Jesse0257的博客 1259

Deepracer 智能无人车-绿洲科学云平台介绍

Deepracer 智能无人车 绿洲科学云

woaixiyue19831的博客 1947

关于IoGetDeviceObjectPointer函数

关于IoGetDeviceObjectPointer函数

danxuezx的专栏 2450

黑猫带你学UFS协议第1篇:全网最全UFS协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

本文由黑猫学长撰写,深入解析UFS协议,覆盖从基础概念到高级特性的全方位教程。适合存储芯片行业从业者和嵌入式开发者,旨在帮助读者快速掌握UFS协议,适用于高端智能手机、平板等智能设备。预计15万字,涵盖UFS 3.1协议,讲解UFS协议栈、物理层、链路层、传输层等内容。

黑猫奥利奥的博客 3711

自己构造IRP包来实现驱动与驱动之间的通信(成功笔记下来以后参考用)

#include #define DEVICE_NAMEL"\\device\\NTModelDrv" #define LINK_NAMEL"\\dosDevices\\NTModelDrv" #define IOCTL_BASE 0x8000 #define MY_CTL_CODE(i) \ CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_BA

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1385

北斗导航 | 2023 PTTI会议论文 2023 ITM会议论文 2022 ION GNSS+ 会议论文下载:ION 美国导航学会

2023 国际技术会议(ITM) 2023 精密时间和时间间隔系统和应用会议(PTTI) 2022 美国导航学会国际会议(ION GNSS +)

尘世冰封的专栏 4617

11、iOS设备逻辑数据分析全解析

本文深入解析iOS设备中的逻辑数据,涵盖图像相关数据库(Photos.sqlite和PhotosAux.sqlite)、录音文件、iPhoto照片存储结构、多媒体文件、第三方应用程序、社交网络应用(如Twitter、Skype、Facebook等)以及苹果相关应用(如Google Mobile、Bing)的数据存储结构和取证方法。此外,还介绍了文档类应用(如Pages、Numbers、Documents To Go)的文件存储结构及恢复方法。适用于iOS取证、数据挖掘和数字调查领域。

rain6的博客 226

SylixOS设备驱动

驱动简介 设备驱动是最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口,设备驱动是内核空间的一部分,其运行在内核态下。 按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA 通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。 在BSP工程将驱动静态的和内核编译在一起(生成.elf / .bin等文件),为了减小编译出的镜像大小,可以将驱动

动感超人_Crush 676

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

868

C#跨平台物联网通讯框架ServerSuperIO(SSIO)

SSIO通信框架的设计思想是在SuperIO(SIO)基础上发展而来,并没有高大上的技术,主要是工作经验的积累,适合于不同应用场景的物联网的数据采集与交互。

dotNET跨平台 1396

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

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

[连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计

目 录 第三章 设备驱动的设计... 2 3.1 初始化设备... 4 3.2 运行设备接口设计... 4 3.3 虚拟设备接口设计... 6 3.4 协议驱动设计... 7 3.5 命令缓存设计... 17 3.6 数据持久化设计....

weixin_30532837的博客 275

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【开源】C#跨平台物联网通讯框架ServerSuperIO(SSIO)

原文转载于:https://www.cnblogs.com/lsjwq/p/5316577.html [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍 [连载]《C#通讯(串口和网络)框架的设计与实现》-2.框架的总体设计   目       录 C#跨平台物联网通讯框架ServerSuperIO(SSIO)正式开源... 1 1.      SSIO的特点 2....

农村的我的专栏 1456

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[连载]《C#通讯(串口和网络)框架的设计与实现》-2.框架的总体设计

目 录 C#通讯(串口和网络)框架的设计与实现... 1 (SuperIO)- 框架的总体设计... 1 第二章 框架总体的设计... 2 2.1 宿主程序设计... 2 2.2 通讯机制设计... 7 2.2.1 串口通讯机制... 8 2.2.1.1 轮询模式... 9 2.2....

weixin_30367543的博客 135

工业物联网通讯框架 ServerSuperIO 的实践应用

概述不知从何时起,物联网、大数据、云计算……等一大批概念词汇流行起来,占领着各大 IT 网站。不能把这三个语汇独立来看,而是现实系统体系化建设的三个方面。物联网以智能传感器为基础的网络化建设,对大量传感器的实时感知和控制必然会产生大量的数据,而对特定行业的这些数据集合进行数学模型分析必然会产生具有现实的价值。一个体系三个方面大公司都在争夺制高点,大数据、云服务、各种标准…...

m0_46700908的博客 193

vc串口通讯控件MSComm编程详解

在mfc中进行串口通讯最简单的方法莫过于在对话框中使用MSCOMM控件了,MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。一、用MSComm控件通信1.串口通信基础知识    一般悦来,计算机都

liuzhaoyuan的专栏 9868

开源物联网框架ServerSuperIO 3.0正式发布(C#),跨平台:Win&Win10 Iot&Ubuntu&Ubuntu Mate,一套设备驱动跨平台挂载,附:开发套件和教程。

3.0版本主要更新内容: 1.增加跨平台能力:Win&Win10 Iot&Ubuntu&Ubuntu Mate 2.统一设备驱动接口:可以一套设备驱动,跨平台挂载运行,降低人力成本,提高开发效率。 3.增加二次开发套件:支持控制台和UI界面两种方式。 4.增加配置工具:参数配置、设备驱动挂载、视图挂载、服务实例的挂载。 5.修复BUG,优化代码。 SSIO的特点 1.轻型

iNeuOS工业互联网操作系统 2186

ethercat通讯协议_Emotron VFX 系列变频器与Logix5000的EtherNet/IP通讯

JZGKCHINA工控技术分享平台课题目的: 最近2年,随着工业以太网越来越多的被应用和提及,很多我的客户开始使用工业总线的方式来控制各式各样的设备。虽然我对通讯协议并不精通,但是希望通过我的使用经验和这篇文章能使大家对工业以太网不在那么陌生,也消除一些抵触心理。 EmotronVFX 系列变频器简述:介于大部分人还是不了解emotron这个产品,我先简单说一下。-适...

weixin_39739234的博客 1339

[更新]跨平台物联网通讯框架 ServerSuperIO v1.2(SSIO),增加数据分发控制模式

1.【开源】C#跨平台物联网通讯框架ServerSuperIO(SSIO) 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App) 4.开源地址:https...

weixin_34235105的博客 184

c#modbus tcp通讯助手开源_从Modbus开始说现场总线

如需获得更多信息,文末点击“了解更多”从Modbus开始说现场总线(三)说完了Modbus协议的基本内容,我觉得有必要简单介绍一下Modbus总线的硬件。经典的串行通讯肯定要从RS232/485/422说起,但现在我觉得RS232应该用的很少了吧。这个当年PLC调试的主力接口,最大的问题就是不支持带电插拔,也特别容易因为各种原因被烧掉,如果你的现场还有老设备使用这种9针或RJ45口,一定不要热插拔...

weixin_39707201的博客 557

ServerSuperIO Designer IDE 发布,打造物联网通讯大脑,随心而联。附:C#驱动源代码。...

1.概况 注:ServerSuperIO Designer IDE 同行业网友随便使用,不涉及到软件使用限制的问题。 从2015年到现在的将近两年的时间,一直在开发、完善ServerSuperIO(SSIO)的基础框架,包括:多通讯机制、稳定性、扩展性等,没有太多时间把工作放在UI的设计与开发上,从二次开发者角度来讲易用性是短板...

weixin_34096182的博客 253
上一篇: 网络协议X档案全集
下一篇: Hidden Users on Windows
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值