0916_vbs加密与远程登录融合

之前写过一个由文件抓取账号密码和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


你可能感兴趣的:(脚本,vbs)