深入挖掘Windows脚本技术

上传人:mg****2 文档编号:122020810 上传时间:2020-02-29 格式:DOC 页数:10 大小:52.50KB
返回 下载 相关 举报
深入挖掘Windows脚本技术_第1页
第1页 / 共10页
深入挖掘Windows脚本技术_第2页
第2页 / 共10页
深入挖掘Windows脚本技术_第3页
第3页 / 共10页
深入挖掘Windows脚本技术_第4页
第4页 / 共10页
深入挖掘Windows脚本技术_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《深入挖掘Windows脚本技术》由会员分享,可在线阅读,更多相关《深入挖掘Windows脚本技术(10页珍藏版)》请在金锄头文库上搜索。

1、深入挖掘Windows脚本技术【目录】 1,前言 2,回顾WSH对象 3,WMI服务 4,脚本也有GUI 5,反查杀 6,来做个后门 7,结语 8,参考资料 【前言】 本文讲述一些Windows脚本编程的知识和技巧。这里的Windows脚本是指Windows Script Host(WSH Windows脚本宿主),而不是HTML或ASP中的脚本。前者由Wscript或Cscript解释,后两者分别由IE和IIS负责解释。描述的语言是VBScript。本文假设读者有一定的Windows脚本编程的基础。如果你对此还不了解,请先学习Windows脚本技术1。 【回顾WSH对象】 得益于com技术的

2、支持,WSH能提供比批处理(.bat)更强大的功能。说白了,wsh不过是调用现成的“控件”作为一个对象,用对象的属性和方法实现目的。 常用的对象有: WScript Windows脚本宿主对象模型的根对象,要使用WSH自然离不开它。它提供多个子对象,比如WScript.Arguments和WScript.Shell。前者提供对整个命令行参数集的访问,后者可以运行程序、操纵注册表内容、创建快捷方式或访问系统文件夹。 Scripting.FileSystemObject 主要为IIS设计的对象,访问文件系统。这个恐怕是大家遇到最多的对象了,因为几乎所有的Windows脚本病毒都要通过它复制自己感染

3、别人。 ADODB.Stream ActiveX Data Objects数据库的子对象,提供流方式访问文件的功能。这虽然属于数据库的一部分,但感谢微软,ADO是系统自带的。 Microsoft.XMLHTTP 为支持XML而设计的对象,通过http协议访问网络。常用于跨站脚本执行漏洞和SQL injection。 还有很多不常见的: 活动目录服务接口(ADSI)相关对象 功能涉及范围很广,主要用于Windows域管理。 InternetExplorer对象 做IE能做的各种事。 Word,Excel,Outlook对象 用来处理word文档,excel表单和邮件。 WBEM对象 WBEM即W

