手工杀掉双线程、感染所有EXE文件病毒

引言:这是我以前写的一篇文章,算是解决问题的一个总结,一直没有发表,虽然到现在,文中提到的病毒已经是小菜一碟了,但这个解决方法实际就是一个完整的杀毒软件最普通的杀毒算法,也算是抛砖引玉吧,不当之处请多指正。
    文中涉及到的文件(除了用到的那几个软件)以及文章的DOC版已上传到附件中。
    注意:压缩包里含病毒样本,测试时请断开网络在虚拟机下测试。
 

手动杀灭 “刘德华病毒” 顽固变种

前些日子,与一起培训的学生照过合影后回到机房,我在我的电脑中开了一个完全共享,希望他们通过网络将照片传过来。过了一会,查看共享目录时,我发现有一个名称为“我的照片”的.EXE文件,当时还纳闷,怎么快就把电子相册做好了?加上我的电脑里安装有及时更新的“卡巴斯基”,所以没多想便双击了那个“我的照片.exe”,随后电脑中出现一幅天王刘德华的照片,单击后退出了。看到并不是想要的合影时,我心想这下可能坏了。
电脑正常运行,并没有特别的异常情况,但我心想,一定不会这么简单,先上网查查吧。不查不知道,一查吓一跳,原来这是一个叫做“诡秘变种S”的病毒,大家也把它称为“刘德华病毒”,这种病毒主要通过局域网进行传播,它试图把自己复制到局域网其他用户的共享文件夹里。感染病毒之后,会将自己拷贝到系统目录下,文件名为“svchost.exe”。病毒会修改exe文件的关联方式,这样用户每次运行exe文件的时候都会先运行病毒。通过病毒的接应,黑客可以远程对用户电脑进行控制,任意删除用户电脑上的文件,获取用户存储在电脑上的信息。
   看到发作结果这么可怕,于是赶紧着手杀毒。卡巴斯基没有报警,看来只好用其他杀毒软件了,于是我试了试瑞星、金山等杀毒厂商提供的免费查毒功能,结果发现,没有一个可以查到。看来我所感染的这个是老式“诡秘变种S”的变种,目前还未被各杀毒厂商发现,看到其可能会获取用户资料,心里又万分焦急。无耐之下,尝试手动杀毒。经过一番努力,病毒基本处理干净,作为对大家解决病毒、木马问题的参考,写下我的处理过程。
    首先作为验证,我到C盘WINDOWS目录查找是否有svchost.exe文件,没有,可能是隐藏文件,于是想显示所有文件再查。点击资源管理器中的文件夹选项后,出现如下情况:
手工杀掉双线程、感染所有EXE文件病毒

    竟然不可以修改显示“隐藏文件和系统文件”属性,看来病毒已经在注册表作了手脚。试着运行REGEDIT.EXE,可以进入,进入后查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden,发现其下没有SHOWALL项,看来是病毒删除了。先按照下面注册表文件还原:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="显示所有文件和文件夹"
"Type"="radio"
"CheckedValue"=dword:00000001
"ValueName"="Hidden"
"DefaultValue"=dword:00000002
"HKeyRoot"=dword:80000001
"HelpID"="shell.hlp#51105"
    更改注册表后退出,再进入文件夹选项时已经出现了“显示所有文件和文件夹”的选项,选中后,立刻进入windows目录下,果然发现了病毒体svchost.exe(操作系统的svchost.exe并没有放在windows目录下),但过了一会再查看,发现又无法显示隐藏和系统文件了,删除svchost.exe文件时提示文件保护,无法删除。综合推断,病毒驻留程序会隔一段时间监视注册表的改动(其实是不管三七二十一重写特定键值)。按下“ctrl+alt+del”键进入任务管理器后查看,有多个svchost(有几个是系统核心进程),试着逐个结束,未果,看来病毒有自我保护技术(双线程或其他吧,没有具体分析)
    再次进入注册表编辑器,发现启动项中已加入了键名为”microsoft”,键值为”c:\windows\svchost.exe”的运行键。同时发现果然所有的.exe文件的关联方式都被改为了“C:\WINDOWS\svchost.exe "%1" %*”
    运行注册表监视程序Regmon,发现病毒会隔一段时间强行改动以下几个重要键值:自动运行、.EXE关联、是否显示隐藏文件、是否显示文件扩展名,以及添加“HKLM\SOFTWARE\mysoft”项。
    驻留程序无法结束,注册表不能改动,文件又无法删除,这可该怎么办?好办,请出WINHEX->著名磁盘编辑软件,主要的解决思路是利用WINHEX对磁盘进行编辑,从而对病毒体进行破坏,导致病毒体无法正常工作。首先打开REGEDIT.EXE,导出.exe的关联项,并修改为正常(自己后期编辑也可以),以防破坏病毒体后所有EXE文件打不开。下边是必改键值的REG文件的内容:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\exefile\shell\open\command]
