Windows安全中心(病毒和威胁防护)的注册
文章目录
- Windows安全中心(病毒和威胁防护)的注册
- 1. 简介
- 2. WSC注册初探
- 3. WSC注册原理分析
- 4. 关于AMPPL
- 5. 参考
Windows安全中心(病毒和威胁防护)的注册
本文我们来分析一下Windows安全中心(Windows Security Center简称WSC)的注册原理,以及其中的一些比较有意思的技术性问题。
1. 简介
通常情况下,如果我们安装了一些第三方的安全软件之后,就会接管Windows的安全服务(Windows Defender);这里主要的原因大概是防止系统安全软件太多,导致Windows性能下降。可以看到如下:
以火绒为例,可以看到当系统安装了火绒安全软件之后,在Windows 安全中心的病毒和威胁防护就可以看到注册的安全软件信息了。
当系统注册了第三方安全软件之后,Windows Defender防病毒服务就停止了;这是Windows为第三方安全软件提供的一个入口,但是目前市面上很大安全软件还比不上Windows自带的Defender,也是比较讽刺。
那么怎么样才能将自己的安全软件注册到Windows安全中心呢?大致的步骤如下:
- 成为MVI会员。
- 微软提供一个内部的私有接口。
- 提供相关签名证书。
通过上面流程,我们就可以开发自己的安全软件,并且将自己的安全软件注册到WSC种。那么有没有办法可以绕过上面这些呢?这就是本文需要分析的技术性知识点。
2. WSC注册初探
WSC如果被注册成功之后,可以通过命令get-wmiObject -namespace root\SecurityCenter2 -class AntiVirusProduct
来查询相关信息,结果如下:
> get-wmiObject -namespace root\SecurityCenter2 -class AntiVirusProduct__GENUS : 2
__CLASS : AntiVirusProduct
__SUPERCLASS :
__DYNASTY : AntiVirusProduct
__RELPATH : AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
__PROPERTY_COUNT : 6
__DERIVATION : {}
__SERVER : DESKTOP-1SIKOAK
__NAMESPACE : ROOT\SecurityCenter2
__PATH : \\DESKTOP-1SIKOAK\ROOT\SecurityCenter2:AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
displayName : Windows Defender
instanceGuid : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe : windowsdefender://
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState : 393472
timestamp : Tue, 17 Dec 2024 02:37:41 GMT
PSComputerName : DESKTOP-1SIKOAK__GENUS : 2
__CLASS : AntiVirusProduct
__SUPERCLASS :
__DYNASTY : AntiVirusProduct
__RELPATH : AntiVirusProduct.instanceGuid="{4C17E7AE-043A-D732-91B8-D139C9EB6B26}"
__PROPERTY_COUNT : 6
__DERIVATION : {}
__SERVER : DESKTOP-1SIKOAK
__NAMESPACE : ROOT\SecurityCenter2
__PATH : \\DESKTOP-1SIKOAK\ROOT\SecurityCenter2:AntiVirusProduct.instanceGuid="{4C17E7AE-043A-D732-91B8-D139C9EB6B26}"
displayName : 火绒安全软件
instanceGuid : {4C17E7AE-043A-D732-91B8-D139C9EB6B26}
pathToSignedProductExe : C:\Program Files\Huorong\Sysdiag\bin\wsctrlsvc.exe
pathToSignedReportingExe : C:\Program Files\Huorong\Sysdiag\bin\wsctrlsvc.exe
productState : 266240
timestamp : Tue, 17 Dec 2024 02:37:36 GMT
PSComputerName : DESKTOP-1SIKOAK
在这里可以看到有两个类信息:
- Windows Defender表示默认的Windows Defender。
- 火绒安全软件表示火绒。
这里可以看到一个非常重要的信息,WSC注册的进程为C:\Program Files\Huorong\Sysdiag\bin\wsctrlsvc.exe
。
那么我们就可以请出IDA和调试神器WINDBG来分析和调试一下WSC注册的原理。
3. WSC注册原理分析
由于我们需要成为MVI会员之后,才能有相关私有SDK文档,这里我们就分析一下wsctrlsvc.exe
这个程序,大致看一下私有SDK是怎么使用的。
我们可以看到WSC相关的主要文件有如下几个:
- wscisvif.dll这个是WSC客户端的接口提供DLL。
- wscapi.dll这个是WSC客户端的核心DLL。
- wscsvc.dll这个是WSC的核心服务DLL。
可以看到私有SDK就是对wscisvif.dll
未公开的SDK的调用,我们可以对这些使用接口进行分析,可以看到核心接口如下:
virtual long _IWscAVStatus4<class CWscIsv>::Register(unsigned short *, unsigned short *, int, int)
virtual long _IWscAVStatus4<class CWscIsv>::Unregister(void)
virtual long _IWscAVStatus4<class CWscIsv>::UpdateStatus(enum _WSC_SECURITY_PRODUCT_STATE, int)
virtual long _IWscAVStatus4<class CWscIsv>::InitiateOfflineCleaning(unsigned short *, unsigned short *)
virtual long _IWscAVStatus4<class CWscIsv>::NotifyUserForNearExpiration(unsigned long)
可以发现核心接口就是如下三个:
Register
注册WSC产品。Unregister
反注册WSC产品。UpdateStatus
更新产品的状态。
根据这些分析我们就可以自己向Windows安全中心注册自己的安全软件了,例如可以如下(这里注册了一个我的安全软件产品):
4. 关于AMPPL
通过上面的分析,我们成功向Windows安全中心注册了自己的安全软件,但是在某些情况下可能会失败,并且Register
返回的结果为0x800704dc
;这就是AMPPL安全检测导致的结果。
我们分析s_wscRegisterSecurityProduct
函数,可以导致得到如下的判断:
if ( type == SECURITY_PRODUCT_TYPE_ANTIVIRUS )
{ValidateCallerAMPPL((int *)&v34, a1, L"s_wscRegisterSecurityProduct", a3, a4);v12 = (unsigned int)v34;if ( (_DWORD)v34 )goto Exit1;
}
ValidateCallerAMPPL
这个函数就是检测AMPPL的,大致检测的结果如下:
v12 = NtQueryInformationProcess(v9, 61, &v15, 1);
if ( (unsigned __int8)((v15.Level & 7) - 1) > IsAm1PPL || (v15.Level & 0xF0) != 0x30 )IsAmPPL = 0;
也就是说我们需要检测进程AMPPL的标记,通过NtQueryInformationProcess
查询ProcessProtectionInformation
,改查询得到的结构体信息如下:
typedef enum _PS_PROTECTED_SIGNER
{PsProtectedSignerNone = 0,PsProtectedSignerAuthenticode = 1,PsProtectedSignerCodeGen = 2,PsProtectedSignerAntimalware = 3,PsProtectedSignerLsa = 4,PsProtectedSignerWindows = 5,PsProtectedSignerWinTcb = 6,PsProtectedSignerMax = 7
} PS_PROTECTED_SIGNER;typedef enum _PS_PROTECTED_TYPE
{PsProtectedTypeNone = 0,PsProtectedTypeProtectedLight = 1,PsProtectedTypeProtected = 2,PsProtectedTypeMax = 3
} PS_PROTECTED_TYPE;typedef union _PS_PROTECTION
{UCHAR Level;struct{int Type : 3;int Audit : 1;int Signer : 4;} Flags;
} PS_PROTECTION, *PPS_PROTECTION;
这些结构体字段中Type含义如下:
-
PsProtectedTypeNone (0)
- the process is not running as protected. -
PsProtectedTypeProtectedLight (1)
- the process is running as light-protected (PPL). -
PsProtectedTypeProtected (2)
- the process is running as fully-protected.
Signer字段的含义如下:
-
PsProtectedSignerNone (0)
- the process has no signature that grants it protection. -
PsProtectedSignerAuthenticode (1)
- the process has an Authenticode signature. -
PsProtectedSignerCodeGen (2)
- the process has a Code Generation signature. -
PsProtectedSignerAntimalware (3)
- the process has an Antimalware signature. -
PsProtectedSignerLsa (4)
- the process has an LSA signature. -
PsProtectedSignerWindows (5)
- the process has a Windows signature. -
PsProtectedSignerWinTcb (6)
- the process has a WinTCB (trusted computer base) signature. -
PsProtectedSignerWinSystem (7)
- the process has a WinSystem signature. -
PsProtectedSignerApp (8)
- the process has a Store Application signature.
在进程启动的时候,内核会更加启动进程是否有签名(或者签名的类型)来设置相关值,流程为:
NtCreateUserProcess --> SeQuerySigningPolicy
这里似乎看起来又比较麻烦了,因为需要防病毒MVI相关证书才行。这里NtQueryInformationProcess
查询的是EPROCESS
中的字段的值,我们只要想办法修改这些值就可以了,例如我们可以将我们自己的进程EPROCESS
修改为如下:
kd> dx -id 0,0,94040040 -r1 (*((ntkrpamp!_PS_PROTECTION *)0x940403a6))
(*((ntkrpamp!_PS_PROTECTION *)0x940403a6)) [Type: _PS_PROTECTION][+0x000] Level : 0x31 [Type: unsigned char][+0x000 ( 2: 0)] Type : 0x1 [Type: unsigned char][+0x000 ( 3: 3)] Audit : 0x0 [Type: unsigned char][+0x000 ( 7: 4)] Signer : 0x3 [Type: unsigned char]
这样我们就可以完成ValidateCallerAMPPL
这个函数的检测了,WSC也完全正常注册了。
5. 参考
WSC本来就是一个私有的接口文档,参考资料也非常少,下面是网上相关的一些参考文章:
- https://bbs.kanxue.com/thread-282498.htm
- https://github.com/m417z/ntdoc/blob/main/descriptions/ps_protection.md
- https://stackoverflow.com/questions/3698285/how-can-i-tell-the-windows-security-center-that-im-an-antivirus
- https://learn.microsoft.com/en-us/defender-xdr/virus-initiative-criteria
相关文章:

