首页
社区
课程
招聘
[求助]托盘程序是管理员权限的情况下,如何以当前用户权限运行另一个程序?
发表于: 2020-11-26 12:46 3847

[求助]托盘程序是管理员权限的情况下,如何以当前用户权限运行另一个程序?

2020-11-26 12:46
3847

这里高手如云,求助求助:

先说需求:

  1. 假设用户当前不是Administrator,而是某个User

  2. 我的托盘程序是能给客户静默安装我们自己的软件的新版本安装包。要想不被微软UAC阻塞完成自动安装,那托盘程序一定就得是管理员权限

  3. 我通过安装包启动托盘程序,这样托盘就满足了权限问题。

  4. 但用户使用我们的业务软件时,不能用管理员权限,因为windows有问题,会导致无法访问User自己映射的网络驱动器或其它一些问题。

  5. 此时我就一定得让我们的程序以非管理员启动。

  6. 那如何实现管理员权限的托盘程序,以当前登录的User权限启动业务程序呢?


网上类似的需求较多,但感觉问题也都一样:


网上最多的就是 获取Explorer.exe的权限后,CreateProcessAsUser来工作的

如:http://www.fenlog.com/post/60.html

但是,此代码现在在win10的User权限下根本执行不成功,可能很多人没发现。

问题在:win10现在不允许这样做

如 :https://jingyan.baidu.com/article/295430f19f48bb0c7e005019.html


降权使用是一个很正常且不破坏安全性的需求,不知道为何MS没考虑支持好。


请问下大神还有能真正跑通的方案吗?

望赐代码,谢谢


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 441
活跃值: (1020)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2

CreateProcessAsUser

CreateProcessWithLogonW 

最后于 2020-11-26 13:25 被编程小白编辑 ,原因:
2020-11-26 13:24
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
我现在用的就是CreateProcessAsUser呀,CreateProcessWithLogonW 这个要用户名密码的肯定不行,我们不能知道用户的密码的。
2020-11-26 13:33
0
雪    币: 1462
活跃值: (329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Task Scheduler、WdcRunTaskAsInteractiveUser、IShellDispatch2::ShellExecute
2020-11-26 14:01
0
雪    币: 918
活跃值: (1875)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
CreateProcessWithTokenW
2020-11-26 15:46
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
hwangbae Task Scheduler、WdcRunTaskAsInteractiveUser、IShellDispatch2::ShellExecute



先行谢过WdcRunTaskAsInteractiveUser一起就10行代码,宣告失败 

2020-11-26 16:26
0
雪    币: 199
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
createprocessasuser需要额外的两个权限,SE_INCREASE_QUOTA_NAME和SE_ASSIGNPRIMARYTOKEN_NAME,除此之外可能还需要localsystem权限,你试试看
2020-11-26 17:17
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
这个文章讲了:注意用户账户的管理员权限会创建进程失败
https://www.cnblogs.com/shaellancelot/p/5664906.html
我正是这种情况,是以用户账户模式下运行的管理员权限,会失败。
而且这个权限我没有能力修改吧?
你说的这个要额外权限要怎么操作,我理解不了。因为程序启动模式就是安装包带起的,有什么权限我貌似管不了。
2020-11-26 17:32
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
wuxiwudi CreateProcessWithTokenW
谢谢,此方法测试通过,在用户账户下,要管理员权限的exe,能启动计算器,在任务管理器显示是非特权。
唯一有个缺点,枚举explorer的时候,如果有2个explorer,1个是管理员,1个是非管理员,我不知道怎么枚举出哪个explorer是当前用户的。
2020-11-26 17:35
0
雪    币: 199
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
lsaaddaccountrights可以添加权限,普通用户都可以的。我以前做过一个session0下面启动ui程序的代码,就是先添加这两个权限,然后createprocessasuser。
或者你可以试一下开启SE_TCB_NAME权限,然后通过addaccountright把localsystem的权限加进去再看看,这种方法我没有测试,因为前一种方法我成功的。
2020-11-26 19:22
0
雪    币: 1462
活跃值: (329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
把39换成0试试。这个内部实现也是通过task scheduler实现。参考process hacker里runas.c
2020-11-27 09:46
0
雪    币: 918
活跃值: (1875)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
sunbinjin 谢谢,此方法测试通过,在用户账户下,要管理员权限的exe,能启动计算器,在任务管理器显示是非特权。 唯一有个缺点,枚举explorer的时候,如果有2个explorer,1个是管理员,1个是非管理员 ...
先查看token的权限再使用
GetTokenInformation
2020-11-27 14:38
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
hwangbae 把39换成0试试。这个内部实现也是通过task scheduler实现。参考process hacker里runas.c

刚也试过,0也是一样的错。


IShellDispatch2::ShellExecute 这个成功了,

需要的人可参考:

https://stackoverflow.com/questions/24489936/using-ishelldispatch2-shellexecute-for-launching-a-non-elevated-process-from-an

好用,谢谢

最后于 2020-11-27 16:29 被sunbinjin编辑 ,原因: 排版更好看
2020-11-27 16:28
0
雪    币: 7473
活跃值: (3065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
写个系统服务程序,再用CreateProcessAsUser启动个普通用户权限程序应该是可以的,去年写过。
2020-11-28 23:13
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
kxSatan 写个系统服务程序,再用CreateProcessAsUser启动个普通用户权限程序应该是可以的,去年写过。
你的代码具体是怎么写的?关键就是CreateProcessAsUser如何启动普通用户权限,会遇到哪些问题 :)
2020-11-30 10:24
0
雪    币: 7473
活跃值: (3065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
你F5一下Dynamic Web TWAIN里面的服务,看看送入的参数即可
PS:淦,半个月之前装中标麒麟aarch64不小心把我树莓派上的cgit和FAQ格式化了。
2020-11-30 12:34
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
kxSatan 你F5一下Dynamic Web TWAIN里面的服务,看看送入的参数即可 PS:淦,半个月之前装中标麒麟aarch64不小心把我树莓派上的cgit和FAQ格式化了。
就一篇文章:https://bbs.pediy.com/thread-176869.htm
里面没有任何和CreateProcessAsUser相关的业务呀
2020-12-1 09:49
0
游客
登录 | 注册 方可回帖
返回
//