Windows 补丁 (KB) 安装时间修改指南

本指南说明了如何通过修改注册表,来伪造或更改特定 Windows 更新(KB 补丁)的安装时间。此方法基于对 Windows CBS (Component Based Servicing) 机制的分析。


1. 原理背景

Windows 操作系统(以及依赖读取注册表的大部分补丁扫描工具,如 LeakRepair 项目)会将补丁的安装信息存储在注册表的 CBS\Packages 路径下。

每个补丁在此路径下会以 Package_..._for_KBXXXXXX... 的形式存在一个或多个项(Key)。
记录安装时间的核心键值对(Values)有两个:

  • InstallTimeHigh (REG_DWORD)
  • InstallTimeLow (REG_DWORD)

这两个值组合成了一个 64 位的 FILETIME,代表自 1601 年 1 月 1 日以来的 100 纳秒间隔数。

多项覆盖规则:如果同一个 KB 号有多个 Package 项(例如 Package_1...Package_2...),由于程序遍历注册表时的顺序是默认枚举顺序,后面的项会覆盖前面项读取到的时间。为了确保修改生效,建议将该 KB 号对应的所有 Package 项的时间全部统一修改。


2. 修改步骤

第一步:计算目标时间对应的注册表值

由于注册表使用的是特殊的 64 位 FILETIME,且被拆分成了高位和低位,手动计算非常困难。
请使用下方提供的 Python 脚本,将您期望的人类可读时间(如 2026-07-24 15:00:00)转换出要填入注册表的值。

第二步:定位注册表路径

  1. 按下 Win + R 键,输入 regedit,回车打开“注册表编辑器”。
  2. 导航至以下路径:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages
  3. 使用 Ctrl + F 快捷键,在 Packages 目录下搜索你要修改的 KB 编号(例如 KB5005537)。
  4. 你会找到一个或多个形如 Package_X_for_KB5005537~... 的子项。

第三步:修改键值

针对搜索到的每一个相关的 Package 项,执行以下操作:

  1. 在右侧窗口找到 InstallTimeHighInstallTimeLow(如果没有则可以手动新建 DWORD (32位) 值)。
  2. 双击打开,将基数选择为 十六进制
  3. 填入 Python 脚本计算出的对应数值(无需带 0x 前缀)。
  4. 确认保存。修改立即生效,下次扫描程序时就会读取到你设定的时间。

3. 时间计算辅助脚本 (Python)

将以下代码保存为 calc_kb_time.py 并运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import datetime

def get_registry_values(target_time_str):
# 将输入的字符串解析为 datetime 对象(默认使用本地时区)
dt = datetime.datetime.strptime(target_time_str, "%Y-%m-%d %H:%M:%S")

# 转换为 Unix 时间戳 (自 1970-01-01 以来的秒数)
unix_timestamp = int(dt.timestamp())

# 1601-01-01 到 1970-01-01 之间的 100 纳秒间隔差值
adjust = 116444736000000000

# 转换为 Windows 的 FILETIME
filetime = (unix_timestamp * 10000000) + adjust

# 拆分为高 32 位和低 32 位
high = (filetime >> 32) & 0xFFFFFFFF
low = filetime & 0xFFFFFFFF

return high, low

if __name__ == "__main__":
print("=== Windows KB 安装时间生成器 ===")
time_str = input("请输入期望的安装时间 (格式: YYYY-MM-DD HH:MM:SS) > ")

try:
high, low = get_registry_values(time_str)
print("\n[请将以下数值填入注册表(十六进制)]")
print(f"InstallTimeHigh : {high:x} (十进制: {high})")
print(f"InstallTimeLow : {low:x} (十进制: {low})")
print("---------------------------------")
print("注意: 填入注册表编辑器时,选择【十六进制】,不需要输入 0x 前缀。")
except ValueError:
print("【错误】时间格式不正确,请确保严格使用 YYYY-MM-DD HH:MM:SS 格式。")

运行示例

1
2
3
4
5
6
7
8
=== Windows KB 安装时间生成器 ===
请输入期望的安装时间 (格式: YYYY-MM-DD HH:MM:SS) > 2026-07-24 15:47:48

[请将以下数值填入注册表(十六进制)]
InstallTimeHigh : 1dd1b40 (十进制: 31267648)
InstallTimeLow : b8bf0a18 (十进制: 3099527704)
---------------------------------
注意: 填入注册表编辑器时,选择【十六进制】,不需要输入 0x 前缀。