4、eb-Based Enterprise Management。它为管理Windows提供强大的功能支持。下一节提到的WMI服务提供该对象的接口。 很显然,WSH可以利用的对象远远不止这些。本文挂一漏万,谈一些较实用的对象及其用法。 先看一个支持断点续传下载web资源的例子,它用到了上面说的4个常用对象。 复制代码 代码如下:if (lcase(right(wscript.fullname,11)=wscript.exe) then 判断脚本宿主的名称 die(Script host must be CScript.exe.) 脚本宿主不是CScript,于是就die了 end if if ws

5、cript.arguments.count1 then 先判断参数个数是否大于1 filename=wscript.arguments(1) 再访问第二个参数 else 如果没有给出文件名,就从url中获得 t=instrrev(url,/) 获得最后一个/的位置 if t=0 or t=len(url) then die(Can not get filename to save.) 没有/或以/结尾 filename=right(url,len(url)-t) 获得要保存的文件名 end if if not left(url,7)=http:/ then url=http:/&url 如果粗

6、心把“http:/”忘了,加上 set fso=wscript.createobject(Scripting.FileSystemObject) FSO,ASO,HTTP三个对象一个都不能少 set aso=wscript.createobject(ADODB.Stream) set http=wscript.createobject(Microsoft.XMLHTTP) if fso.fileexists(filename) then 判断要下载的文件是否已经存在 start=fso.getfile(filename).size 存在,以当前文件大小作为开始位置 else start=0 不

7、存在,一切从零开始 fso.createtextfile(filename).close 新建文件 end if wscript.stdout.write Connectting. 好戏刚刚开始 current=start 当前位置即开始位置 do http.open GET,url,true 这里用异步方式调用HTTP http.setrequestheader Range,bytes=&start&-&cstr(start+20480) 断点续传的奥秘就在这里 http.setrequestheader Content-Type:,application/octet-stream http

8、.send 构造完数据包就开始发送 for i=1 to 120 循环等待 if http.readystate=3 then showplan() 状态3表示开始接收数据,显示进度 if http.readystate=4 then exit for 状态4表示数据接受完成 wscript.sleep 500 等待500ms next if not http.readystate=4 then die(Timeout.) 1分钟还没下完20k?超时! if http.status299 then die(Error: &http.status& &http.statustext) 不是吧,又

9、出错? if not http.status=206 then die(Server Not Support Partial Content.) 服务器不支持断点续传 aso.type=1 数据流类型设为字节 aso.open aso.loadfromfile filename 打开文件 aso.position=start 设置文件指针初始位置 aso.write http.responsebody 写入数据 aso.savetofile filename,2 覆盖保存 aso.close range=http.getresponseheader(Content-Range) 获得http头

10、中的Content-Range if range= then die(Can not get range.) 没有它就不知道下载完了没有 temp=mid(range,instr(range,-)+1) Content-Range是类似123-456/789的样子 current=clng(left(temp,instr(temp,/)-1) 123是开始位置,456是结束位置 total=clng(mid(temp,instr(temp,/)+1) 789是文件总字节数 if total-current=1 then exit do 结束位置比总大小少1就表示传输完成了 start=star

11、t+20480 否则再下载20k loop while true wscript.echo chr(13)&Download (&total&) Done. 下载完了,显示总字节数 function die(msg) 函数名来自Perl内置函数die wscript.echo msg 交代遗言_ wscript.quit 去见马克思了 end function function showplan() 显示下载进度 if i mod 3 = 0 then c=/ 简单的动态效果 if i mod 3 = 1 then c=- if i mod 3 = 2 then c= wscript.stdo

12、ut.write chr(13)&Download (t&) &c&chr(8)13号ASCII码是回到行首,8号是退格 end function可以看到,http控件的功能是很强大的。通过对http头的操作,很容易就实现断点续传。例子中只是单线程的,事实上由于http控件支持异步调用和事件,也可以实现多线程下载。在MSDN里有详细的用法。至于断点续传的详细资料,请看RFC2616。 FSO和ASO都可以访问文件,他们有什么区别呢?其实,ASO除了在访问字节(非文本)数据有用外,就没有存在的必要了。如果想把例子中的ASO用FSO来实现,那么写入http.responsebody的时候会出错。反

13、之也不行,ASO无法判断文件是否存在。如果文件不存在,loadfromfile就直接出错,没有改正的机会。当然,可以用on error resume next语句让脚本宿主忽略非致命错误,自己捕捉并处理。但有现成的fileexists()为什么不用呢? 另外,由于FSO经常被脚本病毒和ASP木马利用,所以管理员可能会在注册表中修改该控件的信息,使脚本无法创建FSO。其实执行一个命令regsvr32 /s scrrun.dll就恢复了。即使scrrun.dll被删除,自己复制一个过去就行。 热身完之后,下面我们来看一个功能强大的对象WBEM(由WMI提供)。 【WMI服务】 先看看MSDN里是怎

14、么描述WMI的Windows 管理规范 (WMI) 是可伸缩的系统管理结构,它采用一个统一的、基于标准的、可扩展的面向对象接口。我在刚开始理解WMI的时候,总以为WMI是Windows管理接口(Interface),呵呵。 再看什么是WMI服务提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于Windows的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。 看上去似乎是个很重要的服务。不过,默认情况下并没有服务依赖它,反而是它要依赖RPC和EventLog服务。但它又是时常用到的。我把WMI服务设置为手动启动并停止,使用电脑一段时间,发现WMI服务又启动了。被需要就启动,这是服务设置为“手动”的特点。当我知道WMI提供的管理信息有多庞大后,对WMI服务的自启动就不感到奇怪了。 想直观了解WMI的复杂,可以使用WMITools.exe2这个工具。这是一个工具集。使用其中的WMI Object Browser可以看到很多WMI提供的对象

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号