魔方,支持所有Windows系统的最好的优化软件
当前位置:首页 >> Vista应用 >> Vista开发

Vista开发高手:绕过UAC把软件进程运行为管理员模式


2008年9月9日 编辑:Smallfrogs[张康宗] 人气: 评论:15

Vista之家www.vista123.com):Vista开发高手:绕过UAC把软件进程运行为管理员模式

刚才Vista之家发了这篇文章:深入UAC:Vista运行程序跳出红黄绿灰四色提示框及破解,文章的最后提到了如何仿造安全程序进行欺骗UAC。下面我们具体的看看绕过UAC的机制。

Windows Vista里面,进程是分权限级别的。Windows会根据manifest内容、Windows Installer detection、兼容性数据库等方法判断一个进程是否需要一开始就运行在完整管理员模式(下面统称admin模式)下。

但是不是所有的程序一开始就需要运行在完整admin模式下的,例如任务管理器TaskMgr.EXE。

Windows Vista里面,启动任务管理器以后,默认只能显示当前账户相关的进程信息,只有当点击下面这个按钮并回应UAC提示以后才能显示所有用户的进程信息:



请注意上面这张图片,Show processes from all users 按钮前面有一个Windows 安全中心的图标。这个表示这个操作需要触发UAC。这个倒是没有什么特别的。问题的关键在于:TaskMgr是怎么触发UAC的?

我们知道,一个没有完全admin权限的进程是没法直接创建更高权限进程的,也就是说一般权限下的进程是没法直接创建完全Admin权限进程的。因此CreateProcess API函数肯定是不能使用的。如果使用CreateProcessAsUser函数,那么需要提供一个比较高的令牌才能完成,这个需要有额外的来源,而TaskMgr显然不具备这种能力。那TaskMgr是怎么完成这个神秘的动作呢?

上述问题让人思考了数个月,上网搜索也没有搜索到有价值的内容。直到昨天晚上才有空去调试一把,看看到底是怎么玩的。

首先用windbg attach到 taskmgr 进程上,然后把所有的进程创建相关函数全部设置了断点,然后点击Show processes from all users 按钮,结果ShellExecuteExW函数被断下了,难道ShellExecuteExW有什么特殊的地方吗?查阅最新的MSDN关于ShellExecuteExW的说明文档,什么介绍都没有。是断点有问题吗?

继续使用windbg单步调试,当程序执行到下图的时候,有一个看起来很关键的函数调用:



call SHELL32!ShellExecuteNormal (7656e6ce),看到这个名字我的第一个直觉是这个是真正的执行函数,前面还有很多操作仅仅是一些检查步骤。当执行完call SHELL32!ShellExecuteNormal (7656e6ce)指令以后,UAC框弹出了。看到UAC框的弹出,我已经可以确认任务管理器是使用ShellExecuteExW某个在MSDN上面没有公开的操作触发UAC的。根据前面的描述,call SHELL32!ShellExecuteNormal (7656e6ce)指令是一个关键指令,因此需要检查call SHELL32!ShellExecuteNormal (7656e6ce)指令之前的参数操作。

呵呵,这回我盯上了push esi指令了。



windbg里面查看esi对应的内存内容以后发现可能是一个结构体,由于是ShellExecuteExW函数里面执行的,因此我猜测这个结构体是 SHELLEXECUTEINFO,对照SHELLEXECUTEINFO结构体的定义,果然和esi内容相符。最后一步就是检查结构体里面各个参数的情况了。当我发现LPCTSTR lpVerb指向的参数内容(db 0xe5d93c命令)是“runas”这个字符串的时候,Taskmgr 将自身提示为完全admin权限的方法也就揭晓了:

在Windows Vista里面,ShellExecuteExW lpVerb的参数可以传入runas命令,使得系统调用 ShellExecuteExW 的时候,会强制将目标文件以完全admin模式启动,即使目标文件的manifest没有申明需要完全admin权限。

