T086学习网 | 站长学院 | 技术文档 | 成语 | 歇后语 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论 | 欣欣百宝箱

深入挖掘Windows脚本技术

【 网络作者:佚名 更新时间:2008-02-27 | 字体:
[导读]【目录】 1,前言 2,回顾WSH对象 3,WMI服务 4,脚本也有GUI 5,反查杀 6,来做个后门 7,结语 8,参考资料 【前言】 本文讲述一些Windows脚本编程的知识和技巧。这里的Windows脚本是指 Windows Script Host (WSH W...
【脚本也有GUI】

虽然系统提供了WScript和CScript两个脚本宿主,分别负责窗口环境和命令行环境下的脚本运行,但实际上窗口环境下用户与脚本交互不太方便:参数输入只能建立快捷方式或弹出InputBox对话框,输出信息后只有在用户“确定”后才能继续运行。完全没有了窗口环境直观、快捷的优势。好在有前面提到的InternetExplorer对象,脚本可以提供web风格的GUI。

还是来看个例子,一个清除系统日志的脚本,顺便复习一下WMI:

set ie=wscript.createobject("internetexplorer.application","event_")   '创建ie对象'

ie.menubar=0                                                           '取消菜单栏'

ie.addressbar=0                                                        '取消地址栏'

ie.toolbar=0                                                           '取消工具栏'

ie.statusbar=0                                                         '取消状态栏'

ie.width=400                                                           '宽400'

ie.height=400                                                          '高400'

ie.resizable=0                                                         '不允许用户改变窗口大小'

ie.navigate "about:blank"                                              '打开空白页面'

ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2)   '水平居中'

ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2)  '垂直居中'

ie.visible=1                                                           '窗口可见'

with ie.document                                                  '以下调用document.write方法,'

.write "<html><body bgcolor=#dddddd scroll=no>"                   '写一段html到ie窗口中。'

.write "<h2 align=center>远程清除系统日志</h2><br>"

.write "<p>目标IP:<input type=text size=15>"               '也可以用navigate方法直接打开一'

.write "<p>用户名:<input type=text size=30>"             '个html文件,效果是一样的。'

.write "<p>密码: <input type=password size=30>"

.write "<p align=center>类型:"                                   '不仅是input对象,所有DHTML支持'

.write "<input type=checkbox>应用程序 "                    '的对象及其属性、方法都可以使用。'

.write "<input type=checkbox>系统 "

.write "<input type=checkbox>安全"                         '访问这些对象的办法和网页中访问'

.write "<p align=center><br>"                                     '框架内对象是类似的。'

.write "<input type=button value=确定> "

.write "<input type=button value=取消>"

.write "</body></html>"

end with

dim wmi                                                           '显式定义一个全局变量'

set wnd=ie.document.parentwindow                                  '设置wnd为窗口对象'

set 设置id为document中全部对象的集合'

id.confirm.onclick=getref("confirm")                              '设置点击"确定"按钮时的处理函数'

id.cancel.onclick=getref("cancel")                                '设置点击"取消"按钮时的处理函数'

do while true                                                     '由于ie对象支持事件,所以相应的,'

wscript.sleep 200                                                 '脚本以无限循环来等待各种事件。'

loop

sub event_onquit                                                  'ie退出事件处理过程'

wscript.quit                                                      '当ie退出时,脚本也退出'

end sub

sub cancel                                                        '"取消"事件处理过程'

ie.quit                                                           '调用ie的quit方法,关闭IE窗口'

end sub                                                           '随后会触发event_onquit,于是脚本也退出了'

sub confirm                                                       '"确定"事件处理过程,这是关键'

with id

if .ip.value="" then .ip.value="."                                '空ip值则默认是对本地操作'

if not (.app.checked or .sys.checked or .sec.checked) then        'app等都是checkbox,通过检测其checked'

   wnd.alert("至少选择一种日志")                                  '属性,来判断是否被选中。'

   exit sub

end if

set lct=createobject("wbemscripting.swbemlocator")                '创建服务器定位对象'

