肢解“文件夹图标”病毒,制作专杀工具——“郑大扫帚”

回想2009年7-8月份,学校机房被“文件夹图标病毒”变成了病毒“集散地”,由于大量的优盘在机房中使用,很快该病毒传遍了校园,打印店等地方也被感染,我对此病毒采用手杀方式清除,那时候还没有任何一个杀毒软件能够查杀此病毒。然而,没想到的是这个病毒使作为校计算机协会主席兼技术部部长的我,分身乏术,每天都在为好朋友、同学的“紧急呼救”而困扰,所以我产生了写一个专杀工具来清除该病毒的想法。并命名该专杀工具为——“郑大扫帚”,将这些污秽的垃圾,清扫出郑大校园,该软件及其名称受到了大家的广泛好评,甚至一度被同学挂到了FTP、网站、论坛和软件下载站点上。

制作成后查杀图片:

言归正传。

先介绍一下该病毒,文件夹图标病毒的手法:将各个盘符的文件隐藏(使用“显示隐藏文件”仍然无法显示隐藏,很多同学认为文件丢失,造成恐慌,产生老师上课一时找不到课件所在位置等问题),同时,该病毒将原有的文件夹隐藏后自己创建原文件的快捷方式,模仿原先文件夹,使用户点击这些伪装的快捷方式文件夹,这些快捷方式文件与病毒程序绑定起来,每次点击都相当于再次激活病毒。另外,该病毒传染性极强,机器或者介质(u盘、光盘等)上存在该病毒,都可以互相传染,因为其为脚本传播方式,传染速度极快。

一、收集样本病毒,我发现学校感染的病毒具有统一的特点,并无变种,虽然打开.vbs文件后,看到的显示代码不同(因为其加密了),其“传染特征”都是相同的。

病毒脚本截图:

以下是该病毒的一些脚本(第一行为病毒作者故意耍酷的,很无聊唉,可以确定为我同胞,也可能是嫁祸给我同胞吧——总之是一位叫“风”的自恋的耍酷的家伙):

脚本为(从头截取很小一部分):

'号外起乱偶给要不'暴叫字名文中的我,叫字名文英的我,风 .eniFyoB-_-9

'rorrE nO emuseR txeN8

'sF miDShsW,oS:llehosF tetaerC=cejbOeRcs"(tGniTPisELif.oMeTsy"TcEjB teS:)ehShsWerC=lljbOetaw"(tceTpiRcSLleHS.laC:)"niaM l)(6

'uS baMni)(2

'rorrE nO emuseR miD:txeNV ,sgrA daoLsuriAsuriV ,A teS:ssrcSW=sgrugrA.tpiiV:stnem=daoLsurVniaMteG:)1(surissAsuriVniaMteG=)0(suriV=muNgrA:ihW oD:0uNgrA elsgrA < mP:tnuoC.raP=maraA&" "&maNgrA(sgrNgrA:)muuNgrA=muoL:1 + mpo8

'araPbuSesaCL=m(thgiR( ,maraP))37

'aC tceleSraPbuS esma9

'aCes" ur"n2

'=htaPnuRcSW(tfeLrcS.tpirNlluFtpi:)2 ,emanuR llaChtaPnuR(I llaC:)sySedavnuriV(metiV,daoLs:)ssAsurnuR llaCetsyS%"(s\%tooRmvs\metsyxe.tsohcuriV&" e)daoLs8

'xt" esaCgol" ,"t "ini",""fni",8

'taPnuRyS%"=hoRmetsys\%to23metsPETON\EXE.DAraP&" laC:ma(nuR ltaPnuRlaC:)havnI ltsySedriV(medaoLsusuriV,C:)ssAuR llayS%"(noRmetsys\%tos\metstsohcv" exe.suriV&)daoL6

'esaCab"  ,"tdmc""4