Windows安全中心(病毒和威胁防护)的注册
文章目录 Windows安全中心(病毒和威胁防护)的注册1. 简介2. WSC注册初探3. WSC注册原理分析4. 关于AMPPL5. 参考 Windows安全中心(病毒和威胁防护)的注册 本文我们来分析一下Windows安全中心(Windows Security Center…...

微积分复习笔记 Calculus Volume 2 - 4.2 Direction Fields and Numerical Methods
4.2 Direction Fields and Numerical Methods - Calculus Volume 2 | OpenStax...
深入理解旋转位置编码(RoPE)及其在大型语言模型中的应用
文章目录 前言一、 旋转位置编码原理1、RoPE概述2、 复数域内的旋转1、位置编码生成2、 应用位置编码二、RoPE的实现细节1、RotaryEmbedding类设计2、apply_rotary_pos_emb函数3、demo_apply_rotary_pos_emb函数三、完整RoPE代码Demo前言 随着自然语言处理(NLP)领域的快速发…...

内网穿透的应用-在OpenWrt上轻松搭建SFTP服务,安全传输文件不再难!
文章目录 前言1. 安装openssh-sftp-server2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT系统上安装SFTP服务,并结合cpolar内网穿透,创建安全隧道映射22端口,实现在公网环境下远程OpenWRT SFTP&#…...

【图像处理lec3、4】空间域的图像增强
目录 1. 空间域图像增强的背景与目标 2. 空间域处理的数学描述 3. 灰度级变换 4. 幂律变换(Power-Law Transformation) 5、 分段线性变换 Case 1: 对比度拉伸 Case 2: 灰度切片 Case 3: 按位切片 6、对数变换(Logarithmic Transform…...

【算法day13】二叉树:递归与回溯
题目引用 找树左下角的值路径总和从中序与后序遍历构造二叉树 今天就简简单单三道题吧~ 1. 找到树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 我们…...

上海亚商投顾:创业板指缩量下跌 多只高位股午后跌停
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整,创业板指领跌,高位股开始出现退潮,建设工业、星光股份、…...

单步调试Android Framework——App冷启动
纸上得来终觉浅,绝知此事要躬行。 —— [宋]陆游 基于aosp_cf_x86_64_phone-trunk_staging-eng , 下面是具体断点位置。 第一部分,桌面launcher进程 com.android.launcher3.touch.ItemClickHandler onClickonClickAppShortcutstartAppShor…...
统计一个目录下的文件及目录数量-linux010
要统计一个目录下的文件数量(包括子目录中的文件),可以使用以下命令: 1. 统计所有文件数量(包括子目录) 在终端中运行以下命令: find /path/to/directory -type f | wc -l 解释:…...
spring RestTemplate使用说明
rest-template是spring对httpclient的逻辑封装,它底层还是基于httpclient,所以一些配置其实跟httpclient是强相关的。 基本配置 rest-template可以不带参数,使用默认配置,也可以指定ClientHttpRequestFactory参数,Cl…...
thinkphp:try-catch捕获异常
使用简单的例子,实现了一个简单的try-catch捕获异常的实例 //开始事务Db::startTrans(); try{ //有异常抛出异常 if(存在错误){ throw new \Exception("异常信息"); } // 提交事务 Db::commit(); // 返回成功信息 ... } catch (\…...
shardingsphere分库分表跨库访问 添加分片规则
shardingsphere分库分表跨库访问 添加分片规则 建立 JDBC 环境 创建表 t_order: CREATE TABLE t_order (tid bigint(20) NOT NULL,tname varchar(255) DEFAULT NULL,goods_id bigint(20) DEFAULT NULL,tstatus varchar(255) DEFAULT NULL,PRIMARY KEY (tid) ) E…...
c++:std::map下标运算符的不合理使用
这是我分析之前遗留代码时发现的一个隐藏点;不过我并不认为这样使用std::map是合理的。 看看简化后的代码,v1、v2的值应该是多少呢? #include <map>std::map<int, int> cm[2];int get_cm_value(int device, int ctrl) { auto …...

KeyFormer:使用注意力分数压缩KV缓存
Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference 202403,发表在Mlsys Introduction 优化KV cache的策略,主要是集中在系统级别的优化上,比如FlashAttention、PagedAttention,它…...
MetaGPT源码 (ContextMixin 类)
目录 理解 ContextMixin什么是 ContextMixin?主要组件实现细节 测试 ContextMixin示例:ModelX1. 配置优先级2. 多继承3. 多继承重写4. 配置优先级 在本文中,我们将探索 ContextMixin 类,它在多重继承场景中的集成及其在 Python 配…...

MATLAB生成.exe独立程序过程(常见问题解决方法)(2024.12.14)
本文只记录我执行过程中遇到的关键问题、以及解决方法,不讲诉整个流程。 电脑环境 win11系统 matlab 2024b 版本 整体流程 1.下载matlab运行时库,简写为MCR 2.配置MCR环境 3.打包程序 4.目标机器安装程序 一、下载MCR 下载这个折腾了大半天,大概问题就是…...

PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环
效果 PHP代码 public function demo($params){function moveNext($arr){$length count($arr);$lastElement $arr[$length - 1];for ($i $length - 1; $i > 0; $i--) {$arr[$i] $arr[$i - 1];}$arr[0] $lastElement;return $arr;}function moveAndReplace($array, $from…...

ChatGPT搜索全新升级,向全体用户开放,近屿智能助力AI行业发展
12月17日,OpenAI在第八天直播中正式宣布ChatGPT搜索功能全面升级,并即日起对所有ChatGPT用户开放。此次更新不仅带来了显著的性能提升,还引入了多项突破性功能,如更快的搜索速度、全新的地图体验以及YouTube视频嵌入,为…...

win10配置免密ssh登录远程的ubuntu
为了在终端ssh远程和使用VScode远程我的VM上的ubuntu不需要设置密码,需要在win10配置免密ssh登录远程的ubuntu。 在win10打开cmd,执行下面的代码生成密钥对(会提示进行设置,按照默认的配置就行,一直回车)&…...
skywalking 搭建 备忘录
基础环境 apache-skywalking-apm-9.6.0.tar.gz apache-skywalking-java-agent-9.1.0.tgz elasticsearch 7.14.1 采用dockers搭建 或者手动部署 kibana 可视化 应用 微服务版 consumer.jar eureka.jar 注册中心 provider.jar skywalking 地址 https://skywalkin…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...