首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 7 安裝程式偵測機制白皮書

     編輯:關於.NET

引言

UAC (User Account Control) 在 Windows Vista 引入後,應用程式預設以標準使用者權限執行。早期應用程式 (尤其安裝程式) 假設擁有管理員權限,需寫入 Program Files、HKLM\Software 等受保護位置,若不提權將失敗並回傳「拒絕存取」。

為相容舊版安裝程式,Windows 內建安裝程式偵測:自動識別「疑似安裝程式」並提權執行。但此機制不完美,會產生誤判與遺漏。

偵測運作原理

  • 偵測對象: 所有無資訊清單 (外部或內嵌) 的 32 位元執行檔。系統假設這些為「舊版應用程式」,預期需管理員權限。
  • 偵測邏輯: 掃描檔名關鍵字 —— setup、install、update (不分大小寫)。
  • 視覺指示: 符合者在總管顯示盾牌疊加圖示,雙擊時彈出 UAC 提權提示。

盾牌疊加圖示範例

常見問題

1. 誤判 (False Positive) —— 一般程式被當安裝程式

例:StockUpdater.exe (股票更新程式) 含 update,觸發偵測,加盾牌、要求提權。但該程式實際不需管理員權限,誤判造成:

  • 使用者困擾與安全疑慮,可能放棄使用
  • 不必要的提權增加攻擊面

2. 遺漏 (False Negative) —— 真安裝程式未被偵測

自訂安裝程式 (非 MSI) 檔名不含關鍵字 (如 MyAppDeploy.exe),偵測失效,無盾牌、不提權 → 安裝過程中寫入受保護位置失敗。

解決方案:資訊清單明確宣告

最直接、可靠的做法是加入應用程式資訊清單,明確宣告所需執行層級,完全繞過偵測邏輯。

情況 A:原始碼不可用 → 外部資訊清單檔

  • 在執行檔同目錄建立 YourApp.exe.manifest (檔名必須完全一致)。
  • 內容範例:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0"
    xmlns="urn:schemas-microsoft-com:asm.v1"
    xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
    xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="StockUpdater"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

情況 B:原始碼可用 → Visual Studio 內嵌資訊清單

  • 新專案預設已包含資訊清單 (VS 2008+)。
  • 專案屬性中設定 requestedExecutionLevel:
層級值含義適用情境
asInvoker以呼叫者相同權限執行 (標準使用者)一般應用程式、非安裝程式
requireAdministrator必須以管理員權限執行安裝程式、系統工具、需寫入受保護區域
highestAvailable以目前使用者可取得的最高權限執行既可標準執行、亦可管理員執行的混合工具

總結

  1. 安裝程式偵測為舊版 32 位元無資訊清單執行檔提供相容性橋樑。
  2. 偵測基於檔名關鍵字,易產生誤判與遺漏。
  3. 唯一正確做法: 所有發布執行檔務必內嵌資訊清單,明確宣告 requestedExecutionLevel。
  4. 原始碼不可用時,部署同名 .manifest 外部檔案即可生效。
  5. 徹底消除偵測不確定性,確保應用程式在標準使用者/管理員環境下行為可預期、安全。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved