科技行者

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

知识库

知识库 安全导航

至顶网安全频道反病毒高手速成之DIY病毒专杀

反病毒高手速成之DIY病毒专杀

  • 扫一扫
    分享文章到微信

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

我们经常在网上看到很多玩反病毒的人发布了一些病毒的分析和行为记录,我们有时候也可以自己动手装个VMWARE来运行病毒。这时你可以考虑看看如何用VBS制造一个病毒专杀。打造一个属于你自己的专杀。

作者:zdnet安全频道 来源:论坛整理 2008年6月3日

关键字: 反病毒 病毒专杀

  • 评论
  • 分享微博
  • 分享邮件
我们经常在网上看到很多玩反病毒的人发布了一些病毒的分析和行为记录,也有不少分析病毒的爱好者。我们有时候也可以自己动手装个VMWARE来运行病毒。再用一些FILEMON或者REGMON还有就是REGSNAP等软件进行跟踪或者快照对比,将病毒的行为记录下来方便我们进行杀毒操作。虽然可以依照它的行为进行倒行逆施来杀毒,但要是面对很多台电脑,每一台都要手工杀毒岂不是很麻烦?这时你可以考虑看看如何用VBS制造一个病毒专杀。打造一个属于你自己的专杀,发布到网上SHOW一下。

    现在我用我写的VBS专杀来讲解一下,大家学会以后就可以自己做了。

+++++++++++++++++++++

 

set w=getobject("winmgmts:")

set p=w.execquery("select * from win32_process where name=''fyso.exe''")

for each i in p

i.terminate

next

 

+++++++++++++++++++++

 

    这段代码执行以后就会结束进程名为fyso.exe的进程,所以你可以把名字修改为病毒的进程名字,假如要结束几个进程,你只需要复制多几个这段代码然后修改一下进程名就可以用了。

    假如我们需要结束很多进程,那我们就可以修改一下,让代码精简高效些:

 

+++++++++++++++++++++

set w=getobject("winmgmts:")

set p=w.execquery("select * from win32_process where name=''fyso.exe'' or name=''jtso.exe'' or name=''mhso.exe'' or name=''qjso.exe'' or name=''upxdnd.exe'' or name=''qqso.exe'' or name=''wgso.exe'' or name=''wlso.exe'' or name=''wmso.exe'' or name=''woso.exe'' or name=''ztso.exe'' or name=''nwizAskTao.exe'' or name=''rxso.exe'' or name=''mmc.exe'' or name=''svchost32.exe'' or name=''spglsdr.exe''")

for each i in p

i.terminate

next

 

+++++++++++++++++++++

 

 

    我们来看看这段代码,第一句是一样的。关键在于进程名字后面我们加了or,然后我们就可以继续写进程名字了。这个or的意思是“或者”,这样可以结束小所有添加好文件名的进程。

    这个时候大家可能会发现一个问题,假如进程的名字和系统进程的名字一样的话,那可能会因为结束系统进程导致系统关闭。那么我们就需要判断路径了。

    看下面的代码:

 

+++++++++++++++++++++

Dim strComputer, strPath, strExePath

Dim objWMI, objFSO

Dim colProcesses

Dim objProcess, objFile

 

 

Set objFSO = CreateObject( "Scripting.FileSystemObject" )

strComputer = "."

nCount = 0

strPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings _

         ( "%ProgramFiles%\Internet Explorer\iexplore.exe" )    这里填写进程路径

Set objFile = objFSO.GetFile( strPath )

strPath = objFile.ShortPath

Set objFile = Nothing

 

Set objWMI = GetObject( "winmgmts:{impersonationLevel=impersonate}\\" & _

         strComputer & "\root\cimv2" )

Set colProcesses = objWMI.ExecQuery( "SELECT * FROM Win32_Process" & _

         " WHERE Name=''iexplore.exe''" )    这里填写进程名称

 

 

 

         For Each objProcess In colProcesses

                 Set objFile = objFSO.GetFile( objProcess.ExecutablePath )

                 strExePath = objFile.ShortPath

                 Set objFile = Nothing

 

                 If StrComp(strExePath, strPath, 1) Then

                         objProcess.Terminate

                 Else

                 End If

         Next

+++++++++++++++++++++

 

    这段代码的作用是结束掉除了所设定的路径%ProgramFiles%\Internet Explorer\iexplore.exe以外的名为iexplore.exe的所有进程。这样我们就可以修改一下路径和名字来结束掉伪装系统名字的进程,例如smss.exe等进程。当然我们也可以单独编写一个VBS,把你的所有系统进程写进去,来防止伪装系统的病毒进程启动,然后让系统自动启动这个VBS,这样也可以防止一下伪系统进程。

    然后我们来编写病毒文件删除的模块。

 

+++++++++++++++++++++
set fso=createobject("scripting.filesystemobject")

set del=wscript.createobject("wscript.shell")

d1=del.ExpandEnvironmentStrings("%temp%\fyso.exe")

set v1=fso.getfile(d1)

v1.attributes=0

v1.delete

 

+++++++++++++++++++++

 

 

    我们看这一句d1=del.ExpandEnvironmentStrings("%temp%\fyso.exe") ,括号内的双引号里面就是要删除的文件的路径了。可以用绝对路径也可以使用环境变量。我这里用的是环境变量,%TEMP%,关于环境变量你可以在CMD里输入SET来查看。假如要删除多个文件,你只需要更改路径和序号:

 

+++++++++++++++++++++

set fso=createobject("scripting.filesystemobject")

set del=wscript.createobject("wscript.shell")

d2=del.ExpandEnvironmentStrings("%temp%\111.exe")

