none
程序在UAC窗口点击否仍然会运行是如何实现的呢 RRS feed

  • 问题

  • 比如魔兽世界的Launcher.exe,如果请求UAC,点击否,程序照样执行,这个是如何实现的呢

    上次发帖说招商银行的是因为调用其他程序,本身是不需要权限就能运行的

    难道这个Launcher.exe会在启动时请求UAC然后重新运行自身,如果失败就以非管理员运行?

    这个程序并没有盾牌图标

    2011年12月18日 11:03

答案

  • 魔兽Launcher.exe使用UAC提升权限并不是提升当前进程的权限,而是启动一个新的Launcher.exe并请求赋予其管理员权限。程序执行的操作以参数方式进行传递。

    实际上大部分UAC兼容的应用程序都是如此实现的,以搜狗浏览器为例:


    共同努力,共同提高
    kaedei#live.cn My BLOG
    2011年12月22日 23:44
    版主

全部回复

  • 這可能是 Launcher.exe 會調用一個需要 UAC 提權的進程 A, 如果調用成功, 則自身結束運行, 如果 A 調用失敗, 則運行進程 B, 然後自身結束運行. 對於此你可以通過在彈出 UAC 對話框時, 按一下 "顯示詳細信息(D)" 按鈕, 然後觀察請求 UAC 提權的進程信息(比如文件路徑和命令行, 或者 CLSID).

    或者可以通過下載并運行 Process Monitor 來監視進程的運行

     

    然後做一些必要設置

     

    1. 按 Ctrl+E.
    2. 按 Ctrl+X.
    3. 按 Ctrl+L.
    4. 在彈出的 "Process Monitor Filter" 窗體中, 刪除所有已有過濾器.
    5. 只添加一個過濾器 Column: Operation, Relation: is, Value: Process Start, Action: Include.
    6. 然後重新按一下 Ctrl+E.
    7. 這樣一旦有進程啟動, 那么就會被 Process Monitor 記錄下來.
    8. 記錄的信息, 包含映像文件路徑.
    9. 雙擊要查看進程, 彈出 "Event Properties" 窗體, 單擊 "Process" 選項卡.

     

    下載地址:
    http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx


    Folding@Home
    2011年12月18日 12:02
  • 如果在標準用戶下, 通過 Windows Explorer 格式化一個本地卷, 那麼在彈出的 UAC 對話框可以看到請求是由 CLSID 發起的, 如果提權成功, 那麼格式化對話框則會通過一個 dllhost 進程運行, 如果失敗, 也不會影響 Windows Explorer 的運行.


    Folding@Home


    • 已编辑 repl 2011年12月18日 12:28
    2011年12月18日 12:24
  • “這可能是 Launcher.exe 會調用一個需要 UAC 提權的進程 A, 如果調用成功, 則自身結束運行, 如果 A 調用失敗, 則運行進程 B, 然後自身結束運行.”


    这是我知道,比如招商银行的客户端就是这样

    但是Launcher.exe弹出的UAC提权窗口中的命令行就是这个Launcher.exe自身,这样也可以吗?


    • 已编辑 格林奇 2011年12月19日 12:47
    2011年12月19日 12:47
  • 魔兽Launcher.exe使用UAC提升权限并不是提升当前进程的权限,而是启动一个新的Launcher.exe并请求赋予其管理员权限。程序执行的操作以参数方式进行传递。

    实际上大部分UAC兼容的应用程序都是如此实现的,以搜狗浏览器为例:


    共同努力,共同提高
    kaedei#live.cn My BLOG
    2011年12月22日 23:44
    版主
  • 在回复另一個帖子發現, 確實有程序可以先以標準用戶權限方式運行, 然後在結束自身運行前, 先通過 UAC 請求提升權限, 如果請求得到用戶批准, 該程序會再次以管理員身份運行.

    可以通過下面方式驗證.

    1. 下載 Process Monitor

    Process Monitor
    http://technet.microsoft.com/en-us/sysinternals/bb896645

    2. 通過在開始菜單搜索框輸入 UAC , 確保 UAC 提醒等級是 "始終通知".

    3. 通過一個管理員賬戶登錄到桌面. 為了不影響後續的驗證, 進入桌面後不要運行 mmc.exe 程序, 如果已經有在運行的 mmc.exe 請關閉.

    4. 首先運行 Process Monitor, 刪除所有默認的 Filter 定義, 然後添加(Include)一個 Filter 定義, Process Name is mmc.exe, 添加完成後啟動監控.

    5. 運行一個命令提示符, 不需要經過 UAC 提權.

    6. 在那個命令提示符中輸入命令

    timeout /t 3 & gpedit.msc

    如果沒有 gpedit.msc, 可以用 eventvwr.msc 代替.

    7. 命令輸入完成後, 馬上將該命令提示符最小化.

    8. 略微等待後, 應該可以看到任務欄會出現一個 UAC 請求提升的權限的應用程序按鈕.

    9. 這時直接返回 Process Monitor.

    10. 首先按 Ctrl+F, 並輸入 Process Exit, 應該可以找到一條 "Process Exit" 的記錄.

    11. 單擊該記錄, 在彈出的 "Event Properties" 窗體中定位到 "Process" 選項卡.

    12. 記錄下(截圖), Path, Command Line, PID, Parent PID, Integrity.

    13. 單擊之前的 UAC 請求提升權限的應用程序按鈕, 批准提權.

    14. 現在再次返回 Process Monitor.
    15. 任取後續任意一條記錄, 並再此單擊記錄, 在彈出的 "Event Properties" 窗體中定位到 "Process" 選項卡.

    16. 這時同之前的結果進行比較, 會發現只有 PID 和 Integrity 有改變, PID 為兩個不同的值, 而 Integrity 之前為 Medium, 現在為 High.

    17. 如果在上述步驟中, 取消授權, 那麼會在執行命令的命令聽提示符中, 顯示 "拒絕訪問" 字樣.

    18. 通過上述驗證步驟, 可以看到確實有進程可以做到對自身進程權限的提升(在用戶交互確認的情況下).


    Folding@Home

    • 已编辑 repl 2011年12月30日 1:38
    2011年12月29日 14:43