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

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

2020-11-26 12:46
4036

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

先说需求:

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

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

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

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

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

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


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


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

如:5d1K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3k6W2L8X3I4G2k6#2)9J5k6h3y4G2L8g2)9J5c8Y4m8G2M7%4c8Q4x3V1j5$3x3q4)9J5k6h3S2@1L8h3H3`.

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

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

如 :a19K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7K9h3&6Y4P5h3q4F1i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3x3U0V1#2y4o6x3H3k6U0p5&6k6U0b7^5j5X3t1H3j5K6N6W2x3o6l9#2x3o6p5&6i4K6u0W2K9s2c8E0L8l9`.`.


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


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

望赐代码,谢谢


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 451
活跃值: (1375)
能力值: ( 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
活跃值: (524)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Task Scheduler、WdcRunTaskAsInteractiveUser、IShellDispatch2::ShellExecute
2020-11-26 14:01
0
雪    币: 926
活跃值: (2215)
能力值: ( 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
雪    币: 207
活跃值: (198)
能力值: ( 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
这个文章讲了:注意用户账户的管理员权限会创建进程失败
cabK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3M7$3S2S2k6h3I4D9j5h3&6U0k6h3I4G2N6q4)9J5c8Y4m8Q4x3V1j5#2y4U0j5@1z5e0l9$3i4K6u0W2K9s2c8E0L8l9`.`.
我正是这种情况,是以用户账户模式下运行的管理员权限,会失败。
而且这个权限我没有能力修改吧?
你说的这个要额外权限要怎么操作,我理解不了。因为程序启动模式就是安装包带起的,有什么权限我貌似管不了。
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
雪    币: 207
活跃值: (198)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
lsaaddaccountrights可以添加权限,普通用户都可以的。我以前做过一个session0下面启动ui程序的代码,就是先添加这两个权限,然后createprocessasuser。
或者你可以试一下开启SE_TCB_NAME权限,然后通过addaccountright把localsystem的权限加进去再看看,这种方法我没有测试,因为前一种方法我成功的。
2020-11-26 19:22
0
雪    币: 1462
活跃值: (524)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
把39换成0试试。这个内部实现也是通过task scheduler实现。参考process hacker里runas.c
2020-11-27 09:46
0
雪    币: 926
活跃值: (2215)
能力值: ( 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 这个成功了,

需要的人可参考:

fb4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3q4U0K9$3!0$3k6i4u0X3L8r3!0%4i4K6u0W2j5$3!0E0i4K6u0r3M7i4g2W2M7%4c8A6L8$3&6K6i4K6u0r3x3U0b7@1z5o6V1&6x3K6k6Q4x3V1k6#2M7$3W2F1k6#2)9J5k6r3W2K6K9r3g2D9L8r3c8A6M7%4m8S2N6r3y4Z5x3W2)9J5k6s2y4Z5k6h3I4D9k6i4S2W2j5%4g2@1k6g2)9J5k6r3k6G2M7W2)9J5k6r3I4S2N6h3&6U0K9r3W2F1k6#2)9J5k6r3q4Q4x3X3c8F1L8$3&6Q4x3X3c8W2L8r3g2$3j5i4c8W2k6q4)9J5k6s2m8J5L8$3y4W2M7%4y4Q4x3X3c8X3M7X3!0E0i4K6u0V1j5h3^5`.

好用,谢谢

最后于 2020-11-27 16:29 被sunbinjin编辑 ,原因: 排版更好看
2020-11-27 16:28
0
雪    币: 8034
活跃值: (3615)
能力值: ( 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
雪    币: 8034
活跃值: (3615)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回