效果等同于在目标程序上右键点击,然后选择 run as administrator 菜单内容。

大家感兴趣,可以测试一下。

Vista之家www.vista123.com),爱上网,爱上Vista123.com

      
Vista之家网友 (58.221.212.*) 于 2009-8-17 8:40:40 发表下列评论:   [删除]
大家不要争论是不是抄的,有本事大家都抄一个过来,毕竟可以学习一下
Vista之家网友 (221.217.115.*) 于 2009-2-16 20:15:40 发表下列评论:   [删除]
这个早就公开了!
Vista之家网友 (218.25.131.*) 于 2009-1-5 17:30:06 发表下列评论:   [删除]
好文章,受益匪浅
Vista之家网友 (61.186.178.*) 于 2008-12-29 16:55:32 发表下列评论:   [删除]
抄不抄管你什么事,你如果要看就看,看你就学点知识,不看就走开,哪个不是抄的,你从小学到大学一路都抄人家的呢,那书哪个是你编的呀,人家辛辛苦苦给你弄篇帖子,你还整个人家抄的,你寒心不
Vista之家网友 (207.46.92.*) 于 2008-9-25 15:04:03 发表下列评论:   [删除]
好文不顶还怀疑是抄来的,大家需要就学习,不需要就飘过,何必呢。顺便说很多外企都不用中文系统的
Vista之家网友 (122.138.186.*) 于 2008-9-18 8:16:16 发表下列评论:   [删除]
看了半天也没明白,好多都必须提示没用管理员登陆无权限.....郁闷!
Vista之家网友 (222.66.67.*) 于 2008-9-10 16:20:37 发表下列评论:   [删除]
我也有同样的问题。双网络。定义了批处理来修改route table。原来准备在windows的startup中来执行该批处理任务。但Vista的UAC拒绝了其中命令。
必须要用管理员账号来启动Dos命令行。其实我的当前登陆账号也是admin组的成员。但就是不行。流氓的vista。
Vista之家网友 (222.66.67.*) 于 2008-9-10 16:18:57 发表下列评论:   [删除]
我也有同样的问题。双网络。定义了批处理来修改route table。原来准备在windows的startup中来执行该批处理任务。但Vista的UAC拒绝了其中命令。
必须要用管理员账号来启动Dos命令行。其实我的当前登陆账号也是admin组的成员。但就是不行。流氓的vista。
Vista之家网友 (222.66.67.*) 于 2008-9-10 16:18:43 发表下列评论:   [删除]
我也有同样的问题。双网络。定义了批处理来修改route table。原来准备在windows的startup中来执行该批处理任务。但Vista的UAC拒绝了其中命令。
必须要用管理员账号来启动Dos命令行。其实我的当前登陆账号也是admin组的成员。但就是不行。流氓的vista。
Vista之家网友 (222.66.67.*) 于 2008-9-10 16:18:17 发表下列评论:   [删除]
我也有同样的问题。双网络。定义了批处理来修改route table。原来准备在windows的startup中来执行该批处理任务。但Vista的UAC拒绝了其中命令。
必须要用管理员账号来启动Dos命令行。其实我的当前登陆账号也是admin组的成员。但就是不行。流氓的vista。
发表评论(最新评论将在5分钟内出现
昵称:
内容:
(按Control+Enter直接提交)   点击一下,Vista问题有问必答
Vista优化大师
闪游 - 最快最强最安全的网络浏览器
windows7 优化大师
酷点,酷点桌面

热门文章
软媒旗下软件: 闪游浏览器 | 魔方 | Windows7优化大师 | Vista优化大师 | Vista一键还原 | 酷点-桌面软件 | 魔盒-装机必备
软媒旗下网站6655网址大全 | 网址之家 | 网址导航 | 搜下,就有了 | Windows7之家 | Vista之家 | 乐购网 | 软媒论坛 | 快下 | 购物家 | 很酷 | 9955.com | 比比看