什麼情況下 exe 會自動加上 UAC 的盾標?
01-13
我知道在開發Windows桌面程序的時候,如果需要操作註冊表等核心設置,需要在編譯時在「UAC執行級別」中特別指定需要管理員許可權,這樣編譯出來的exe的右下角有一個小小的盾牌標誌。如果不這麼做也能編譯,但寫入註冊表等操作會失敗。
我也知道UAC是Vista中首次引入的新技術。
我也知道Vista是2006年才向部分用戶發售。
我找一款老遊戲,翻出來一張2000年買的光碟,我發現其中一個「3d乒乓球」是有UAC盾標的。
2000年之前的軟體肯定不會支持2006年之後的技術,這是確定無疑的。
於是問題來了,這到底是怎麼回事?
我猜測是Windows針對能識別出來的一定需要管理員許可權的安裝和卸載程序做了特殊處理?但不確定,向Windows開發高手求證。
Windows Vista Application Development Requirements for User Account Control (UAC)
如果是安裝程序會適用installer detection。
我把家裡壓箱底的星際光碟翻出來試了一下,果然不出所料,INSTALL.exe被加上了UAC圖標。但是我們都知道星際發行時還是Windows 98年代,不要說UAC,連NT內核系統都還沒進入家庭市場。所以肯定是系統對exe的內容做了檢測,判斷它屬於安裝程序才加的UAC圖標。具體怎麼檢測的呢?上文鏈接中關於installer detection有如下表述。Before a 32 bit process is created, the following attributes are checked to determine whether it is an installer:
在32位進程創建之前,系統會檢查其以下屬性,以決定它是不是安裝程序。
- Filename includes keywords such as "install," "setup," and "update."
- Keywords in the following Versioning Resource fields: Vendor, Company Name, Product Name, File Description, Original Filename, Internal Name, and Export Name. ---
- Keywords in the side-by-side application manifest embedded in the executable.
- Keywords in specific StringTable entries linked in the executable.
- Key attributes in the resource file data linked in the executable.
- Targeted sequences of bytes within the executable.
1. 文件名是否包含關鍵字:"install", "setup", "update「
2. exe的資源區Versioning欄位是否包含關鍵字3. SXS清單中是否包含關鍵字4. StringTable是否包含關鍵字5. 資源中屬性欄位是否包含關鍵字6. exe中包含特徵位元組流,即可能產生高許可權操作的指令。知道原理後,我們嘗試把INSTALL.exe的UAC圖標去掉。1. 首先將它改成test.exe。這樣第一條就失效了。雙擊一下,沒有UAC提示程序就啟動了!
所以結論是老程序,尤其是安裝包也會被標上UAC的一種原因是:windows會通過一些標準邏輯自動檢測exe是不是安裝包,如果是則自動要求使用UAC提權。這個例子中只適用了上文中提到的安裝包檢測機制中的前兩項,可以說這兩項基本涵蓋了絕大部分安裝包程序。後續我會做些實驗把另外幾項的觸發機制也研究一下,如有發現,隨時更新。PS: 好久沒玩的老遊戲,再拾起來連電腦都打不過了……說好的1V7呢。推薦閱讀:
※仙劍一裡面拜月教主和劍聖誰厲害?
※你有過哪些與遊戲有關的黑/慘絕人寰/驚天動地/細思恐極 歷史?
※《彩虹六號∶圍攻》以目前官方或民間泄露的文案來看,第三年生化模式的故事背景和世界觀是什麼?
※穿越火線中怎麼練習狙?
※如何評價《使命召喚:黑色行動 II》(Call of Duty: Black Ops II)?