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安全中心呢?大致的步驟如下:

  1. 成為MVI會員。
  2. 微軟提供一個內部的私有接口。
  3. 提供相關簽名證書。

通過上面流程,我們就可以開發自己的安全軟件,并且將自己的安全軟件注冊到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

在這里可以看到有兩個類信息:

  1. Windows Defender表示默認的Windows Defender。
  2. 火絨安全軟件表示火絨。

這里可以看到一個非常重要的信息,WSC注冊的進程為C:\Program Files\Huorong\Sysdiag\bin\wsctrlsvc.exe

那么我們就可以請出IDA和調試神器WINDBG來分析和調試一下WSC注冊的原理。

3. WSC注冊原理分析

由于我們需要成為MVI會員之后,才能有相關私有SDK文檔,這里我們就分析一下wsctrlsvc.exe這個程序,大致看一下私有SDK是怎么使用的。

我們可以看到WSC相關的主要文件有如下幾個:

  1. wscisvif.dll這個是WSC客戶端的接口提供DLL。
  2. wscapi.dll這個是WSC客戶端的核心DLL。
  3. 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)

可以發現核心接口就是如下三個:

  1. Register注冊WSC產品。
  2. Unregister反注冊WSC產品。
  3. 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本來就是一個私有的接口文檔,參考資料也非常少,下面是網上相關的一些參考文章:

  1. https://bbs.kanxue.com/thread-282498.htm
  2. https://github.com/m417z/ntdoc/blob/main/descriptions/ps_protection.md
  3. https://stackoverflow.com/questions/3698285/how-can-i-tell-the-windows-security-center-that-im-an-antivirus
  4. https://learn.microsoft.com/en-us/defender-xdr/virus-initiative-criteria

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63459.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63459.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63459.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JSX和vue模版哪個更好?

JSX和Vue模板各有優缺點&#xff0c;選擇哪種取決于具體需求和個人偏好。? JSX的優點 ?靈活性?&#xff1a;JSX允許在JavaScript代碼中直接插入任意表達式&#xff0c;這使得它在處理復雜邏輯時更加靈活。例如&#xff0c;條件渲染和循環渲染可以通過JavaScript的標準語法…

[代碼隨想錄21回溯]組合問題,電話號碼的字母組合問題

前言 回溯的提出是解決循環問題&#xff0c;回溯的提出就是為了解決排列和組合問題&#xff0c;以及多層遍歷問題&#xff0c;因為如果遍歷的層數越多我們的效率就會越低&#xff0c;回溯加上剪枝能很好解決這個問題。 題目鏈接 77. 組合 - 力扣&#xff08;LeetCode&#xff…

智能工廠的設計軟件 三種處理單元(NPU/GPU/CPU)及其在深度學習框架中的作用 之2

本文要點 分類學 利用NPU、GPU和CPU的分工協作&#xff0c;實現 一個信息系統架構中的靈活的模塊化框架&#xff0c;該框架使用一個類似元素周期表的分類法&#xff0c;將 該元素周期表 左邊的行矢&#xff08;時間關系&#xff0c;由應用規格 約束&#xff09; 、頂上的列簇…

幾款主流的超聲波流量計應用場景梳理

清水應用 這款 聲樂 在含有最少固體或曝氣&#xff08;≤ 1-2%&#xff09;的清潔水的情況下表現出色。該儀表融合了卓越的性能和經濟性&#xff0c;使其成為需要外夾式超聲波流量計的應用的理想選擇。它在市政水處理設施中特別有效&#xff0c;其精度和成本效益確保了最佳運行…

Flag 驗證器

Flag 驗證器使用教程 Flag 驗證器 是一種常用工具&#xff0c;用來驗證命令行參數或配置文件中的標志&#xff08;flag&#xff09;是否符合預期規則。這些工具可以幫助開發者確保傳入的參數滿足一定的條件&#xff0c;避免因參數錯誤而導致程序運行失敗。以下是對各個驗證器功…

二進制分析的新興趨勢:塑造安全的移動應用

在當今快速發展的數字世界中&#xff0c;保障移動應用的安全性變得尤為重要。隨著移動技術的廣泛應用&#xff0c;安全性需求也日益增強。二進制分析作為確保移動應用安全和合規性的重要手段&#xff0c;通過對已編譯的應用進行深入分析&#xff0c;能夠發現源代碼中難以察覺的…

Python:動態粒子愛心

預覽 代碼結構概述 這段代碼使用了 pygame 庫來創建一個動態的圖形窗口&#xff0c;繪制一個心形圖案&#xff0c;并在其中顯示閃爍的文本。代碼主要分為以下幾個部分&#xff1a; 初始化和設置心形曲線的計算粒子類的定義生成粒子文本設置主循環 1. 初始化和設置 import p…

React源碼02 - 基礎知識 React API 一覽

1. JSX到JavaScript的轉換 <div id"div" key"key"><span>1</span><span>2</span> </div>React.createElement("div", // 大寫開頭會當做原生dom標簽的字符串&#xff0c;而組件使用大寫開頭時&#xff0c;這…

使用DynadotAPI購買域名清倉列表中的過期域名

前言 Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵箱&…

js分頁功能

先聲明些全局變量方便我們在下面的代碼中使用 //一頁有多少條數據 let num 10; //頁碼 let k 0; //總頁數 let divide; // 用來判斷顯示哪幾頁的頁數 let page_num 0; // 聲明一個用于接數據的變量 let datas; // 聲明一個用于接數據的變量 let data; //一頁有多少條數據 l…

CMake Do‘s and Don‘ts (行為準則)

CMake Dos and Donts {行為準則} 1. General2. Modules3. ProjectsReferences Effective Modern CMake https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 Do’s and Don’ts https://cliutils.gitlab.io/modern-cmake/chapters/intro/dodonot.html dos and …

驗證的分類及相關工具

目錄 1.驗證方法的分類1.1動態驗證1.2.靜態驗證 2.動態驗證及相關工具2.1.電路級仿真工具2.2.邏輯仿真工具 3.靜態驗證及相關工具3.1 形式驗證工具3.2 靜態時序分析工具 SOC設計中驗證包含以下幾個方面&#xff1a; 驗證原始描述的正確性驗證設計的邏輯功能是否符合設計規范的要…

【HarmonyOs學習日志(14)】計算機網絡之域名系統DNS

域名系統DNS 域名系統DNS——從域名解析出IP地址 文章目錄 域名系統DNS概述域名到IP地址的解析 互聯網的域名結構命名標準 域名服務器域名的解析過程 概述 域名系統DNS&#xff08;Domain Name System&#xff09;是互聯網使用的命名系統&#xff0c;用來把便于人們使用的機器…

【Python】pandas庫---數據分析

大學畢業那年&#xff0c;你成了社會底層群眾里&#xff0c;受教育程度最高的一批人。 前言 這是我自己學習Python的第四篇博客總結。后期我會繼續把Python學習筆記開源至博客上。 上一期筆記有關Python的NumPy數據分析&#xff0c;沒看過的同學可以去看看&#xff1a;【Pyt…

【人工智能學習之HDGCN18關鍵點修改】

【人工智能學習之HDGCN18關鍵點修改】 訓練部分修改部分 訓練部分 請參考文章&#xff1a;【人工智能學習之HDGCN訓練自己的數據集】 修改部分 參考源碼中25關鍵點的區域劃分&#xff0c;我們將18關鍵點劃分為&#xff1a; 頭部&#xff1a; 鼻子左眼和左耳右眼和右耳 上肢…

ARCGIS國土超級工具集1.2更新說明

ARCGIS國土超級工具集V1.2版本&#xff0c;功能已增加至47 個。在V1.1的基礎上修復了若干使用時發現的BUG&#xff0c;新增了"矢量分割工具"菜單&#xff0c;同時增加及更新了了若干功能&#xff0c;新工具使用說明如下&#xff1a; 一、勘測定界工具欄更新界址點成果…

華為OD --- 流浪地球

華為OD --- 流浪地球 題目獨立實現基本思路代碼實現 其他答案實現思路代碼實現 題目 獨立實現 基本思路 1、首先把題目給出的啟動機器初始化成數組, 2、用for循環模擬每隔1s更新這個初始化數組的前后兩個機器. (源碼中的updateTimeCount函數) 3、for循環每次循環后會檢查當前…

DataOps驅動數據集成創新:Apache DolphinScheduler SeaTunnel on Amazon Web Services

引言 在數字化轉型的浪潮中&#xff0c;數據已成為企業最寶貴的資產之一。DataOps作為一種文化、流程和實踐的集合&#xff0c;旨在提高數據管道的質量和效率&#xff0c;從而加速數據從源頭到消費的過程。白鯨開源科技&#xff0c;作為DataOps領域的領先開源原生公司&#xf…

【硬件IIC】stm32單片機利用硬件IIC驅動OLED屏幕

之前操作OLED屏幕都是用GPIO模擬IIC去驅動&#xff0c;最近打算用硬件IIC去驅動&#xff0c;于是寫下這個demo,在這個過程中遇到一點小坑&#xff0c;記錄一下&#xff0c;本文章非小白教程&#xff0c;所以只突出踩到的坑點&#xff0c;文章中涉及到的OLED也是網上資料寫爛的&…

python如何自動加空格

首先&#xff0c;需要進行打開的一個pycharm的軟件&#xff0c;可進行雙擊的打開該軟件。 可以看到的是在當前的打開的文件中&#xff0c;格式相對較亂一下。格式不對會格式錯誤。 然后點擊菜單欄中的“code”。 在彈出的下拉菜單中選擇“reformat code”選項。 可以看到的是在…