@="\"%1\" %*"

    带毒状态下打开WINHEX,单击”TOOLS”下的”open disk”菜单,选择”logical drives”下的”Fixed drive (c)” 打开目录浏览器(access菜单旁边,如下图)
手工杀掉双线程、感染所有EXE文件病毒

    在winhex的目录浏览器中进入WINDOWS目录,找到” svchost.exe” ,在其目录条目上双击定位到SVCHOST.EXE文件在磁盘上的开始位置。接着在开始位置单击鼠标右键,选择”beginning of block” ,再向后翻3-8个左右的扇区,找个位置单击鼠标右键,选择” end of block”。紧跟着在BLOCK区的任意一处位置单击鼠标右键,选择”fill block”,填充全0值。这时候”svchost.exe”已经被破坏。
    接着重启计算机,发现弹出很多错误对话框,这是正常的,因为.exe的关联已经损坏,所以正常开机执行的启动程序都不能正常工作了。无所谓,操作系统还可以正常工作。随后直接双击我们备份好的关联.EXE的REG文件,即可运行所有.EXE文件。
    运行REGEDIT,删除自动运行里病毒的启动项。
    删除”C:\WINDOWS\SVCHOST.EXE”
    在系统中打开隐藏文件,查找大小为759,296个字节的.EXE文件,确定其同样为病毒体时,删除。
    至此病毒应该已经手动杀掉了,我在后来的几次虚拟机的试验中也确实发现已经干净了,但我真实的感染案例中却远没这么简单。
    正常运行了几天吧。我要安装一个软件,其安装程序在我的E盘,转到E盘执行SETUP后,发现怎么也装不上,老提示参数错误。反复重试后,猛然发现,在双击SETUP的同时,目录下自动生成了一个半透明的隐藏文件”setup .exe”(之前杀毒后已打开显示隐藏文件开关,此”SETUP .EXE”文件名中有一空格), 对比真正的文件,发现我E盘绝大部分EXE文件都被病毒修改,我又查了一下其他分区,发现除了C盘(系统分区)以外,别的分区均有被病毒修改的.EXE文件。仔细研究后发现,病毒对.EXE的修改方法是:病毒文件+好的.EXE文件+可能的12个字节,时间等属性不变,但大小会增加。
    当运行任一感染的.EXE文件后,其中的病毒体会首先执行,而后释放出正常的.EXE,执行正常的.EXE文件,执行后再将其删除,所以事实上病毒已再次发作。不得已,重复前面过程,将病毒从内存中清除出去,再着手修正感染的每个.EXE文件。要想修改每个被感染的.EXE文件,可不是件容易的事,又试了一下国内几个著名的杀毒软件,还是杀不掉,没办法,一边将病毒提交给各大杀毒厂商,一边自己动手处理。(截止此文写作,瑞星回复,他们已将笔者提交的特征码加入其新病毒库,经验证,的确已经可以查到)
    由于没有很好的现成工具能处理这么一大片文件,所以再次请出WINHEX(好强大的功能),我用WINHEX提供的脚本功能做了个专杀工具,虽然WINHEX提供的语法不是太严谨,但总算是可以实现要求了。
    首先我确保WINHEX没有被感染(不行可以重新安装一下),然后在C盘建立一个杀毒用的临时目录,如TEMP,然后进入命令提示符状态,执行:
  dir /b /s d:*.exe >c:\temp\d.ls
  dir /b /s e:*.exe >c:\temp\e.ls
