如何在 .REG 文件中指定 REG_EXPAND_SZ 条目?

如何在 .REG 文件中指定 REG_EXPAND_SZ 条目?

我正在尝试使用批处理脚本和.reg文件来设置一些自定义服务。大多数键都已正确设置,但我需要DependOnService为某些服务设置键,这些服务通常是多字符串。是否可以从文件中设置此键.reg,还是需要手动输入?

答案1

REG_MULTI_SZ文件中的数据.reg必须以十六进制编码。如果内容永远不会改变,您可以在注册表中创建一个包含数据的虚拟项,然后将其导出,并根据需要进行调整。

如果确实发生了变化,使用 Windows 附带的程序来添加它可能会容易得多reg。为此,请reg按以下格式调用:

Reg Add <KEY> /v <NAME> /t REG_MULTI_SZ /d <DATA> /s <SEPERATOR>

分隔符开关是可选的。如果不使用,要写入的字符串应该用空字符 ( \0) 的转义序列分隔。例如,要添加一个名为Flairto 的项目,HKLM\SOFTWARE\WhizBang\Excite-O-Rama其中包含字符串foo, barbaz您需要运行:

Reg Add HKLM\SOFTWARE\WhizBang\Excite-O-Rama /v Flair /t REG_MULTI_SZ /d foo\0bar\0baz

要用逗号分隔数据,您可以运行:

Reg Add HKLM\SOFTWARE\WhizBang\Excite-O-Rama /v Flair /t REG_MULTI_SZ /d foo,bar,baz /s ,

有关详细信息,请参阅 Microsoft DocsReg命令。

答案2

  • dword:=DWORD
  • hex(2):= 可扩展字符串
  • hex(7):= 多字符串

ADWORD是 32 位无符号整数(十进制范围:0- 4294967295),在注册表中,aDWORD始终以 开头0x,后面跟着 8 位数字0x。这可以是十进制或十六进制格式;例如,1000可以写成0x000010000x000003e8

DWORDS只能使用数字0- 9。任何类型的字符串始终使用 ASCII,并且在 ACSII 中1000只能写为31,30,30,30。对于字符串数据类型,ASCII 在后台工作而您甚至不知道,因为计算机只理解 1 和 0。

对于 Expandable-String 和 Multi-String 数据类型,它们将您的条目保存为一系列十六进制格式的 ASCII 代码,以逗号和十六进制零分隔;因此 Expandable-String 将1000hex(2):31,00,30,00,30,00,30,00

让我们转换%PROGRAMFILES%成一个可扩展字符串:

  1. 使用ASCII 到十六进制转换工具%PROGRAMFILES%,在文本框中输入用户定义的输出分隔符: %,选择转换,它会给你:
    %25%50%52%4F%47%52%41%4D%46%49%4C%45%53%25
    
  2. 将该结果复制/粘贴到文本编辑器中:将第一个移到%末尾,查找/替换所有%,00,删除字符串末尾的逗号。您应该得到:
    25,00,50,00,52,00,4F,00,47,00,52,00,41,00,4D,00,46,00,49,00,4C,00,45,00,53,00,25,00
    
  3. 最后:
    hex(2):25,00,50,00,52,00,4F,00,47,00,52,00,41,00,4D,00,46,00,49,00,4C,00,45,00,53,00,25,00
    

本课包含对任何未加密的十六进制编码注册表项进行逆向工程所需的所有知识。

相关内容