查看: 4962|回复: 6
收起左侧

[技巧] EnableUIAccess:使普通权限运行的程序能和高权限运行的程序交互

[复制链接]
maz-1
发表于 2015-4-18 17:47:35 | 显示全部楼层 |阅读模式
本帖最后由 maz-1 于 2015-4-22 12:07 编辑

来源:www.autohotkey.com/board/topic/7 ... istrative-programs/

在开启了uac的系统上使用一些全局快捷工具(Ditto,Autohotkey等)的朋友可能都知道,如果这些工具是以普通权限启动的,那么快捷键将无法在以管理员权限启动的程序里生效,比如任务管理器
一个解决方法是用管理员权限运行这些工具,不过这样每次启动都要处理uac弹窗,而且如果从这些工具里启动了其他程序,新启动的程序也会获得管理员权限,会带来一些问题。
不过微软在引入UAC的同时给exe引入了一个新属性:UI Access(http://msdn.microsoft.com/en-us/library/bb756929.aspx),
允许普通权限运行的程序与高权限运行程序的GUI交互,这个属性生效需要满足两个条件:应用程序含有效的数字签名,应用程序位于program files目录或system32目录下。
本文介绍的工具作用就是给exe加上UI Access属性,然后用一个证书给exe签名
作者写这个工具的初衷是给编译后的ahk脚本或者autohotkey解释器使用的,不过给其他程序用也没问题。
使用方法很简单,直接启动程序EnableUIAccess.exe,程序会给系统安装一个名叫Autohotkey的证书,然后弹出对话框让你选择需要修改的exe文件,选择并确定后让你选择目标文件(可以选择直接覆盖源文件,程序会备份源文件)。然后目标就拥有了UI Access属性。
需要注意的是,签名后的程序应该放在program files或其子目录下才能生效。
程序处理后的效果,可以看到除了增加了签名,程序还增加了UI Access属性
1.jpg
2.jpg
脚本和编译好的文件:pan.baidu.com/s/1qB6WY
8905438
发表于 2015-4-21 15:02:08 | 显示全部楼层
好东西啊,居然没人回复,难道都转win8了?
不过问题是,如果exe本身已有数字签名,这玩意儿就说我不干了然后退出了。临时找了几个去除签名的工具,去除后再使用也不行,初步猜测是签名没清理干净的原因。
暂时,没有做更多测试了,不知是否真的有用。
在我用的软件里面,就strokeit不需要高权限也能正常使用,每次弹个UAC也挺烦的,这次拿它开刀结果失败了,Orz
maz-1
 楼主| 发表于 2015-4-21 19:45:48 | 显示全部楼层
8905438 发表于 2015-4-21 15:02
好东西啊,居然没人回复,难道都转win8了?
不过问题是,如果exe本身已有数字签名,这玩意儿就说我不干了 ...

删证书我用这个
delcert.zip (15.44 KB, 下载次数: 134)
maz-1
 楼主| 发表于 2015-4-21 20:08:06 | 显示全部楼层
本帖最后由 maz-1 于 2015-4-21 20:14 编辑
8905438 发表于 2015-4-21 15:02
好东西啊,居然没人回复,难道都转win8了?
不过问题是,如果exe本身已有数字签名,这玩意儿就说我不干了 ...


StrokeIt没法成功修改的原因是exe根本没有内嵌manifest
所以你需要先删除证书,然后给exe加入manifest(需要mt.exe,这个工具来自windows sdk)
命令:mt.exe -nologo -manifest "StrokeIt.exe.manifest" -outputresource:"StrokeIt.exe;#1"
manifest文件格式大致如下:
[mw_shl_code=xml,true]    <?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:v3="urn:schemas-microsoft-com:asm.v3">
  <assemblyIdentity version="0.9.7.0" name="StrokeIt" type="win32"/>
    <dependency>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
      </dependentAssembly>
    </dependency>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
  <v3:application>
    <v3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware></v3:windowsSettings>
  </v3:application>
    <v3:trustInfo><v3:security><v3:requestedPrivileges><v3:requestedExecutionLevel level="asInvoker" uiAccess="true"/>
  </v3:requestedPrivileges></v3:security></v3:trustInfo>
</assembly>
[/mw_shl_code]

不过姑且把修改好的版本放上来了,如果你需要的话。我自己测试是可以全局生效的。

strokeit.7z (11.73 KB, 下载次数: 143)
8905438
发表于 2015-4-22 10:37:18 | 显示全部楼层
maz-1 发表于 2015-4-21 20:08
StrokeIt没法成功修改的原因是exe根本没有内嵌manifest
所以你需要先删除证书,然后给exe加入manifest ...

非常感谢,测试成功!
之前还在担心证书是通用的会不会有安全隐患,下载你修改好的版本看了下签名发现提示不信任顿时大喜,屁颠屁颠的用你提供的工具清除了签名再重新签上,扔去program files目录测试了下完全OK!用procexp查看下进程,原来strokeit也变成高权限进程了,难怪能和管理员权限启动的程序交互。
之前一直奇怪为何wgestrues不弹UAC也是高权限,原来强制安装到program files还强制要求信任他私人的开发证书就是为了这个特性,之前邮件问过他他都不说。
另外,请问manifest文件的 publicKeyToken 和 supportedOS 字段的数值如何生成?看起来好像这两个字段改一改就可以给其他程序用的样子。兄台有现成的mt.exe可以分享下吗?sdk 400多M,好大。
autohotkey那个工具还是不大方便啊,猜想如果重装过系统,生成的证书就不一样了,这样签过的文件又要重新签。AHK学得渣,想起要改别人的代码头都大了好几圈,折中一点,用这个工具处理完再去掉签名用自己的证书签一下好像不错的样子。
maz-1
 楼主| 发表于 2015-4-22 12:06:34 | 显示全部楼层
本帖最后由 maz-1 于 2015-4-22 12:09 编辑
8905438 发表于 2015-4-22 10:37
非常感谢,测试成功!
之前还在担心证书是通用的会不会有安全隐患,下载你修改好的版本看了下签名发现提 ...


ui access并不是完全的高权限,程序有ui access属性仍然无法运行需要admin权限的程序

publicKeyToken好像和签名有关,不过示例里用的是windows系统文件的publicKeyToken,既然能用说明不用改吧
supportedOS是兼容的操作系统版本,四个值分别代表xp到win8的四个系统版本,这个也不用改
mt.exe我不知道能不能单独拿出来用,试试再说吧
mt.7z (315.27 KB, 下载次数: 110)
8905438
发表于 2015-4-22 15:24:02 | 显示全部楼层
maz-1 发表于 2015-4-22 12:06
ui access并不是完全的高权限,程序有ui access属性仍然无法运行需要admin权限的程序

publicKeyToke ...

非常感谢。
原来如此,ui access 还有这种限制,听起来不错。
mt.exe测试可用
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-28 11:44 , Processed in 0.150109 second(s), 19 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表