从temp文件夹运行Signed和RequireAdministrator可执行文件?

时间:2010-05-13 13:48:25

标签: windows uac elevation windows-appcompat-platform

我将我的可执行文件表示为需要管理员:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

    <!-- Disable Windows Vista UAC compatability heuristics -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo> 
</assembly>

然后我对它进行了数字签名。

但是当我运行可执行文件时,我注意到一些奇怪的事情:同意对话框上的可执行文件名称从PingWarning.exe更改为pinxxxx.tmp;好像制作了一个临时副本,并且正在运行:

alt text http://i42.tinypic.com/nmkppz.jpg

我挖出了Process Montior,看看是否有人在我启动可执行文件时创建 * .tmp 文件,并且有:

alt text http://i42.tinypic.com/10o1b8g.jpg

此特定svchost容器中的应用程序信息服务故意将我的可执行文件复制到Windows临时文件夹,并从那里请求用户“同意” ;提供无效的文件名。

一旦获得同意,可执行文件将从其原始位置运行: link text http://i43.tinypic.com/104noub.jpg

如果我没有对其进行数字签名,则不会将文件复制到临时文件夹:

alt text http://i43.tinypic.com/14kvevd.jpg


所以当我对我的可执行文件进行数字签名时,我的问题是同意对话框中出现的无效文件名已表现为{{1 }}

做什么?


更新

我能找到的最接近的解释来自Uninformed.orghttp://uninformed.org/index.cgi?v=8&a=6&p=3):

  

对于a的启动请求   请求uiaccess的程序,    appinfo!RAiLaunchAdminProcess 是   被叫来服务请求。该   然后验证过程在...内   (硬编码)允许的一组   目录    APPINFO!AiCheckSecureApplicationDirectory 的。   验证程序后   从允许的范围内发射   目录,最终控制   传递给 appinfo!AiLaunchProcess   执行剩余的工作   为发射服务所必需的   请求。此时,由于   “安全”应用程序目录   要求,这是不可能的   有限的用户(或运行的用户)   低完整性,就此而言)   在任何一个中放置自定义可执行文件   “安全”应用程序目录。

提示是一些(未记录的,未指定的)硬编码路径,应用程序“被允许”位于其中。

另一个是用于请求uiaccess的程序。在我的情况下,我的原始清单中没有requireAdministrator。但是改变清单包括no ui access:

但这并没有解决原来的问题。


更新二:

来自MSDN():

  

重要
  应用程序   uiAccess标志设置为true必须是   Authenticode签名正确启动。   此外,应用程序必须   居住在受保护的地方   文件系统。 \ Program Files \和\ windows \ system32 \
  目前是两个受允许的受保护地点。

这似乎可以替代请求uiAccess="false"的可执行文件必须位于允许位置的概念;除了我没有要求uiAccess。

1 个答案:

答案 0 :(得分:2)

我看到了未签名的应用程序存在同样的问题,特别是NSIS和InnoSetup安装程序(当1gb +安装程序被复制到%windir%\ temp然后由consent.exe扫描时有点问题)

NSIS错误跟踪器有一个entry。回到我调查的时候,我和@ MS的某个人联系过,他们应该联系那些在UAC工作过的人,但没有真正想到的。我从该对话中获得的唯一适用信息就是这句话:

  

Windows中的一位朋友有一个模糊的回忆,这可能是一个   在信任对话框出现时减轻对文件篡改的担忧   显示