[ 按此下载文章原文、脚本及病毒样本] [按此加我为友情链接,谢谢]
作者: 张宇( zymail@vip.sina.com),北亚 硬盘数据恢复中心,转载请联系作者,如果实在不想联系作者,至少请保留版权,谢谢。
引言:这是我以前写的一篇文章,算是解决问题的一个总结,一直没有发表,虽然到现在,文中提到的病毒已经是小菜一碟了,但这个解决方法实际就是一个完整的杀毒软件最普通的杀毒算法,也算是抛砖引玉吧,不当之处请多指正。
文中涉及到的文件(除了用到的那几个软件)以及文章的DOC版已上传到附件中。
注意:压缩包里含病毒样本,测试时请断开网络在虚拟机下测试。

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

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


    在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文件时,发现病毒已被完全清除,直到现在,未发现异常情况。
回想杀灭此病毒的过程,的确是花费了很大心思,写下来,希望整个流程对读者对付病毒或其他方面有帮助。

北亚数据恢复中心 张宇
[url]http://www.sjhf.net[/url]

本文出自 “张宇(数据恢复)” 博客,请务必保留此出处http://zhangyu.blog.51cto.com/197148/141977

转载于:https://my.oschina.net/u/3579120/blog/1507686

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

  1. macbook怎么运行exe文件 mac打开exe文件的三大方法

    exe文件是Windows系统的可执行文件,虽然Mac系统上无法直接打开exe文件,但是你可以在Mac电脑上安装双系统或者虚拟机来实现mac电脑上运行exe文件.除了这两种方法之外,你还可以在Mac电 ...

  2. Pycharm 中py文件编译成exe文件出现的问题和一个问题解决

    1 pyinstaller 命令和参数: usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--add-data & ...

  3. 在没有安装VC软件的电脑上也可以执行的exe文件

    在debug 和 release中都有exe文件 ,将Release中.exe文件拷出来才可以用: 在菜单栏上的Build--->Set Active Configration-->Win ...

  4. Java执行.exe文件

    Java执行.exe文件, 这里以Java调用g++编译程序为例讲解 (我的g++编译器的和程序都在H:/bin/gcc/bin这个目录) 先来看程序: package wen.hui; import ...

  5. Ctfmon.exe 文件

    什么是 Ctfmon.exe (Ctfmon.exe) 文件?  Ctfmon.exe 文件有哪些功能? 我可以删除 Ctfmon.exe 文件吗? 第一种方法 CTFMON.EXE是Office自动 ...

  6. 如何在PowerShell中使用带有空格和引号的参数运行EXE文件

    本文翻译自:How to run an EXE file in PowerShell with parameters with spaces and quotes How do you run the ...

  7. 托管exe文件的加载和执行

    托管exe文件被启动的时候,首先被PE Loader载入.PE Loader载入exe文件之后,会分析PE文件头的data directory table,如果CLR_Header内的值不为0,表示该 ...

  8. 双击.exe文件出现Debug Error: abort() has been called解决办法(之一)

    在vs中编译正常的文件,然后双击.exe文件(Debug文件夹下的)却出现 Debug Error: abort() has been called 解决方法: 1.我记得之前有添加过环境变量 2.把 ...

  9. 使用Dependency Walkers来检查exe文件中缺少的dll

    在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字--动态链接库.现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录, ...

  10. asp调用打开exe文件

    让IE6.0执行EXE文件的网页             说到要做一个让网页让IE6.0浏览的时候来执行空间下的一个EXE文件的方法要和以前写过的5.0的方法是完全不一样的了,5.0的总体思路是用一个 ...

最新文章

  1. Stackoverflow 高赞答案,为什么牛逼的程序员都不用 “ ! = null ' 做判空
  2. IE6/7/8/9中Table/Select的innerHTML不能赋值
  3. [CRM] CRM 产品周期
  4. C# IL DASM 使用
  5. SpringBoot+JsTree实现在编辑时能选择树形结构并获取选中的ID
  6. javascript 设计模式_开发者都应该了解的7种JavaScript设计模式
  7. vue知识总结第一篇vue组件的定义以及父子组件的传值。
  8. Jupyter notebook 不安装主题,通过修改css更改 默认字体,字体大小等
  9. 《java程序员修炼之道》pdf书籍
  10. 解决: Elements in iteration expect to have ‘v-bind:key‘ directives
  11. 工作中影响提高的一些想法
  12. Java笔记-Spring Boot SSL(https)实例
  13. 基于Linux操作系统的底层驱动技术
  14. openresty查看log
  15. NYOJ--106--背包问题
  16. XShell6免费版获取(个人版)
  17. 鸿蒙 悟空遥控,利用悟空遥控推送软件,成功实现高德地图等三方APP装
  18. 计算机应用基础题库及答案
  19. 台式计算机如何双屏显示,电脑怎么分屏?|台式电脑双显示器连接方法
  20. .bat、python与C++程序进行批量处理的学习与实践

热门文章

  1. 更改C盘中Pycharm缓存文件目录
  2. 【微信小程序】webview向h5页面传值
  3. Hbuilder开发APP(一)——底部导航条简单实现
  4. HTML制作导航条的方法
  5. new115.com dz.html,超实用的HTML代码段(赵荣娇)
  6. 经典JavaScript正则表达式实战(转)
  7. 如何实现中文汉字进行笔划(笔画)排序?
  8. Inflated 3D ConvNet 【I3D】
  9. python中close函数的用法_skft包 pythonpython close()是什么?python close()定义及用法详解...
  10. 网络延迟到底是什么东西?