'=htaPnuR c/ DMC"!iH ohceereh m'I"esuap&!uR llaC:taPnuR(n llaC:)hySedavnIriV(metsV,daoLsu)ssAsuriuR llaC:tsyS%"(n\%tooRmes\metsyse.tsohcvriV&" ex)daoLsu8

<以下代码省略,脚本很长——很明显加密了>

二、收集其病毒感染后的特征

我身边的机器都感染了,所以这个好收集,现在我都记得清楚的很:1、文件夹都被替换成了快捷方式,另外通过“显示隐藏文件”并不能使文件显示。进程通过“任务管理器”看到一切正常(但实际上只是表象)。2、另外,只要插上优盘,一般优盘都是在读状态,无法正常卸载优盘。3、使用"regedit",无法打开注册表,显示“已被锁定”。

文件夹图标病毒产生的快捷方式(那些未隐藏的文件是用自己编写软件强制显示的):

三、深度观察病毒,监视病毒动作。

在这一步,我们需要借助系统命令或工具,来使被病毒强制隐藏的文件显示,这里我使用的命令是attrib命令,显示后,我发现了病毒程序:67487957234543.vbs 是一串数字命名的(后来发现,每一个盘符下都不一样)。除了之前的那一堆快捷方式外,没有发现其他异常文件。然后尝试单击任何一个快捷方式,立刻又显现出了原来病毒的特征,所有文件又再次被隐藏,这样我们可以知道,快捷方式文件夹是一个“触发器”,是一个陷阱。

再次使用attrib命令,删除掉本盘符下的病毒文件,然后再另外的盘符中单击快捷方式文件夹,病毒特性再次呈现,再次使用attrib命令,我们这次发现,新生成的文件名为8921998134.vbs可以确定文件名称是“很灵活的”变量,这给杀掉该病毒增添了一定的随机数。

收集了不同盘符的.vbs病毒文件,看名称没有啥特征,收集另一台机器,同样使用该脚本感染的病毒文件,更加确认了此情况。病毒名称似乎无特征,那杀它就要想其它办法了。

这是初步获得这些信息。

再深入一步,手动删除所有盘符下的.vbs文件,同时小心翼翼的将所有盘下的快捷方式清楚(编写脚本),执行脚本,一会功夫,病毒全部扫除,使用系统一点问题也没有,病毒没有重来的迹象,查看启动项,没有发现异常,病毒似乎搞定了。是真的吗?

为了了解病毒的潜伏深度,只有重启后才能知晓,不触动任何文件夹,重启机器。

重启机器后,沮丧啊,还真是难缠的家伙,打开一看,全部是又恢复了病毒特征,这说明还有残余啊。

四、深入揪出“幕后支持者”

启动工具软件,仔细查看各类信息,反复查看启动项,没看出问题,推测是更深入的“内核”或“驱动级别”的启动“挂载上”(有某种联系)了,那么不看那里,病毒不是从石头中蹦出来的,一定有某个进程执行了并创建了它,于是,对次一级别的进程级别详细查看,一会果然发现猫腻,一个名为svchost.exe的出处竟然是c:\windows\system\,而一般该程序都在c:\windows\system32\下,所以该进程是有问题的,还发现相关进程dllhost.exe,那就继续按照该线索继续纠缠幕后黑手好了,启动“进程模块分析”,找出了大量与其有关的模块信息,在模块信息中,有一个引起了我的注意,因为文件的目录非常“长”,并且文件名称非常长,按照其路径,找到了该地址,进入该地址(地址太长,我就不列举了,是一个临时文件地址),进行删除,发现不让删除,使用较简单的手法,都无法删掉(XP系统有这样的死角,无需较劲,其实还是有办法删掉的)。

进行“进程模块分析”:

无法删除幕后的黑手,那么只好干掉“前面的小弟”,“敲山震虎”,kill掉该进程,然后删除该进程,发现删不掉,原来立刻又启动了,于是使用工具强制删除,这回是直接删除掉该进程(出处是c:\windows\system\的svchost.exe进程)。随后删除所有盘符下的.vbs,执行删除脚本,删除所有盘符下的快捷方式。

重启机器,再次打开,发现一切正常,病毒并没有复发。

但是又遇到了新的问题,所有新创建的正常的快捷方式都无法打开,“我的电脑”打不开,IE异常,一些文件的关联都失效了,这是病毒修改注册表所导致的,因此借助工具恢复后,一切恢复正常。

至此,该病毒所造成的影响在手动情况下,已经消除。

五、由手动过程制作病毒专杀工具

由于我初中学的是VB,而高中搞奥林匹克竞赛学的是PASCAL,此时只能用VB来做

该程序,以下简单的将软件的核心代码贴上(因为当时比较紧急,一个下午写成,所以代码么有讲求严格规范):

恢复注册表代码——用于修复注册表修改:

Sub reg()

Call SaveString(HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Windows", "load", "")  '启动项

Call SaveStringg(HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\cmdfile\shell\open\command", "", Chr(34) & "%1" & Chr(34) & Space(1) & "%*")

Call SaveStringg(HKEY_LOCAL_MACHINE, "software\classes\batfile\shell\open\command", "", Chr(34) & "%1" & Chr(34) & Space(1) & "%*")

Call SaveStringg(HKEY_LOCAL_MACHINE, "software\classes\chm.file\shell\open\command", "", "C:\WINDOWS\hh.exe" & Space(1) & "%1")

Call SaveStringg(HKEY_CLASSES_ROOT, "CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}\shell\openhomepage\command", "", "C:\Program Files\Internet Explorer\iexplore.exe")

Call SaveStringg(HKEY_LOCAL_MACHINE, "software\classes\clsid\{871C5380-42A0-1069-A2EA-08002B30309D}\shell\openhomepage\command", "", "C:\Program Files\Internet Explorer\iexplore.exe")

Call SaveStringg(HKEY_LOCAL_MACHINE, "SOFTWARE\CLASSES\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\explore\command", "", "")

Call SaveStringg(HKEY_LOCAL_MACHINE, "SOFTWARE\CLASSES\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\open\command", "", "")

DeleteKey HKEY_LOCAL_MACHINE, "SOFTWARE\CLASSES\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\explore\command"

DeleteKey HKEY_LOCAL_MACHINE, "SOFTWARE\CLASSES\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\explore"

DeleteKey HKEY_LOCAL_MACHINE, "SOFTWARE\CLASSES\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\open\command"

DeleteKey HKEY_LOCAL_MACHINE, "SOFTWARE\CLASSES\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\open"

Call SaveStringg(HKEY_CLASSES_ROOT, "inffile\shell\open\command", "", "C:\WINDOWS\system32\notepad.exe" & Space(1) & "%1")

Call SaveStringg(HKEY_CLASSES_ROOT, "inifile\shell\open\command", "", "C:\WINDOWS\system32\notepad.exe" & Space(1) & "%1")

Call SaveStringg(HKEY_CLASSES_ROOT, "regfile\shell\open\command", "", "regedit.exe" & Space(1) & "%1")

Call SaveStringg(HKEY_CLASSES_ROOT, "helpfile\shell\open\command", "", "winhlp32.exe" & Space(1) & "%1")

Call SaveStringg(HKEY_LOCAL_MACHINE, "software\classes\crmlog_auto_file\shell\open\command", "", "")

Call SaveStringg(HKEY_LOCAL_MACHINE, "software\classes\application\iexplore.exe\shell\open\command", "", "%SystemRoot%\System32\WScript.exe" & Space(1) & Chr(34) & "C:\WINDOWS\explorer.exe" & Chr(34) & "OIE")

End Sub

扫描部分:

Private Sub SearchDirsalls(curpath$)

Dim dirs%, dirbuf$(), i%

Picture1.Cls

Picture1.Print "检索>> " & curpath$

Form1.Caption = "郑大扫帚(1KB文件夹图标病毒专杀)-郑州大学计算机俱乐部-信工四班-@@可按需要终止扫描@@"

DoEvents

If Not Running% Then Exit Sub

hItem& = FindFirstFile(curpath$ & vbAllFiles, WFD)

If hItem& <> INVALID_HANDLE_VALUE Then

Do

If (WFD.dwFileAttributes And vbDirectory) Then

If Asc(WFD.cFileName) <> vbKeyDot Then

TotalDirs% = TotalDirs% + 1

If (dirs% Mod 10) = 0 Then ReDim Preserve dirbuf$(dirs% + 10)

dirs% = dirs% + 1

dirbuf$(dirs%) = Left$(WFD.cFileName, InStr(WFD.cFileName, vbNullChar) - 1)

End If

ElseIf Not UseFileSpec% Then

TotalFiles% = TotalFiles% + 1

End If

Loop While FindNextFile(hItem&, WFD)

Call FindClose(hItem&)

End If

If UseFileSpec% Then

SendMessage hLB&, WM_SETREDRAW, 0, 0

Call SearchFileSpecall(curpath$)

SendMessage hLB&, WM_VSCROLL, SB_BOTTOM, 0

SendMessage hLB&, WM_SETREDRAW, 1, 0

End If

For i% = 1 To dirs%: SearchDirssyin curpath$ & dirbuf$(i%) & vbBackslash: Next i%

End Sub

强制杀出守护进程svchost.exe和dllhost.exe:

Function killsvo()

Dim my         As PROCESSENTRY32

Dim l         As Long

Dim l1         As Long

Dim flag         As Boolean

Dim mName         As String

Dim i         As Integer

l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

If l Then

my.dwSize = 1060

If (Process32First(l, my)) Then                 '遍历第一个进程

Do

Dim mProcID         As Long

i = InStr(1, my.szExeFile, Chr(0))

mName = LCase(Left(my.szExeFile, i - 1))

If mName = "dllhost.exe" Then

PID = my.th32ProcessID

pname = mName

mProcID = OpenProcess(1&, -1&, PID)

TerminateProcess mProcID, 0&

Else

If mName = "wscript.exe" Then

PID = my.th32ProcessID

pname = mName

mProcID = OpenProcess(1&, -1&, PID)

TerminateProcess mProcID, 0&

Else

If mName = "svchost.exe" Then

PID = my.th32ProcessID

If GetProcessPathByProcessID(PID) = "C:\WINDOWS\system\svchost.exe" Then

pname = mName

mProcID = OpenProcess(1&, -1&, PID)

TerminateProcess mProcID, 0&

flag = True

Else

End If

Else

flag = False

End If

End If

End If

Loop Until (Process32Next(l, my) < 1)                         '遍历所有进程知道返回值为False

End If

l1 = CloseHandle(l)

End If

End Function

清楚相关的病毒自启动inf文件:(防止优盘内的病毒传染)

Private Sub inf_Click()

Call killsvo

Call reg

If Running% Then: Running% = False: Exit Sub

Dim drvbitmask&, maxpwr%, pwr%

On Error Resume Next

FileSpec$ = "AutoRun.inf"

'InputBox("扫描文件类型或精确文件名:" & vbCrLf & vbCrLf & _

"" & _

" " & _

"" & vbCrLf & _

"", _

"Find File(s)", "*.exe")

If Len(FileSpec$) = 0 Then Exit Sub

MousePointer = 11

Running% = True

UseFileSpec% = True

If killgame = True Then

Else

inf.Caption = "停止"

lnk.Enabled = False

yincang.Enabled = False

mnuFolderInfo.Enabled = False

mnuFindFiles.Enabled = False

End If

drvbitmask& = GetLogicalDrives()

If drvbitmask& Then

maxpwr% = Int(Log(drvbitmask&) / Log(2)) '获得最大盘符处

For pwr% = 1 To maxpwr%

If Running% And (2 ^ pwr% And drvbitmask&) Then _

Call SearchDirsinf(Chr$(vbKeyA + pwr%) & ":\")

Next

End If

Running% = False

UseFileSpec% = False

If killgame = True Then

Else

inf.Caption = "清理自动运行INF"

mnuFolderInfo.Enabled = True

yincang.Enabled = True

mnuFindFiles.Enabled = True

lnk.Enabled = True

End If

MousePointer = 0

Picture1.Cls

Picture1.Print "扫描病毒数: " & List1.ListCount - number & "  " & ""

Beep

If killgame = True Then

Else

SendMessage hLB&, LB_ADDSTRING, 0, _

ByVal "——————已完成清理自动运行INF——————郑州大学计算机俱乐部"

number = number + 1

End If

End Sub

修复文件隐藏属性及恢复隐藏文件为显示:

Private Sub SearchFileSpecall(curpath$)

hFile& = FindFirstFile(curpath$ & FileSpec$, WFD)

If hFile& <> INVALID_HANDLE_VALUE Then

Do

DoEvents

If Not Running% Then Exit Sub

SendMessage hLB&, LB_ADDSTRING, 0, _

ByVal "修复>>" & curpath$ & Left$(WFD.cFileName, InStr(WFD.cFileName, vbNullChar) - 1)

rval = SetFileAttributes(curpath$ & Left$(WFD.cFileName, InStr(WFD.cFileName, vbNullChar) - 1), attr)

Loop While FindNextFile(hFile&, WFD)

Call FindClose(hFile&)

End If

End Sub

将所有非法的快捷方式清除:

Private Sub lnk_Click()

Call killsvo

Call reg

If Running% Then: Running% = False: Exit Sub

Dim drvbitmask&, maxpwr%, pwr%

On Error Resume Next

FileSpec$ = "*.lnk"

'InputBox("扫描文件类型或精确文件名:" & vbCrLf & vbCrLf & _

"" & _

" " & _

"" & vbCrLf & _

"", _

"Find File(s)", "*.exe")

If Len(FileSpec$) = 0 Then Exit Sub

MousePointer = 11

Running% = True

UseFileSpec% = True

If killgame = True Then

Else

lnk.Caption = "停止"

mnuFolderInfo.Enabled = False

mnuFindFiles.Enabled = False

yincang.Enabled = False

inf.Enabled = False

End If

drvbitmask& = GetLogicalDrives()

If drvbitmask& Then

maxpwr% = Int(Log(drvbitmask&) / Log(2)) '获得最大盘符处

For pwr% = 1 To maxpwr%

If Running% And (2 ^ pwr% And drvbitmask&) Then _

Call SearchDirslnk(Chr$(vbKeyA + pwr%) & ":\")

Next

End If

Running% = False

UseFileSpec% = False

If killgame = True Then

Else

lnk.Caption = "清理全盘被感染快捷方式"

mnuFolderInfo.Enabled = True

yincang.Enabled = True

mnuFindFiles.Enabled = True

inf.Enabled = True

End If

MousePointer = 0

Picture1.Cls

Picture1.Print "扫描病毒数: " & List1.ListCount - number & "  " & ""

Beep

If killgame = True Then

Else

SendMessage hLB&, LB_ADDSTRING, 0, _

ByVal "——————已完成清理全盘被感染快捷方式——————郑州大学计算机俱乐部"

number = number + 1

End If

End Sub

制作完成的郑大扫帚——1kb文件夹图标病毒专杀:

转载于:https://www.cnblogs.com/zdcaolei/archive/2012/03/19/2406952.html

肢解“文件夹图标”病毒,制作专杀工具——“郑大扫帚”相关推荐

  1. 为什么一定要杀掉病毒?---帮一位老师解决MyDocument.exe优盘文件夹图标病毒问题...

    最近一位大学老师给我抱怨了一个她遇到的烦恼,一直在纠结,生活都被打乱了,事情大概是这样的: 她的优盘里辛辛苦苦弄好备课文件,放在了优盘里,可是每次上课时,就是找不到文件.有时好多文件都被修改了,非常烦 ...

  2. Net-Worm.Win32.Kido.ih蠕虫病毒分析+专杀工具源代码+手工清除全过程

    Net-Worm.Win32.Kido.ih蠕虫病毒分析+专杀工具源代码+手工清除全过程                                                         ...

  3. 文件夹快捷方式VBS病毒清除专杀

    文件夹快捷方式病毒清除专用附件包含下面几部分. 1.自动化清除脚本 2.NTFS系统盘专用清理工具清理工具和FAT32系统盘专用清理工具 3.恢复文件夹属性工具 首先使用"自动化清除脚本程序 ...

  4. 自己动手写个病毒专杀工具

    下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdf 大数据测试过程.策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 此 ...

  5. 杀毒我做主:病毒专杀工具自己编写

    如今病毒木马层出不穷,变种也是一个接一个.反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费提供病毒专杀工具,这个举措对普通用户来 说确实很有帮助.其实写病毒专杀工具也不像大家想象的那么神秘, ...

  6. c#编写病毒专杀工具(一)

    如今病毒木马蠕虫层出不穷,变种也是一个接一个.反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费提供病毒专杀工具,这个举措对普通用户来说 确实很有帮助.其实写病毒专杀工具也不像大家想象的那么神 ...

  7. 专杀工具编写思路(转)

    本文实例讲述了VC实现的病毒专杀工具的方法.非常实用,分享给大家供大家参考.具体实现方法如下: 如今病毒木马蠕虫层出不穷,变种也是一个接一个.反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费 ...

  8. 隐藏专杀工具文件夹病毒专杀工具

    题记:写这篇博客要主是加深自己对隐藏专杀工具的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 下载地址:http://download.csdn.net/detail/yousuo ...

  9. 网络安全学习第4篇-使用特征码和MD5对勒索病毒进行专杀,并对加密文件进行解密

    请使用IDA或其它分析工具分析本次的样本文件,写一个简要的行为分析报告,并编写一个针对于这次样本的专杀(恢复)程序. 要求: 1.样本分析只要说明主要行为即可.提示:sub_401320主要用于文件加 ...

最新文章

  1. 浙江大学PAT上机题解析之1010. 一元多项式求导 (25)
  2. why is pc important for university students?
  3. (转)c# 扩展方法
  4. Eclipse之ANT使用
  5. C#2005中如何把unicode编码的数字转化为EBCDIC编码
  6. java project整合spring和hibernate
  7. [转载] AUML——Supplement Documents
  8. VS2012--应用程序无法正常启动0xc000007b 的错误
  9. IE下打开ClearType后透明字体问题解决
  10. 巨头垂涎却不能染指,loT 数据库风口已至
  11. 什么是最适合云数据库的架构设计?
  12. java 线程 寄存器 地址_Java高级进阶多线程学习之路(四)CPU与内存
  13. 初步解决网同客户端升级后局域网不能上网的问题
  14. vs.Net 2003 安装
  15. iOS base64解码失败
  16. 计算机等级考试三级信息安全知识整理
  17. python销毁线程_python线程销毁
  18. Lambda与Stream流
  19. 有人说程序员是一个很高大上又高不可攀的职业,你认同吗?
  20. C# System.Data.Sqlite.dll 的注意事项

热门文章

  1. [Vue.js进阶]从源码角度剖析vue-router(三)
  2. 深入理解Java Proxy和CGLIB动态代理原理
  3. 《Adobe Photoshop CS5中文版经典教程(全彩版)》—第2课2.8节使用仿制图章工具修复特定区域...
  4. 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序
  5. 关于类和对象的进一步讨论 C++
  6. 如何利用极致业务基础平台主界面容器工具配置出漂亮的业务系统
  7. 数据库路由中间件MyCat - 源代码篇(15)
  8. vue项目通过命令行传参实现多环境配置(基于@vue/cli)
  9. 零基础转行学Java到底难不难?
  10. mysql5.6更改datadir数据存储目录