扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
现在我用我写的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
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
d2=del.ExpandEnvironmentStrings("%temp%\111.exe")
set v1=fso.getfile(d1)
v2.attributes=0
v2.delete
+++++++++++++++++++++
然后放在刚才写好的代码下面,序号递增。
但是当你要删除很多文件的时候,这样添加代码以后,这个删除模块的代码会很壮观的,所以我们也来精简一下代码:
+++++++++++++++++++++
set fso=createobject("scripting.filesystemobject")
set
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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者