您的位置:首页 > 编程语言 > VB

0916_vbs加密与远程登录融合

2015-09-17 22:27 369 查看
之前写过一个由文件抓取账号密码和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 脚本