set v1=fso.getfile(d1)

v2.attributes=0

v2.delete

 

+++++++++++++++++++++

 

 

    然后放在刚才写好的代码下面,序号递增。

    但是当你要删除很多文件的时候,这样添加代码以后,这个删除模块的代码会很壮观的,所以我们也来精简一下代码:

 

+++++++++++++++++++++
set fso=createobject("scripting.filesystemobject")

set del=wscript.createobject("wscript.shell")

d(1)=del.ExpandEnvironmentStrings("%temp%\fyso.exe")

d(2)=del.ExpandEnvironmentStrings("%temp%\jtso.exe")

for i=1 to 2

set v(i)=fso.getfile(d(i))

v(i).attributes=0

v(i).delete

next

 

+++++++++++++++++++++

 

 

    这里使用了一个FOR循环来去掉烦琐重复的代码。大家把FOR循环的?TO?修改为匹配你递增到最后的序号就可以用了。例如我这里有2个文件,就是1 TO 2了。

    删除完毕以后我们就来写病毒文件免疫的模块:
CreateFolderCreateObject("Scripting.FileSystemObject").CreateFolder CreateObject("WScript.Shell").ExpandEnvironmentStrings("%temp%\fyso.exe")

    我们先来说说免疫的原理:建立一个与病毒文件同名的文件夹,这样病毒就无法再在同一目录下释放病毒文件了,因为已经存在同名的文件夹了。

    上面的语句就是建立文件夹的语句,同上,我们只需要修改括号里引号内的路径来达到目的。

    然后我们来编写遍历删除各盘符根目录下病毒文件的模块。这个模块是做什么的呢?还记得很多病毒喜欢在你的每个盘的根目录放一个autorun.inf来让你双击硬盘时启动病毒吗。我们要做的就是遍历所有盘符来删除根目录下的autorun.inf。代码如下:

 

+++++++++++++++++++++
set fso=createobject("scripting.filesystemobject")

set drvs=fso.drives

for each drv in drvs

if drv.drivetype=1 or drv.drivetype=2 or drv.drivetype=3 or drv.drivetype=4 then

set u=fso.getfile(drv.driveletter&":\autorun.inf")

u.attributes=0

u.delete

end if

next

 

+++++++++++++++++++++

 

    这段代码是删除所有根目录下的autorun.inf,假如病毒还在每个根目录下生成其他文件你也可以复制这段代码,修改一下文件名就可以了。我们还可以编写一个autorun.inf免疫模块,原理同上,建立同名文件夹,不过我们还利用了建立一个非法的文件夹名字在autorun.inf文件夹目录下,保护autorun.inf文件夹不会被删除。

    这里建立了一个autorun.inf文件夹在每个盘的根目录,还建立了autorun.inf目录下一个名为免疫文件夹..的文件夹。看到文件名后面有..吗?建立文件的时候,它的BaseName是免疫文件夹.,然后是一个分隔符号.,没有后缀。系统就记录它没有后缀,把最后一个点过滤了,建立的文件夹名就变成免疫文件夹.了。建立以后当你要对文件夹进行操作的时候,传递文件名给下层系统API,被认为.后面没有后缀,就又过滤掉一个.,所以当你访问这个文件夹的时候,其实访问的是免疫文件夹。而实际上不存在这个文件夹,只存在免疫文件夹.,就提示找不到路径,出错了。我们就是利用这个原理进行免疫。

    然后我们再来编写注册表操作模块,删除病毒修改和添加的注册表项目。
set reg=wscript.createobject("wscript.shell")
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
reg.regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\

Advanced\Folder\Hidden\SHOWALL\CheckedValue",1,"REG_DWORD"

    上面的语句是用reg.regwrite函数,进行修改注册表的键值,而不是删除。格式很清楚。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\

Advanced\Folder\Hidden\SHOWALL\CheckedValue是要修改的键的路径和名字。然后1是键的值,REG_DWORD是键值类型。你也可以通过以上语句来建立一个新的键值。

set reg=wscript.createobject("wscript.shell")
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
reg.regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\fysa"

    上面一句是删除项目和键值的操作。地址写在引号内。我们用做删除病毒增加的启动项目。

    最后我们来编写HOST文件修复免疫模块。因为有的病毒经常修改HOSTS来达到DNS欺骗,让一些域名转到它的IP。我们就要用以下进行修复了。
set fso=createobject("scripting.filesystemobject")
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
set re=fso.OpenTextFile(objFSO.GetSpecialFolder( 1 ) &"\drivers\etc\hosts",2,0)
re.Write "127.0.0.1            localhost" & vbCrLf
re.Write "127.0.0.1            7y7.us"& vbCrLf
re.Write "127.0.0.1          http://www.beginget.com/GetVer/Ver.txt"& vbCrLf
re.Close
set re=nothing

    下面这一句是向HOSTS以覆盖方式写入127.0.0.1            localhost。
re.Write "127.0.0.1            localhost" & vbCrLf

    不过因为我们用来做教材的病毒Trojan-Downloader.Win32.Agent.bmo是个下载型的木马,会连接网络下载木马,我们就以其人之身还治其人之道,把病毒所连接的域名转到127.0.0.1,也就是本地IP,那样它就无法连接到原来的IP下载木马了,通过这样达到免疫的效果。

    编写好各个模块以后,把代码都放在记事本里,在代码最前面加上容错语句on error resume next,保存好以后把后缀改为VBS,就可以运行了。你可以在虚拟机运行病毒以后测试专杀,再用SRENG等工具看看是否修复成功。这样你就做出了一个病毒专杀了。

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

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

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