on error resume next                                              '使脚本宿主忽略非致命错误'

set wmi=lct.connectserver(.ip.value,"root/cimv2",.user.value,.pass.value)  '连接到root/cimv2名字空间'

if err.number then                                                '自己捕捉错误并处理'

   wnd.alert("连接WMI服务器失败")                                 '这里只是简单的显示“失败”'

   err.clear

   on error goto 0                                                '仍然让脚本宿主处理全部错误'

   exit sub

end if

if .app.checked then clearlog "application"                       '清除每种选中的日志'

if .sys.checked then clearlog "system"

if .sec.checked then clearlog "security"                          '注意,在XP下有限制,不能清除安全日志'

wnd.alert("日志已清除")

end with

end sub

sub clearlog(name)

wql="select * from Win32_NTEventLogFile where logfilename='"&name&"'"

set logs=wmi.execquery(wql)                                       '注意,logs的成员不是每条日志,'

for each l in logs                                                '而是指定日志的文件对象。'

   if l.cleareventlog() then

      wnd.alert("清除日志"&name&"时出错!")

      ie.quit

      wscript.quit

   end if

next

end sub

总结一下整个过程。首先是创建internetexplorer.application对象。其直接的效果是启动了一个iexplorer进程,但窗口是不可见的,直到设置了ie.visible=1。然后用document.write方法将html语句写到ie窗口中。对于复杂的界面,可以将html代码保存为一个html文件,用ie.navigate(filename)打开。最后是响应窗口中的输入。这基本上属于DHTML的知识范畴。

与一般脚本编程最大的不同之处,在于ie是事件驱动的。你所要做的,就是设置好相应的事件处理函数/过程。

在本例中,脚本只关心3个事件:ie退出,"确定"按钮被点击,"取消"按钮被点击。

注意,例子中只有两句设置事件处理过程的语句,没有定义ie退出事件与event_onquit过程关联。这是因为这里用到一个特性——创建ie对象时的第二个参数"event_"是一个前缀,ie对象的事件处理过程名是该前缀加事件名。所以onquit事件的处理过程默认就是event_onquit。

当点击"确定"按钮后,confirm过程被调用。例子中演示了如何访问ie中的对象,比如ie.document.all.ip.value就是在"目标IP"文本框中的输入。如果选中"应用程序"这个checkbox,那么ie.document.all.app.checked的值是true,否则是false。想调用alert方法,则用ie.document.parentwindow.alert。其他各种ie内对象的访问方法完全是类似的。具体的可以看DHTML相关资料。

有了web界面,交互就变得丰富多彩了。大家可以充分发挥创意。

比如,很多GUI工具(比如流光)启动时,有一个logo页,显示版权等信息。我们用ie对象也可以模拟一个出来:

set ie=wscript.createobject("internetexplorer.application")

ie.fullscreen=1

ie.width=300

ie.height=150

ie.navigate "about:blank"

ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2)

ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2)

ie.document.write "<body bgcolor =skyblue scroll=no><br><br>"&_

"<h2 align=center>这是一个Logo</h2></body>"

ie.visible=1

wscript.sleep 5000

ie.quit

上面这段代码执行后,将在屏幕中央显示一个连标题栏和边框都没有的ie窗口,持续5秒。

窗口里是蓝底黑字的“这是一个Logo”。

脚本GUI化之后,与用户的交互更直观。像Nmap那样有很多参数的工具,在本地使用时,写一个图形界面的“接口”就一劳永逸了。输出的结果也可以用脚本处理,以更适合阅读的方式显示,就像流光等工具能生成html扫描报告那样。

上一页 [1] 2 [3] [4] [5] [6] 下一页
  • 转载请注明来源:IT学习网 网址:http://www.t086.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
  • 了解这些字:
  • 更多
    留言建议ASP探针PHP探针站长Enjoy的Blog
    © 2017 T086学习网 - T086.com(原itlearner.com)
    RunTime:20.37ms QueryTime:7