【问题标题】:List of UAC prompt triggers?UAC提示触发器列表?
【发布时间】:2014-08-24 23:31:56
【问题描述】:

我刚刚运行了一个多年前编写的旧程序,在 Vista 发布前几年。 Windows (7) 给了我 UAC 提示并要求允许我运行它。我很惊讶,因为它是一个相对简单的程序,它没有做太多花哨的事情,当然也没有什么需要提升的特权。然后我检查了目录,果然,Windows 在程序上覆盖了盾牌图标。

我快速扫描了代码,没有看到任何明显会触发 UAC 提示的内容。此外,该程序与我编写的其他几个程序共享一个框架,这些程序都没有 UAC 要求。有问题的程序以及其他不触发 UAC 提示的程序都存储在 (FAT32) 闪存驱动器上的同一目录中。

这个程序与其他几乎相同的程序的唯一真正独特之处在于它使用 ShellExecute 允许用户启动默认网络浏览器以打开选定的 URL,但我无法想象如果/为什么这实际上需要提升权限。

现在我正在尝试查找有关 Windows 使用哪种启发式方法来确定是否应使用 UAC 提示的某种信息。我知道旧的安装程序通常会触发提示,但它们通常称为setup.exeinstall.exe,而这有一个非常无害的名称(udb.exe)。我怀疑它正在检测某些函数调用或某些函数调用(当然,这意味着 Windows 资源管理器会读取并反汇编所有似乎值得怀疑的可执行文件)。

我以为会有这方面的一些信息,但我所做的研究只发现了一些场外讨论(上面或右侧的“类似问题”列表中没有提及),其中列出了一些原因,似乎都不适用:

  • 程序的特定请求(这是不可能的,因为它是在 UAC 存在之前编写的),
  • 缺少清单(它确实有,但无法解释为什么其他程序不触发它)
  • 文件名/路径的内部列表(此处不适用)
  • 来源(同样,这并不能说明其他程序还可以)
  • 访问受限文件/注册表项(此处也不适用)
  • 资源条目(同样,其他程序共享公共资源数据)
  • 其他与系统相关的活动(同样,不适用于该计划)

我最终找到了一些相关的问题,例如one that asked what I am,但最终得到了一个完全不同的结果,在这里没有帮助,或者另一个问similar, yet opposite question 同样没有帮助的结果。不幸的是,我发现的best question 是关于安装程序/更新程序的(当然,这里不适用),也没有任何帮助,因为答案与我在其他网站上找到并在上面列出的旧信息相同。

是否有人知道 UAC 触发器列表或其他方式来弄清楚为什么 Windows 会认为某些程序需要提升?是否有受限制的 API 函数列表之类的?

为了清楚起见,我试图找出为什么 Windows 会为 UAC 标记一个程序,而不是另一个类似的程序

【问题讨论】:

  • @HarryJohnston,你也误解了这个问题。就像我说的,我很困惑为什么我在 Vista 存在之前编写的一个程序不会触发 UAC,而一个类似的程序会触发。我想了解 为什么 Windows 这样做。如果有函数、文件、注册表项、字符串等的列表,那么我可以针对我的代码对其进行搜索,以试图找出 Windows 看到的导致它关闭的内容。至于清单,这与问题的重点无关。我并不想避免提示,我想知道为什么它会发生。就像我说的,我找不到原因。
  • UAC is based at user rights, not some wonderful triggers, such as files, strings, etc. @Xearinox,错误!众所周知,有某些因素可以触发 UAC。做一点研究。例如,我已经列出了一些可能导致它的东西,比如文件名是setup.exe。这与权限有什么关系‽
  • @HarryJohnston,首先,如果只是出于好奇,这不是题外话,它与 Windows API 函数及其效果有关,这肯定是这里的主题。其次,我想知道为什么,因为它不应该发生。我真的不明白为什么它这么难理解,为什么你对一个简单的问题有这么大的抵触情绪。此外,您是否看到我链接到的类似问题没有关闭为题外话?
  • Sounds like a big waste of time to me 那么幸好你不是网站管理员或仲裁者什么是或不是有效的时间使用。如果你认为我的问题太可怕了,它正在摧毁网站并带来世界末日,只需投票关闭,或标记它让模组决定。至于你所说的其他一切,除非你能提供某种理由认为你是从权威的立场说话的,否则听起来你只是在猜测触发器(你真的认为 Explorer 有启发式?)以及微软的已经或尚未发布或记录。
  • 我怀疑你会得到你想要的答案。 IMO,您最好根据具体情况分析问题可执行文件。

标签: windows triggers uac heuristics


【解决方案1】:

原始答案(2014 年 7 月 4 日)

搜索UAC heuristics 会产生此博客条目:Identification of Administrative Applications。在那个页面上:

操作系统决定应用程序看起来像安装程序或更新程序,并在用户运行程序时自动调用提升以使用管理权限/特权运行程序。此决定基于启发式。以下是一些启发式检测点,尽管此列表并不详尽:

  • 文件名检测 - 在文件名中查找“setup”、“update”、“install”等词
  • SxS Manifest 单词检测 - 在程序集名称属性程序的 SxS Manifest 中查找众所周知的值
  • 字符串表检测 - 在可执行文件的资源部分的字符串表中查找众所周知的值

因此,Xearinox 完全基于权限是不正确的。

您可能能够找出程序触发 UAC 提示的原因的一种方法是使用 Process Monitor 并检查权限错误。


更新(2020 年 7 月 29 日)

搜索会生成更新的文档页面:

How User Account Control Works

该页面底部有一个安装程序检测技术部分,其中包含以下信息(类似于上面的列表):

在创建32位进程之前,会检查以下属性以确定它是否是安装程序:

  • 文件名包含关键字,例如“安装”、“设置”或“更新”。
  • 版本控制资源字段包含以下关键字:供应商、公司名称、产品名称、文件描述、原始文件名、内部名称和导出名称。
  • 并行清单中的关键字嵌入在可执行文件中。
  • 特定 StringTable 条目中的关键字链接在可执行文件中。
  • 资源脚本数据中的关键属性链接在可执行文件中。
  • 可执行文件中有目标字节序列。

【讨论】:

  • 我同意 Xerinox 仅关于权限是不正确的,但我已经解决了该帖子中列表中的项目。另外,作者在那篇文章的开头承认它并不详尽。这正是我在这里发帖的原因,看看是否有人知道或能找到一份详尽的清单进行比较。但是,我会给 ProcMon 一个机会,看看是否有任何启发。
  • 我不认为 Process Monitor 会有所帮助,因为是否需要提升的决定发生在流程开始之前。
  • @HarryJohnston - 您可以禁用 UAC,然后以标准用户身份运行应用程序。然后进程监视器可能会提供一些线索。
  • 我不认为启发式方法旨在尝试确定应用程序是否真的要尝试使用特权;该技术存在(它用于防病毒产品),但我认为在这种情况下它会是矫枉过正,而且很可能适得其反。 (请参阅我关于该问题的最新 cmets。)当然,我可能是错的。
  • 启动可执行文件时使用启发式方法。我认为其他细节(博客作者没有列举的列表的其余部分)应该被视为可能随时更改的实现细节。
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 2014-09-17
  • 2012-11-24
  • 2010-10-29
相关资源
最近更新 更多