vista下开机启动 简单绕过UAC的方法(自己使用runas参数重新启动自己,有点意思)
背景
vista下,如果不开启UAC,那就没有我下面要说的问题了,呵呵。下面说的都是在vista开启UAC的前提下说的,win7也适用。
在vista下,系统开启了UAC,如果你的软件通过manifest进行了提权(提升到管理员权限),那么exe上面会打上一个“小盾”的图标,这种程序启动的时候,会激活UAC保护机制,弹一个全局对话框出来询问用户是否允许启动,这就是微软标榜的灰常灰常的安全,到底安全不安全,先不讨论了,呵呵!现在一切都很和谐,没有问题,多点一下就多点下呗,但是如果你的程序是一个开机启动程序,而且通过manifest提升到了管理员权限,开机启动的时候,问题就来了,会直接被Windows Defender拦截下来不予启动,够邪恶吧,不幸的是QQ医生也遇到了这个问题,造成vista开机启动后QQ医生的实时保护程序起不来。不过360的保护程序貌似没有这个问题。那就研究下360吧。
解决方案
360的托盘程序360tray.exe没有通过manifest提权,因为它上面没有小盾啊(这个秘密我一般不告诉别人),但是通过ProcessExplorerNT查看360tray的权限,发现它有管理员权限,说明它是动态提权的,那可以猜测360tray.exe在内部把自己重新启动了一次,用OD把360tray跑起来,fc居然被保护了,调试不了,把360tray.exe拷贝到桌面,再调试,嘿嘿,顺利运行,下了几个API断点,主要是CreateProcessA,CreateProcessW,ShellExecuteA,ShellExecuteW,ShellExecuteExA,ShellExecuteExW……反正就是起进程的几个API都bp下来,在UAC开启的情况下,最终会在某个ShellExecuteExW下断下来,此时观察ShellExecuteExW的参数(它的参数是一个结构体指针,此处是将指针ESP+20放入了ECX中,而ESP+20处mov了0x3c进去,也就是SHELLEXECUTEINFOW的大小,和我们平时调用不同是,lpVerb传入了一个字符串"runas",很诡异),如下图所示:

