18

在 Windows 8 中,用户选择为给定文档类型打开哪个应用程序似乎保留在

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<extension>\UserChoice

对于我机器上的 PDF,它包含:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice]
"Hash"="xh8KhPWlZL0="
"ProgId"="AcroExch.Document"

然而在另一台机器上,哈希是不同的。什么被散列了,有没有办法创建一个 .reg 文件,可以应用于另一台机器来设置这个首选项?

4

3 回答 3

17

有人对哈希进行了逆向工程,并编写了一个 CLI 工具来设置文件关联:

http://kolbi.cz/blog/?p=346

extension = “.txt”; the file extension
sid = “S-1-5-21-463486358-3398762107-1964875780-1001” ; the SID of the current user
progid = “txtfile”; the ProgId of the desired association
regdate = “01d3442a29887400”; timestamp of the UserChoice registry key
experience = “a microsoft secret string”; a static string (this is a dummy example, not the real string
hash = Base64(MicrosoftHash(MD5(toLower(extension, sid, progid, regdate, experience))))

并非所有细节都被披露,但可能足以对其余部分进行逆向工程。

于 2018-03-13T12:38:09.450 回答
16

微软在 Windows 8 中决定(可能出于安全原因),用户应该只能通过内置的 GUI 设置默认程序。即按照设计,您不应该能够在脚本中或以编程方式设置默认处理程序。

Hash 值用于证明 UserChoice ProgId 值是由用户设置的,而不是通过任何其他方式设置的。只要 Microsoft 将生成 Hash 的算法和使用 Hash 验证 ProgId 的机制保密,这就会起作用。

理论上你可以找出设置哈希的秘密(可能还有其他隐藏的操作系统设置),但你不能保证它的可靠性;例如,下一个 Windows 更新可能会破坏您的方法。您可能只需要适应变化,并使用 Microsoft 内置于操作系统的新方法。

于 2014-11-18T21:34:40.447 回答
0

顺便说一句,配置文件中的这些用户选择哈希在 sysprep 后变得无效,导致在 sysprep 后第一次登录期间所有那些“应用程序默认已重置”消息,以及 Microsoft-Windows-Shell-Core/AppDefaults 中的许多日志条目。

于 2020-01-09T21:58:00.963 回答