2011-09-19 104 views
0

认为这是注册表我的目标重点:获取注册表项的十六进制值

[HKEY_CURRENT_USER\System\Majid\0] 
"GUID"=hex:60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00 

,你可以看到GUID有一个十六进制值,我想讲一个VB脚本去这个键并将其十六进制数据存储到变量中。

例如,如果目标变量是“目标”,那么它的值应该是“60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00 “

任何帮助,非常感谢

回答

2

这可能是因为你还没有回答的原因是你的问题的前提是,如果不是有缺陷的误导。这个问题似乎暗示你在询问一个十六进制数字,但实际上你在问二进制数据。从注册表导出二进制值时,生成的.reg文件按照您的示例对十六进制值进行编码。您可能会也可能不会意识到这一点,但它可能是解决您的问题的绊脚石。

现在回答“我如何将二进制值转换为十六进制字符串表示形式?”

以下代码为我完成了这项工作。我只是偶尔使用vbscript,所以请原谅这种sl iness。

Dim objRegistry, target, output 
Set objRegistry = CreateObject("Wscript.shell") 
target = objRegistry.RegRead("HKCU\System\Majid\0\GUID") 
output = "" 
for k = LBound(target,1) To UBound(target,1) 
    output = output & hex(target(k)) & "," 
next 
WScript.echo output 

这是否适合您?

+0

嗨jqcAngel,是的,它的作品,感谢您的帮助。做得好的人。但是我有一个很小的问题,认为十六进制数据是“60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00”,这个脚本会在结尾处放上一个“,”,然后在最后00后有一个“,”。如何解决它?还有什么方法可以显示小写字母而不是大写字母? – Nofuzy

+0

嗨jqcAngel,另一个小问题,你可以在我的例子中看到,两个最新的十六进制值是两个零“00”,但你的脚本只显示一个零,如下所示:53,54,0,0,。你能修好吗? – Nofuzy

+1

为什么你使用VBScript如果你不舒服调整我的例子来实现你的目标? 将下面的在该文件的顶部: '功能PadDigits(N,totalDigits) PadDigits =右(字符串(totalDigits, “0”)和N,totalDigits) 端功能' 然后改变输出分配行到: 输出=输出&paddigits(0,十六进制(目标(k)))' – jqcAngel

0

今天写了这些。我仍然需要找出代码中“,\”的位置,但是这个会取REG_MULTI_SZ值并将其转换为正确的十六进制结果,如.reg文件所示。

'##### READ A REG_MULTI_SZ VALUE CONVERT TO HEX ##### 

strComputer = "." 

Dim fso 
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 

Dim oShell 
Set oShell = WScript.CreateObject("Wscript.Shell") 

Const HKEY_LOCAL_MACHINE = &H80000002 

strComputer = "." 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
    strComputer & "\root\default:StdRegProv") 


regHive = "HKLM" 
regKey = "Software\template\templateL2" 
regValueName = "SAMPLE-Multi_String" 
regPath = regHive & "\" & regKey & "\" & regValueName 

regValue = oShell.RegRead(regPath) 

res = "" 
prefix = "hex(7):" 
For Each item In regValue 
data = data & item & vbcrlf 
     For i=1 To Len(item) 
      r = HexIt(Mid(item,i,1)) 
      res = res & r 
     Next 
     res = res & "00,00," 'NEW LINE/ENTRY 
    Next 
     res = res & "00,00" 'FINAL COMPLETION 



'CONVERT EACH CHARACTER TO ASCII THEN TO HEX, ADD ",00," BETWEEN EACH VALUE 
Function HexIt(data) 
    a = Asc(data) 
    h = Hex(a) 
    HexIt = h & ",00," 
End Function 


WScript.Echo "ACTUAL DATA IN GUI : " & vbCrLf & data & vbCrLf 
WScript.Echo "HEX REPRESENTATION : " & vbCrLf & res & vbCrLf 

WScript.Echo "REG FILE VALUE  : " & vbCrLf & prefix & res & vbCrLf 
0

这是一个DWORD

'##### READ A DWORD VALUE CONVERT TO HEX ##### 

strComputer = "." 

Dim fso 
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 

Dim oShell 
Set oShell = WScript.CreateObject("Wscript.Shell") 

strComputer = "." 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
    strComputer & "\root\default:StdRegProv") 

regHive = "HKLM" 
regKey = "Software\template\templateL2" 
regValueName = "SAMPLE-Dword" 
regPath = regHive & "\" & regKey & "\" & regValueName 

regValue = oShell.RegRead(regPath) 'SPECIFY YOUR HIVE\KEY\VALUE HERE 
res = "" 
If Len(regvalue) Mod 2 = 0 Then 
    res = "0x" 
    leading0 = "" 
Else 
    res = "0x0" 
    leading0 = "0" 
End If 

WScript.Echo "INPUT DATA IN GUI : " & Hex(regValue) 
WScript.Echo "HEX REPRESENTATION: " & res & Hex(regvalue) 
WScript.Echo "REG FILE VALUE : " & "dword:" & leading0 & Hex(regvalue) 
0

一为REG_EXPAND_SZ

'############# READ REG_EXPAND_SZ ########## 
strComputer = "." 

Dim fso 
Set fso = WScript.CreateObject("Scripting.Filesystemobject") 

Dim oShell 
Set oShell = WScript.CreateObject("Wscript.Shell") 

strComputer = "." 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
    strComputer & "\root\default:StdRegProv") 


regHive = "HKLM" 
regKey = "Software\template\templateL2" 
regValueName = "Expandable_String" 
regPath = regHive & "\" & regKey & "\" & regValueName 

regValue = oShell.RegRead(regPath) 
res = "" 
prefix = "hex(2):" 

     For i=1 To Len(regValue) 
      r = HexIt(Mid(regValue,i,1)) 
      res = res & r 
     Next 
     res = res & "00,00" 'NEW LINE/ENTRY 



WScript.Echo "INPUT DATA IN GUI : " & regValue 
WScript.Echo "HEX REPRESENTATION: " & res 
WScript.Echo "REG FILE VALUE : " & prefix & res 


'CONVERT EACH CHARACTER TO ASCII THEN TO HEX, ADD ",00," BETWEEN EACH VALUE 
Function HexIt(data) 
    a = Asc(data) 
    h = Hex(a) 
    HexIt = h & ",00," 
End Function