#Region " Reg2Bat "
' [ Reg2Bat Function ]
'
' // By Elektro H@cker
'
' Examples :
' MsgBox(Reg2Bat("C:\Registry.reg"))
Private Function Reg2Bat(ByVal Reg_File As String) As String
' Source Input
' Join he lines, delete the Regedit linebreaks characters: "\ ", and then split the lines.
Dim RegFile() As String = Split( _
String.
Join("@@@Reg2Bat@@@", IO.
File.
ReadAllLines(Reg_File
)) _
.Replace("\@@@Reg2Bat@@@ ", "") _
.Replace("@@@Reg2Bat@@@", Environment.NewLine), _
Environment.NewLine)
Dim RegLine As String = String.Empty ' Where the Regedit Line will be stored.
Dim RegKey As String = String.Empty ' Where the Regedit Key will be stored.
Dim RegVal As String = String.Empty ' Where the Regedit Value will be stored.
Dim RegData As String = String.Empty ' Where the Regedit Data will be stored.
Dim Batch_Commands As String = String.Empty ' Where the decoded Regedit strings will be stored.
' Check if first line of Reg File has a valid Regedit signature
For X As Int64 = 0 To RegFile.LongLength - 1
RegLine = RegFile(X).Trim
While RegLine = String.Empty
X += 1
RegLine = RegFile(X).Trim
End While
If Not RegLine.ToLower = "windows registry editor version 5.00" Then
Throw New Exception("This is not a valid Regedit v5.00 script.")
Return Nothing
Else
Batch_Commands &= ":: Converted with REG2BAT By Elektro H@cker" & Environment.NewLine & Environment.NewLine
Batch_Commands &= String.Format("REM {0}", RegLine) & Environment.NewLine & Environment.NewLine
Exit For
End If
Next
' Start reading the Regedit File
For X As Int64 = 0 To RegFile.LongLength - 1
RegLine = RegFile(X).Trim
Select Case True
Case RegLine.StartsWith(";") ' Comment line
Batch_Commands &= Environment.NewLine
Batch_Commands &= String.Format("REM {0}", RegLine.Substring(1, RegLine.Length - 1).Trim)
Batch_Commands &= Environment.NewLine
Case RegLine.StartsWith("[-") ' Key to delete
RegKey = RegLine.Substring(2, RegLine.Length - 3).Trim
Batch_Commands &= String.Format("REG DELETE ""{0}"" /F", RegKey)
Batch_Commands &= Environment.NewLine
Case RegLine.StartsWith("[") ' Key to add
RegKey = RegLine.Substring(1, RegLine.Length - 2).Trim
Batch_Commands &= String.Format("REG ADD ""{0}"" /F", RegKey)
Batch_Commands &= Environment.NewLine
Case RegLine.StartsWith("@=") ' Default Value to add
RegData = Split(RegLine, "@=", , CompareMethod.Text).Last
Batch_Commands &= String.Format("REG ADD ""{0}"" /V """" /D {1} /F", RegKey, RegData)
Batch_Commands &= Environment.NewLine
Case RegLine.StartsWith("""") _
AndAlso RegLine.Split("=").Last = "-" ' Value to delete
RegVal = RegLine.Substring(1, RegLine.Length - 4)
Batch_Commands &= String.Format("REG DELETE ""{0}"" /V ""{1}"" /F", RegKey, RegVal)
Batch_Commands &= Environment.NewLine
Case RegLine.StartsWith("""") ' Value to add
RegLine = RegLine.Replace("\\", "\") ' Replace Double "\\" to single "\".
' Check data type:
Select Case RegLine.Split("=")(1).Split(":")(0).ToLower
Case "hex" ' Binary
RegVal = Split(RegLine, "=hex:", , CompareMethod.Text)(0)
RegData = Split(RegLine, (RegVal & "=hex:"), , CompareMethod.Text).Last.Replace(",", "")
Batch_Commands &= String.Format("REG ADD ""{0}"" /V {1} /T ""REG_BINARY"" /D ""{2}"" /F", RegKey, RegVal, RegData)
Batch_Commands &= Environment.NewLine
Case "dword" ' DWORD
RegVal = Split(RegLine, "=dword:", , CompareMethod.Text)(0)
RegData = "0x" & Split(RegLine, (RegVal & "=dword:"), , CompareMethod.Text).Last
Batch_Commands &= String.Format("REG ADD ""{0}"" /V {1} /T ""REG_DWORD"" /D ""{2}"" /F", RegKey, RegVal, RegData)
Batch_Commands &= Environment.NewLine
Case "hex(b)" ' QWORD
Dim TempData As String = "0x"
RegVal = Split(RegLine, "=hex(b):", , CompareMethod.Text)(0)
RegData = StrReverse(Split(RegLine, (RegVal & "=hex(b):"), , CompareMethod.Text).Last)
For Each [byte] In RegData.Split(",") : TempData &= StrReverse([byte]) : Next
Batch_Commands &= String.Format("REG ADD ""{0}"" /V {1} /T ""REG_QWORD"" /D ""{2}"" /F", RegKey, RegVal, TempData)
Batch_Commands &= Environment.NewLine
Case "hex(2)" ' EXPAND SZ
Dim TempData As String = String.Empty
RegVal = Split(RegLine, "=Hex(2):", , CompareMethod.Text)(0)
RegData = Split(RegLine, (RegVal & "=hex(2):"), , CompareMethod.Text).Last.Replace(",00", "").Replace("00,", "")
For Each [byte] In RegData.Split(",") : TempData &= Chr(Val("&H" & [byte])) : Next
TempData = TempData.Replace("%", "%%").Replace("""", "\""")
Batch_Commands &= String.Format("REG ADD ""{0}"" /V {1} /T ""REG_EXPAND_SZ"" /D ""{2}"" /F", RegKey, RegVal, TempData)
Batch_Commands &= Environment.NewLine
Case "hex(7)" ' MULTI SZ
Dim TempData As String = String.Empty
RegVal = Split(RegLine, "=Hex(7):", , CompareMethod.Text)(0)
RegData = Split(RegLine, (RegVal & "=hex(7):"), , CompareMethod.Text).Last.Replace(",00,00,00", ",\0").Replace(",00", "").Replace("00,", "")
For Each [byte] In RegData.Split(",")
If [byte] = "\0" Then
TempData &= "\0" ' Line separator for multiline.
Else
TempData &= Chr(Val("&H" & [byte]))
End If
Next
TempData = TempData.Replace("%", "%%").Replace("""", "\""")
Batch_Commands &= String.Format("REG ADD ""{0}"" /V {1} /T ""REG_MULTI_SZ"" /D ""{2}"" /F", RegKey, RegVal, TempData)
Batch_Commands &= Environment.NewLine
Case Else ' REG SZ
RegVal = Split(RegLine, """=""", , CompareMethod.Text)(0)
RegData = Split(RegLine, (RegVal & """="""), , CompareMethod.Text).Last
Batch_Commands &= String.Format("REG ADD ""{0}"" /V {1}"" /T ""REG_SZ"" /D ""{2} /F", RegKey, RegVal, RegData)
Batch_Commands &= Environment.NewLine
End Select
End Select
Next
Return Batch_Commands
End Function
#End Region