答案基本明了了,在Windows Vista里面,ShellExecuteExW lpVerb的参数可以传入一个runas命令,使得系统调用 ShellExecuteEx的时候,会将目标文件强制完全admin模式启动,即使目标文件的manifest没有申明需要完全admin权限。 效果和在目标程序上右键单击,然后选择 run as administrator 菜单运行效果一样。
事实胜于雄辩,马上写了个程序测试了一下,果然……
- // 判断命令行
- if (0 == ::lstrcmp(AfxGetApp()->m_lpCmdLine, TEXT("-uac")))
- {
- TCHAR szPath[MAX_PATH] = {0};
- ::GetModuleFileName(NULL, szPath, MAX_PATH);
- SHELLEXECUTEINFO sei = {0};
- sei.cbSize = sizeof(SHELLEXECUTEINFOW);
- sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
- sei.lpFile = szPath;
- sei.lpVerb = TEXT("runas");
- sei.lpDirectory = NULL;
- ShellExecuteEx(&sei);
- return FALSE;
- }
看来我们只要在vista下实现一个一般权限应用程序,然后在启动时,内部根据参数判断用runas传入ShellExecuteEx来重新启动自己,此时会弹一个UAC的对话框出来,但是总比被直接拦截了起不来要好。内部可以判断需要提权的时候才提权(或者简单点不判断是不是需要提权,只判断系统,vista以其以上版本系统下直接用runas启动也行)。360下有个判断uac是否开启的函数,还没有时间跟进去,具体原理还不明,有时间再跟下。
http://blog.csdn.net/magictong/article/details/4804862
vista下开机启动 简单绕过UAC的方法(自己使用runas参数重新启动自己,有点意思)的更多相关文章
- (转)CentOS下开机启动查看管理命令:chkconfig用法
CentOS下开机启动查看管理命令:chkconfig用法 CentOS下开机启动查看管理的命令是:chkconfig 1. 开机启动列表查看: chkconfig --list 说明 ...
- centos 6 与 centos 7 服务开机启动、关闭设置的方法
简单说明下 centos 6 与 centos 7 服务开机启动.关闭设置的方法: centos 6 :使用chkconfig命令即可. 我们以apache服务为例: #chkconfig --add ...
- linux自定义开机启动服务和chkconfig使用方法
linux自定义开机启动服务和chkconfig使用方法 1. 服务概述在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动 ...
- (转)linux自定义开机启动服务和chkconfig使用方法
原文:https://www.cnblogs.com/jimeper/archive/2013/03/12/2955687.html linux自定义开机启动服务和chkconfig使用方法 1. 服 ...
- Linux 添加开机启动项的三种方法
linux 添加开机启动项的三种方法. (1)编辑文件 /etc/rc.local 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh## This scri ...
- linux下tomcat开机启动简单配置
1.个人标记 caicongyang http://blog.csdn.net/caicongyang 2.正文 在linux文件/etc/rc.d/rc.local的末尾加入例如以下行就可以: ex ...
- linux系统下开机启动流程
在了解开机启动流程之前,还是得先了解一些磁盘的基本知识.磁盘主要由盘片,机械手臂,磁头,主轴马达构成.盘片就是存储数据的物理单位了.然后盘片上我们可以分成扇区(sector)和柱面(cylinder) ...
- linux下开机启动443程序无法访问解决方法
前言:最近,有一个项目需要用到开机自动启动程序,所以就研究了一下,环境为redhat8,程序是node,使用forever来进行node程序的持久化,程序使用的是443端口,开启的是https 1.把 ...
- Mac下开机启动rc.common不生效的问题
经过测试在10.12.6下/etc/rc.common不生效,原因是已经被launchd守护进程所取代,虽然保留着这个文件,但是基本是不起作用的. 如果要开机启动请直接使用launchd进行操作. 同 ...
随机推荐
- Druid 专题
数据源配置: #datasource #Introductions: https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7 ...
- 【20.69%】【codeforces 732E】Sockets
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 使用PLCcom.dll操作西门子系列PLC
工作中经常需要了解plcdb块的数据!由于工作使用OPC类库进行通讯,开发,配置,使用都比较麻烦, 特在网上找到一个名为PLCcom.dll的类库,可以实现PLC读写操作,下面演示C#如何使用PLCc ...
- Android, iOS, 各种软件汇总
Android: 长截图:软件叫PPIICC的可以截图之后拼接:有些手机自带截图,比如小米,华为,三星等. 视频:全格式的Kodi XBMC, 一般的:moboplayer, VLC, F蔷:***, ...
- 解决Eclipse代码提示消失的方法
注意:首先要做的是windows->preferences->java->Editor->"ContentAssist", auto-activetion中 ...
- Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果
大家好,今天给大家带来一个仿360手机卫士悬浮窗效果的教程,在开始之前请允许我说几句不相干的废话. 不知不觉我发现自己接触Android已有近三个年头了,期间各种的成长少不了各位高手的帮助,总是有很多 ...
- C# VS 2010创建、安装、调试 windows服务(windows service)
在一个应用程序中创建多个 windows 服务的方法和 1083 的解决办法 错误解决方案 ------------------------------------------------------ ...
- WPF中使用TranslateTransform3D修改CAD的3D旋转中心
原文:WPF中使用TranslateTransform3D修改CAD的3D旋转中心 前面一篇文章讲述了2D旋转功能的实现,文章提到了修改3D旋转中心,这一节主要总结一下具体的修改3D旋转 ...
- [Songqw.Net 基础]WPF实现简单的插件化开发
原文:[Songqw.Net 基础]WPF实现简单的插件化开发 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei1988/ar ...
- 专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)
url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的Ja ...