之前写过一个由文件抓取账号密码和ip,实现secureCRT到远程登录。但是因为是从文件读取,考虑到安全因素上的问题,所以我们选择和之前一天写的加密脚本融合的方式达到文件一次读取后,销毁文件,达到加密。当然加密效果姑且不论,演示效果还是可以一看的。
话不多说,直接上代码。
加密部分:
'本工具用于加密vbs的脚本 '采用ASCII,hex+xor,Encoder 三重加密。 '第三重Encoder加密后,只能使用VBE后缀。 'VBS不支持Encoder编码。 Set fso = CreateObject("Scripting.FileSystemObject") data = fso.openTextFile("ConfigurationBackup.vbs", 1).ReadAll Filename = CreateObject("WScript.Shell").Exec("mshta vbscript:""<input type=file id=f><script>f.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(f.value)[close()];</script>""").StdOut.ReadAll Randomize pass = Int(Rnd*12)+20 '异或加密有效范围20-31,所以随机生成好了。 Set readfile = fso.OpenTextFile(Filename, 1) readdata = "data = " & chr(34) readdata = readdata & readfile.readline do while readfile.AtEndOfStream <> True readdata = readdata & "|" & readfile.readline loop data = readdata & chr(34) & chr(13) & chr(10) & data data = "d=" & Chr(34) & ASCdata(data) & Chr(34) data = data & vbCrLf & ":M=Split(D):For each O in M:N=N&chr(O):Next:execute N" data = Replace(data, " ", ",") fso.OpenTextFile(Filename & "_加密.vbe", 2, True).Write Encoder(EncHexXorData(data)) MsgBox "加密完毕,文件生成到:" & vbCrLf & vbCrLf & Filename & "_加密.vbe", 64+4096, "乱码领域VBS加密" Set FSO = Nothing Function EncHexXorData(data) EncHexXorData = "x=""" & EncHexXor(data) & """:For i=1 to Len(x) Step 2:s=s&Chr(CLng(""&H""&Mid(x,i,2)) Xor " & pass & "):Next:Execute Replace(s,"","","" "")" End Function Function Encoder(data) '加密3 Encoder = CreateObject("Scripting.Encoder").EncodeScriptFile(".vbs", data, 0, "VBScript") End Function Function EncHexXor(x) '加密2 For i = 1 To Len(x) EncHexXor = EncHexXor & Hex(Asc(Mid(x, i, 1)) Xor pass) Next End Function Function ASCdata(Data) '加密1 num = Len(data) newdata = "" For j = 1 To num If j = num Then newdata = newdata&Asc(Mid(data, j, 1)) Else newdata = newdata&Asc(Mid(data, j, 1)) & " " End If Next ASCdata = newdata End Function远程登录部分;
'本脚本目的:从一个文件里读取设备类型、IP地址、用户名和密码等,自动备份设备配置 Sub Main '强制要求显式声明脚本中的所有变量 'Option Explicit '文件打开方式 Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso,line,params,switchkey,savefile Set fso = CreateObject("Scripting.FileSystemObject") '===配置文件保存目录=== savefile = "C:\Configuration Backup\" crt.Screen.Synchronous = True dataSplit = Split(data, chr(10)) dataSplitNum = UBound(data) - LBound(data) iflag = 0 DO While dataSplitNum <> iflag '读出每行 line = dataSplit(iflag) iflag = iflag + 1 '分离每行的参数 IP地址 用户名 密码 params = Split (line, ",") '===Cisco=== if params(0) = "Cisco" then 'SSH登录 crt.Session.connectInTab("/SSH2 /L " & params(3) & " /PASSWORD " & params(4) & " " & params(2)) crt.Screen.waitForString params(1)&">" crt.Screen.Send "enable" &vbcr crt.Screen.Send params(5) &vbcr crt.Screen.waitForString "#" crt.Screen.Send "show run" & vbcr '===配置文件保存位置=== crt.session.LogFileName = savefile & Year(Now) & "-" & Month(now) & "-" & Day(now) & "\" & params(1) & ".log" crt.session.Log True do while true switchkey = crt.Screen.WaitForStrings(" --More-- ", params(1)&"#", 0.5) select case switchkey '读到" --More-- " case "1" crt.Screen.send " " '读到"end" case "2" '关闭log crt.session.Log False crt.Screen.Send "exit" & vbcr exit do end select loop crt.Session.Disconnect '===Junos=== elseif params(0) = "Junos" then crt.Session.connectInTab("/SSH2 /L " & params(3) & " /PASSWORD " & params(4) & " " & params(2)) crt.Screen.waitForString ">" crt.Screen.Send "show configuration | display set" &vbcr crt.session.LogFileName = "C:\" & Year(Now) & "-" & Month(now) & "-" & Day(now) & "\" & params(1) & ".log" crt.session.Log True do while true switchkey = crt.Screen.WaitForStrings("---(more", ">", 0.5) select case switchkey case "1" crt.Screen.send " " case "2" crt.session.Log False crt.Screen.Send "exit" & vbcr exit do end select loop crt.Session.Disconnect '===Netscreen=== elseif params(0) = "Netscreen" then crt.Session.connectInTab("/SSH2 /L " & params(3) & " /PASSWORD " & params(4) & " " & params(2)) crt.Screen.waitForString "->" crt.Screen.Send "get config" &vbcr crt.session.LogFileName = "C:\" & Year(Now) & "-" & Month(now) & "-" & Day(now) & "\" & params(1) & ".log" crt.session.Log True do while true switchkey = crt.Screen.WaitForStrings("->", 0.5) select case switchkey case "1" crt.session.Log False crt.Screen.Send "exit" & vbcr exit do end select loop crt.Session.Disconnect '===F5=== elseif params(0) = "F5" then crt.Session.connectInTab("/SSH2 /AUTH keyboard-interactive /L " & params(3) & " /PASSWORD " & params(4) & " " & params(2)) crt.Screen.waitForString ">" crt.Screen.Send "list" &vbcr crt.session.LogFileName = "C:\" & Year(Now) & "-" & Month(now) & "-" & Day(now) & "\" & params(1) & ".log" crt.session.Log True do while true switchkey = crt.Screen.WaitForStrings("/var", ":", "(END)", 0.5) select case switchkey case "1" crt.Screen.send " " case "2" crt.Screen.send " " case "3" crt.Screen.send "q" &vbcr crt.session.Log False crt.Screen.Send "exit" & vbcr exit do end select loop crt.Session.Disconnect '===Checkpoint=== elseif params(0) = "Checkpoint" then crt.Session.connectInTab("/SSH2 /L " & params(3) & " /PASSWORD " & params(4) & " " & params(2)) crt.Screen.waitForString params(1)&">" crt.Screen.Send "show configuration" &vbcr crt.session.LogFileName = "C:\" & Year(Now) & "-" & Month(now) & "-" & Day(now) & "\" & params(1) & ".log" crt.session.Log True do while true switchkey = crt.Screen.WaitForStrings("-- More --", params(1)&">", 0.5) select case switchkey case "1" crt.Screen.send " " case "2" crt.session.Log False crt.Screen.Send "exit" & vbcr exit do end select loop crt.Session.Disconnect end if loop crt.Screen.Synchronous = False End Sub