有什么能自动通过 HTTPS 连接从权威来源获取当前准确时间转为 NTP 协议的开源服务端吗?或者程序在没有 UAC 权限的情况有办法修改 Windows 时间吗?

2022-03-21 01:01:05 +08:00
 rv54ntjwfm3ug8

今天发现全部网站的两步验证都过不了,检测后发现防火墙 DROP 了全部 UDP 外网出站请求(内网不影响,我无法操作这个防火墙)导致 Windows 时间无法同步,电脑时间已经偏差 2 分钟了,于是自己花 3 分钟时间糊(上 StackOverflow 抄了两段代码拼起来)了一个通过 HTTPS 获取网络时间来更新的程序,发现没有 UAC 权限无法更新 Windows 时间。试了下在 UI 手动改系统时间不需要 UAC 权限呀。如果为此把它做成服务 /计划任务(开启 UAC 的情况下要求 UAC 的程序不能作为普通自启项)感觉攻击面增加了。程序在没有 UAC 权限的情况有办法修改 Windows 时间吗?

1935 次点击
所在节点    程序员
18 条回复
cz5424
2022-03-21 01:19:24 +08:00
人工修改不需要 uac 的话,模拟鼠标就可以了
i0error
2022-03-21 01:27:05 +08:00
但是模拟鼠标会不会需要 uac 。。。
rv54ntjwfm3ug8
2022-03-21 01:28:46 +08:00
@cz5424 那就做不到无感同步了
ysc3839
2022-03-21 02:13:38 +08:00
> 在 UI 手动改系统时间不需要 UAC 权限

是需要的,这是 UAC 没有开到最高档,白名单直接授权了,在这种情况下有一大堆方法可以提权,做成服务不会增加攻击面。
另外根据微软员工在博客里的说法,UAC 不是安全特性。
https://devblogs.microsoft.com/oldnewthing/20160816-00/?p=94105
https://web.archive.org/web/20190315174844/https://devblogs.microsoft.com/oldnewthing/20160816-00/?p=94105
https://web.archive.org/web/20111216020913/http://channel9.msdn.com/Forums/Coffeehouse/473037-UAC-controversy-the-last-episode/773c9d79f8df4fa8bc489deb00e05c3d
mingl0280
2022-03-21 04:03:37 +08:00
你可以在内网开个虚拟机,装啥系统随你……然后把内网的时间服务器指定为这台虚拟机。你的虚拟机就随便怎么草 https 服务了吧……
Tabjy
2022-03-21 05:00:37 +08:00
@mingl0280 思路不错 但是在本地跑一个后端是 HTTP 同步的 NTP 服务器貌似更省事
msg7086
2022-03-21 06:04:39 +08:00
https://github.com/twekkel/htpdate 你是重写了这个轮子吗。
yin1999
2022-03-21 06:41:04 +08:00
试试内网网关是否自带 NTP 服务器,如果有且时间相对正确的话,可以用那个
datocp
2022-03-21 06:41:27 +08:00
用 openwrt 网关就没这些事了。
直接 dnsmasq 指定 time.windows.com 为网关 ip 。网关做为 ntp 服务器。
Services.msc 不知道哪个服务用.cmd 重新启动一下,也有同步时间的效果,适合那些主板电池没电的电脑。
其它应该有个 net time 命令,通过其它电脑进行同步。
Tink
2022-03-21 08:50:15 +08:00
我觉得你有这功夫,不如在本地起一个 ntp 服务
rv54ntjwfm3ug8
2022-03-21 12:04:33 +08:00
我的想法就是这个,帖子标题第一句就写了,问题是有没有现成的轮子?不想重复造。
@mingl0280
@Tabjy
@Tink
aru
2022-03-21 12:41:45 +08:00
@theklf4
ntp + htpdate 就可以了
3dwelcome
2022-03-21 12:48:12 +08:00
就是发一个 NTP 协议的 UDP 包,给 windows 。

让 windows 能知道当前的时间,算是很容易的一件事情吧。

平均也就 30 行代码,估计大家都懒得造轮子了。
3dwelcome
2022-03-21 12:52:34 +08:00
不对,我发现添加自定义 time ntp 服务器,还是需要先申请 UAC 权限。

而楼主的最大问题,就是没有 UAC 权限。那直接进入死循环了。

干脆用代码申请提权吧,修改本地时间又不是见不得人的事情,要求 UAC 权限一点不过分。
ragnaroks
2022-03-21 13:37:03 +08:00
windows 上自用的话,用 dotnet 起个 worker 模板,写完了直接安装到服务里面。

这玩意我以前也搞过,找个你认为准确的 http 目标,发一个 head 请求,响应里面就有 GMT 时间,除了被 httpclient 坑了一道以外前后不超过 10 分钟撸完
ragnaroks
2022-03-21 13:39:27 +08:00
补充:应用程序如果以 LocalSystem 用户运行是不需要经过 UAC 允许的
mmdsun
2022-03-21 20:13:59 +08:00
用计划任务启动就不需要 UAC 了,微软留的。貌似也不打算修复了
mingl0280
2022-03-23 07:36:50 +08:00
@theklf4 啥方案都不用,WinServer 自带……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841734

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX