提供命令列介面,讀取二進位檔案,以十六進位字串搜尋/取代,並輸出新檔案。適用於:隱藏捷徑目標、修改 TCP/IP 連線數限制、移除 WinRAR 右鍵選單等二進位修補場景。
cscript.exe CHex.vbs "原始檔.exe" "新檔.exe" "原始HEX" "新HEX"
範例: cscript.exe CHex.vbs "test.exe" "new.exe" "80 7A 01 61" "80 7A 01 21"
Public BinaryData
If LCase(Right(WScript.FullName, 11)) = "wscript.exe" Then WScript.Quit(0)
If WScript.Arguments.Count < 4 Then
WScript.Echo "Change File Hex. By: lxzzr lxzzr@21cn.com"
WScript.Echo "Usage: cscript.exe " & WScript.ScriptName & " FilePath SavePath sHEX dHEX"
WScript.Echo " cscript.exe CHex.vbs ""test.exe"" ""new.exe"" ""80 7A 01 61"" ""80 7A 01 21"""
WScript.Quit(0)
End If
sHEX = Replace(LCase(WScript.Arguments(2)), " ", "")
dHEX = Replace(LCase(WScript.Arguments(3)), " ", "")
WScript.Echo "File: " & WScript.Arguments(0)
WScript.Echo "sHEX: " & WScript.Arguments(2)
WScript.Echo "dHEX: " & WScript.Arguments(3)
ReadBinary(WScript.Arguments(0))
MyData = Replace(BinaryData, sHEX, dHEX)
WriteBinary WScript.Arguments(1), MyData
WScript.Echo "All done."
WScript.Quit(0)
Function ReadBinary(FileName)
Dim Stream, ObjXML, MyNode
Set ObjXML = CreateObject("Microsoft.XMLDOM")
Set MyNode = ObjXML.CreateElement("binary")
Set Stream = CreateObject("ADODB.Stream")
MyNode.DataType = "bin.hex"
Stream.Type = 1
Stream.Open
Stream.LoadFromFile FileName
MyNode.NodeTypedValue = Stream.Read
Stream.Close
BinaryData = MyNode.Text
Set MyNode = Nothing
Set Stream = Nothing
Set ObjXML = Nothing
End Function
Function WriteBinary(FileName, BufferData)
Dim Stream, ObjXML, MyNode
Set ObjXML = CreateObject("Microsoft.XMLDOM")
Set MyNode = ObjXML.CreateElement("binary")
Set Stream = CreateObject("ADODB.Stream")
MyNode.DataType = "bin.hex"
MyNode.Text = BufferData
Stream.Type = 1
Stream.Open
Stream.Write MyNode.NodeTypedValue
Stream.SaveToFile FileName, 2
Stream.Close
Set Stream = Nothing
Set MyNode = Nothing
Set ObjXML = Nothing
End Function

ADODB.Stream 負責二進位讀寫。Microsoft.XMLDOM 的 bin.hex 資料型別實現二進位 ⇄ 十六進位字串轉換。