……
    然后,在TEMP目录下用记事本编写两个扩展名为.WHX的文件
  //main.whx的内容:
  Closeall
  //接受列表文件,如C:\TEMP\D.LS,也可采用相对路径
  GetUserInput lspath "请输入杀毒的列表文件路径:"
  //打开列表文件
  Open lspath
  Assign pathcharnum 0
  SetVarSize pathcharnum 2
  {
  //从列表文件中读内容,如果遇到回车(0x0d0a)就把前面的字符加入变量中
  //同时清除此段内容,由于WINHEX语法所限,先将选中的.EXE文件的字符数写在路
  //径的后面(更改0x0d0a),以此限定变量的字符数
  Read tempA 2
  Move -1
  IfEqual tempA 0x0D0A
  Move -1
  Write pathcharnum
  Assign pathcharnum 0
  SetVarSize pathcharnum 2
  //WINHEX目前无法实现相同语法结构的嵌套,所以用调用另一脚本的方法实现
  ExecuteScript "kill.whs"
  Else
  Inc pathcharnum
  EndIf
  }[unlimited]



  //kill.whx的内容:
  move -2
  Read pathcharnumt 2
  goto 0
  Read path pathcharnumt
  Block 0 (pathcharnumt+1)
  Remove
  goto 0
  open path
  Assign estimate 0
  Assign TempB 0
  Assign FileSize GetSize
  //若打开文件大小小于病毒体,直接跳过,处理下一个文件
  IfGreater (0xB95ff-FileSize) 0
  JumpTo ContinueHere
  EndIf
  //特征判断
  block 0x100 0x10f
  Find 0x504500004C010800195E422A00000000 BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x5e0 0x5ef
  Find 0x60664000203940005C3940001154496E BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x1900 0x190f
  Find 0x010514164A00833D14164A000C0F8D4C BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x9000 0x900f
  Find 0xC0045BC383E8048B0083E804C38D4000 BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x10000 0x1000f
  Find 0x55F88D45D4E8A2E3FFFF668B45D46625 BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x200b0 0x200bf
  Find 0x8BC6E86930FEFF5E5BC38BC083C00850 BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x30000 0x3000f
  Find 0x8B08FF91CC000000EB228B45FC8B4010 BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x40000 0x4000f
  Find 0x8BD38B83D4010000FF93D00100005F5E BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x50000 0x5000f
  Find 0x6C7911706F44656661756C7453697A65 BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断
  block 0x60000 0x6000f
  Find 0x8B10FF12837D08007407C74324010000 BlockOnly
  IfFound
  Inc estimate
  EndIf
  //特征判断,判断结尾是否是病毒填充的12个字节
  block (FileSize-12) (FileSize-1)
  Find 0xE903000000960B0044444444 BlockOnly
  IfFound
  Assign TempB 1
  EndIf
  //处理最后12个字节,如果符合病毒特征,移除!
  IfGreater estimate*TempB 10
  block (FileSize-12) (FileSize-1)
  Remove
  EndIf
  //处理病毒附加的病毒头,如果符合病毒特征,移除!
  IfEqual estimate 10
  block 0x0 0xB95FF
  Remove
  EndIf
  //保存更改
  save
  Label ContinueHere
  //关闭文件
  Close

    编辑完这两个文件后,双击MAIN.WHX,执行WINHEX的脚本,很快脚本执行完毕,再进入磁盘查看.EXE文件时,发现病毒已被完全清除,直到现在,未发现异常情况。
回想杀灭此病毒的过程,的确是花费了很大心思,写下来,希望整个流程对读者对付病毒或其他方面有帮助。
 









本文转自 张宇 51CTO博客,原文链接:http://blog.51cto.com/zhangyu/141977,如需转载请自行联系原作者
上一篇:QT-Linguist使用方法48043111062


下一篇:【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。