Board logo

标题: [安全相关] SOLA病毒染毒文件批处理修复工具V1.0 [打印本页]

作者: namejm    时间: 2009-4-13 00:08     标题: SOLA病毒染毒文件批处理修复工具V1.0

  SOLA病毒主要通过移动介质传播,主要感染以.doc、.jpg、.txt或.exe为后缀名的文件,偶尔也会感染文件夹,如果你有大量的doc文档或jpg文档需要在不同的机器行拷来拷去,一旦被它缠上,那绝对是灾难一场。

  此病毒感染文件后的主要表现为:被感染的原始文件消失,代之以.exe为后缀名的同名文件,双击这些.exe文件,还会造成重复感染。

  SOLA病毒在打开了自动播放功能的机器上十分容易发作。它会关联盘符的双击动作和右键打开动作,全盘感染文件,并在后台监控新插入的移动介质,一旦发现有新的可写移动存储介质插入,将迅速感染新的移动存储介质。

  实际上,这些消失了的文件并没有真正丢失,而是放在与之同名的.exe文件中,而这些.exe文件,实际上是用rar.exe命令行软件压缩后的自解压文件,里面还存有一个Function.dll文件和一个以.bat为后缀名的文件。把这些病毒exe文件后缀名改为.rar之后,用WinRAR软件打开它,可以看到里面保存有上述文件——强烈建议先改为.rar后缀之后再打开,否则,很容易造成重复感染!

  本人头两天在同事机器上帮忙转移机器上的办公文档之后,U盘不慎中此病毒,幸好本人机器上的Norton干起活来还不赖,稀里哗啦删除了不少染毒文件。幸好U盘里的文档在我的机器上早已有备份,否则,我只有跳楼的份了。

  触目惊心的教训就摆在眼前,迫使我花了点时间去了解这个病毒,一番搜索下来,居然发现SOLA病毒的主体代码竟然是批处理写就,并且作者良心未泯(抑或是作者太过狡猾?),染毒文件都已经做了备份,可以手工恢复。但是用手工恢复的方法太费事,于是狠下心来,花了两天功夫,从rar.exe命令学起,边学边写代码,于是产生了“SOLA病毒染毒文件修复工具V1.0”。

  本工具能修复被SOLA病毒感染的文件,从而最大程度减少您的损失!

  注意:

  1、本工具需要与WinRAR的命令行程序rar.exe一起配合使用:把rar.exe放到批处理所在的目录下,或者放到%path%所在目录,或者把rar.exe所在的目录加入到%path%环境变量中去;可以到这个帖子中下载rar.exe程序:http://bbs.bathome.net/viewthread.php?tid=4143
  2、修复文件时,将会把染毒文件添加.rar后缀名,而不是直接删除,若不放心可以直接手工解毒;
  3、这个代码虽然反复做了测试,以保证各种功能不出错,但是,有可能还有考虑不周的地方,请各位测试之后及时提出,以便消除bug;
  4、晚上已经没多少时间发表更多的资料,关于SOLA更详细的资料明天再在2楼发出。
  1. @echo off
  2. :: 功能:修复被SOLA病毒感染的文件
  3. :: 1、可以列出指定路径下所有受感染文件的列表,并可以按文件类型导出受感染文件的列表
  4. :: 2、可以对文件列表中列出的文件进行修复,也可以对指定路径下的文件进行修复
  5. :: Cody by namejm @bbs.bathome.net 2009.4.12~
  6. :: 声明:转载请注明出处
  7. color 2f
  8. mode con lines=25
  9. set TT=SOLA病毒染毒文件修复工具1.0
  10. :Main
  11. title %TT%-SOLA病毒简介
  12. cls
  13. echo.&echo.
  14. echo                                SOLA病毒简介
  15. echo.
  16. echo      SOLA病毒主要通过移动介质传播,主要感染以.doc、.jpg、.txt或.exe为后缀名
  17. echo    的文件,偶尔也会感染文件夹。
  18. echo.
  19. echo      SOLA病毒在打开了自动播放功能的机器上十分容易发作。它会关联盘符的双击动
  20. echo    作和右键打开动作,全盘感染文件,并在后台监控新插入的移动介质,一旦发现有新
  21. echo    的可写移动存储介质插入,将迅速感染新的移动存储介质。
  22. echo.
  23. echo      此病毒感染文件后的主要表现为:被感染的原始文件消失,代之以.exe为后缀名
  24. echo    的同名文件,双击这些.exe文件,还会造成重复感染。
  25. echo.
  26. echo      实际上,这些消失了的文件并没有真正丢失,而是放在与之同名的.exe文件中,
  27. echo    而这些.exe文件,实际上是用rar.exe命令行软件压缩后的自解压文件,里面还存有
  28. echo    一个Function.dll文件和一个以.bat为后缀名的文件。把这些病毒exe文件后缀名改
  29. echo    为.rar之后,用WinRAR软件打开它,可以看到里面保存有上述文件——强烈建议先改
  30. echo    为.rar后缀之后再打开,否则,很容易造成重复感染!
  31. echo.
  32. echo      本工具能修复被SOLA病毒感染的文件,从而最大程度减少您的损失!
  33. echo.&echo                              按任意键继续...
  34. pause>nul
  35. :ChooseFunction
  36. title %TT%-选择功能
  37. cls
  38. echo.&echo.
  39. echo      本程序具有两大功能:获取染毒文件列表和修复染毒文件。
  40. echo.
  41. echo      若您仅需获取染毒文件列表,可以选择直接显示在当前屏幕上,或是保存到相应
  42. echo    的文本文件中,以方便您掌握SOLA病毒感染情况,从而有利于您做出合适的后续选择。
  43. echo.
  44. echo      修复染毒文件支持两种方式:通过直接扫描硬盘上的文件获取染毒文件列表,或
  45. echo    是读取上一次保存的染毒文件列表。修复时也可以选择是否保存染毒文件列表。
  46. echo.
  47. echo      请选择您需要的功能。
  48. echo.&echo.
  49. echo                         1 仅获取染毒文件列表
  50. echo.
  51. echo                         2 修复染毒文件
  52. echo.&echo.&echo.
  53. set Mode=
  54. set /p Mode=                        请选择功能(1/2):
  55. if not defined Mode goto Main
  56. if /i "%Mode%"=="1" goto ScanVirus
  57. if /i "%Mode%"=="2" goto ScanVirus
  58. goto Main
  59. :ScanVirus
  60. cls
  61. title %TT%-扫描病毒
  62. set "ScanRoute=%cd%"
  63. echo.&echo.
  64. echo      请输入要扫描的路径,或是把要处理的文件夹直接拖曳到本窗口中,程序将扫描
  65. echo    指定路径及其所有子目录下的所有染毒文件。
  66. echo.
  67. echo      直接回车将扫描当前目录及其所有子目录。
  68. echo.&echo.
  69. set /p ScanRoute=         请输入需要扫描的路径:
  70. set "ScanRoute=%ScanRoute:"=%"
  71. if /i "%Mode%"=="2" (
  72.     findstr /ic:"扫描项目:Sola病毒染毒文件扫描" "%ScanRoute%">nul 2>nul&&goto RepairFromList
  73. )
  74. set OutPut=
  75. set /p OutPut=       是否导出染毒文件列表(Y=是 其他键=否):
  76. if /i "%OutPut%"=="y" (
  77.     set OutPut=染毒文件列表.txt
  78. ) else set OutPut=
  79. if defined OutPut (
  80.     echo        请在下面指定保存路径(支持文件夹拖曳,直接回车将保存在当前目录下)
  81.     set "SaveRoute=%cd%"
  82.     set /p SaveRoute=       
  83.     if defined SaveRoute call set "SaveRoute=%%SaveRoute:"=%%"
  84.     call md "%%SaveRoute%%" 2>nul
  85.     call set "Output=%%SaveRoute%%.\%OutPut%"
  86.     (
  87.         echo 扫描项目:Sola病毒染毒文件扫描
  88.         echo 扫描时间:%date% %time%
  89.         echo 扫描目录(含子目录): "%ScanRoute%"
  90.         echo -------------------------------------------------------
  91.         echo.
  92.     )>"%OutPut%"
  93.     set OutPut=^>^>"%OutPut%"
  94. )
  95. if /i "%Mode%"=="2" goto RepairFiles
  96. :ChooseScanMode
  97. cls
  98. title %TT%-选择扫描模式
  99. for /f "delims==" %%i in ('set num_ 2^>nul') do set %%i=0
  100. echo.&echo.
  101. echo       本工具提供了三种扫描模式,分别应对不同的情况,请视情况选择最适合的扫描
  102. echo     模式。
  103. echo.
  104. echo       最快模式:只验证exe压缩包中是否存在Function.dll,速度最快,精确度较低
  105. echo     ,并且导出的染毒文件列表不能按照原始文件类型进行统计,但是能适应文件中毒后
  106. echo     只改文件名不改后缀名的情况。
  107. echo.
  108. echo       快速模式:只验exe证压缩包中是否存在与exe文件同名的doc、jpg、txt或com文
  109. echo     件,速度较快,精度较高,导出的染毒文件列表能按照原始文件类型进行统计,但是
  110. echo     不能适应文件中毒后改名的情况。
  111. echo.
  112. echo       精确模式:同时验证exe压缩包中是否存在Function.dll文件、是否存在与exe文
  113. echo     件同名的doc、jpg、txt或com文件,精确度极高,速度较慢,导出的染毒文件列表能
  114. echo     按照原始文件类型进行统计,但是不能适应文件中毒后改名的情形。
  115. echo.
  116. echo                               1、最快模式
  117. echo.
  118. echo                               2、快速模式
  119. echo.
  120. echo                               3、精确模式
  121. echo.
  122. set ScanMode=
  123. set /p ScanMode=                       请选择扫描模式(1/2/3):
  124. if not defined ScanMode goto ChooseScanMode
  125. if "%ScanMode%"=="1" goto ScanQuickly1
  126. if "%ScanMode%"=="2" goto ScanQuickly2
  127. if "%ScanMode%"=="3" goto ScanExactly
  128. goto ScanMode
  129. :ScanQuickly1
  130. :: 快速扫描并列出所有被感染文件的路径
  131. :: 只验证压缩包中是否存在Function.dll,最快速,最不精确,不能按照文件类型进行统计,
  132. :: 但是能适应文件中毒后只改文件名不改后缀名的情况
  133. cls
  134. title %TT%-最快扫描模式
  135. echo.&echo.&echo.&echo.&echo.&echo.&echo.
  136. echo                正在扫描以下目录及其所有子目录,请耐心等待...
  137. echo.
  138. echo                "%ScanRoute%"
  139. echo.
  140. set num=0
  141. for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
  142.    title 正在扫描"%%i"
  143.    for /f "delims=" %%j in ('rar lb "%%i"^|findstr /beic:"Function.dll"') do (
  144.        set /a num+=1
  145.        call echo .exe| "%%i"%OutPut%
  146.     )
  147. )
  148. (
  149.     echo.
  150.     echo -------------------------------------------------------
  151.     echo 被感染的文件总计 %num% 个
  152. )%OutPut%
  153. goto End
  154. :ScanQuickly2
  155. :: 快速扫描并按照文件类型列出所有被感染文件的路径
  156. :: 只验证压缩包中是否存在与exe文件同名的.doc、.jpg、.txt或.com文件,不够精确,不能
  157. :: 适应文件中毒后改名的情形
  158. :: 因为文件名中可能存在空格,所以,findstr不能精确匹配首尾
  159. cls
  160. title %TT%-快速扫描模式
  161. echo.&echo.&echo.&echo.&echo.&echo.&echo.
  162. echo                正在扫描以下目录及其所有子目录,请耐心等待...
  163. echo.
  164. echo                "%ScanRoute%"
  165. echo.
  166. for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
  167.     title 正在扫描"%%i"
  168.     set type=
  169.     for /f "delims=" %%j in ('rar lb "%%i"^|findstr /ei "\.doc \.jpg \.txt \.com"') do (
  170.         if /i "%%~ni"=="%%~nj" (
  171.             set /a num_%%~xj+=1
  172.             set type=%%~xj
  173.             call echo %%type%%| "%%i"%OutPut%
  174.         )
  175.     )
  176. )
  177. goto Count
  178. :ScanExactly
  179. :: 用最精确的方法判断染毒文件,并按照文件类型列出所有被感染文件的路径
  180. :: 先验证压缩包中是否存在Function.dll文件,再验证压缩包中是否存在与exe文件同名的doc
  181. :: jpg、txt或com文件,比较精确,不能适应文件中毒后改名的情形
  182. :: 因为文件名中可能存在空格,所以,不能用findstr /be同时匹配首尾
  183. cls
  184. title %TT%-精确扫描模式
  185. echo.&echo.&echo.&echo.&echo.&echo.&echo.
  186. echo                正在扫描以下目录及其所有子目录,请耐心等待...
  187. echo.
  188. echo                "%ScanRoute%"
  189. echo.
  190. for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
  191.     title 正在扫描"%%i"
  192.     for /f "delims=" %%j in ('rar lb "%%i"^|findstr /beic:"Function.dll"') do (
  193.         set type=
  194.         for /f "delims=" %%k in ('rar lb "%%i"^|findstr /ei "\.doc \.jpg \.txt \.com"') do (
  195.             if /i "%%~ni"=="%%~nk" (
  196.                 set /a num_%%~xk+=1
  197.                 set type=%%~xk
  198.                 call echo %%type%%| "%%i"%OutPut%
  199.             )
  200.         )
  201.     )
  202. )
  203. :Count
  204. set Total=0
  205. (
  206.     echo.
  207.     echo -------------------------------------------------------
  208. )%OutPut%
  209. for /f "tokens=2,3 delims=_=" %%i in ('set num_ 2^>nul') do (
  210.     echo 被感染的%%i文件 %%j 个%OutPut%
  211.     set /a Total+=%%j
  212. )
  213. echo 被感染的文件总计 %Total% 个%OutPut%
  214. :: 按类型罗列被感染文件
  215. if defined OutPut (
  216.     cls
  217.     echo.&echo.&echo.&echo.&echo.&echo.&echo.
  218.     echo                正在按照文件类型整理被感染的文件,请稍候...
  219.     for %%i in (doc jpg txt com) do (
  220.         (
  221.             echo 扫描项目:Sola病毒染毒文件扫描(仅.%%i格式)
  222.             echo 扫描时间:%date% %time%
  223.             echo 扫描目录(含子目录): "%ScanRoute%"
  224.             echo -------------------------------------------------------
  225.             echo.
  226.         )>.%%i格式染毒文件列表.txt
  227.     )
  228.     for /f "tokens=1* delims=| " %%i in ('findstr /b "\." "%OutPut:~3,-1%"') do (
  229.         echo %%i| "%%~fj">>"%SaveRoute%.\%%~xi格式染毒文件列表.txt"
  230.     )
  231.     for /f "tokens=2,3 delims=_=" %%j in ('set num_ 2^>nul') do (
  232.         (
  233.             echo.
  234.             echo -------------------------------------------------------
  235.             echo 被感染的%%j文件总计 %%k 个
  236.         )>>"%SaveRoute%.\%%j格式染毒文件列表.txt"
  237.     )
  238. )
  239. :End
  240. echo.
  241. echo                按任意键退出...
  242. pause>nul
  243. exit
  244. :RepairFiles
  245. :: 恢复染毒文件
  246. :: 先探测哪些是染毒文件,然后从染毒文件中解压出原始文件,并把染毒文件加上.rar后缀名做备份
  247. :: 并去掉原始文件可能存在的各种属性
  248. :: 若原始文件是exe,还需要把解压出来的com改名为exe
  249. :: 因为病毒作者提取文件名的时候,把第一个点号之前的字符串认为是完整的文件名
  250. :: 因此,当文件名中含有多个点号的时候,恢复出来的文件名只保留第一个点号之前的字符串
  251. findstr /ic:"扫描项目:Sola病毒染毒文件扫描" "%ScanRoute%">nul 2>nul&&goto RepairFromList
  252. :: 通过扫描染毒文件来确定要修复的文件
  253. :: 为了能适应扫描大量文件对速度的要求,同时也为了适应中毒后手工修改文件名的极端情况
  254. :: 按照最快扫描模式判断染毒文件
  255. cls
  256. title %TT%-通过扫描染毒文件确定要修复的文件
  257. echo.&echo.&echo.&echo.&echo.&echo.&echo.
  258. echo                正在修复以下目录及其所有子目录中的染毒文件,请耐心等待...
  259. echo.
  260. echo                "%ScanRoute%"
  261. echo.
  262. for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
  263.     for /f "delims=" %%j in ('rar lb "%%i"^|findstr /beic:"Function.dll"') do (
  264.         echo .exe| "%%i"%OutPut%
  265.         rar e -c- -idq "%%i" "%%~dpi" n "%%~ni.*"&&(
  266.             ren "%%i" "%%~nxi.rar"
  267.             attrib -s -h -r "%%~dpni.*"
  268.             ren "%%~dpni.com" "*.exe" 2>nul
  269.         )
  270.     )
  271. )
  272. echo.
  273. echo                按任意键退出...
  274. pause>nul
  275. exit
  276. :RepairFromList
  277. :: 从染毒文件列表中获取要修复的文件
  278. :: 以点号打头的行为文件路径所在的行
  279. cls
  280. title %TT%-从染毒文件列表获取要修复的文件
  281. echo.&echo.&echo.&echo.&echo.&echo.&echo.
  282. echo                正在修复以下文件中所列出的染毒文件,请耐心等待...
  283. echo.
  284. echo                "%ScanRoute%"
  285. echo.
  286. for /f "tokens=1* delims=| " %%i in ('findstr /b "\." "%ScanRoute%"') do (
  287.     echo 正在处理 %%j
  288.     rar e -c- -idq %%j "%%~dpj" n "%%~nj.*"&&(
  289.         ren %%j "%%~nxj.rar"
  290.         attrib -s -h -r "%%~dpnj.*"
  291.         ren "%%~dpnj.com" "*.exe" 2>nul
  292.     )
  293. )
  294. echo.
  295. echo                按任意键退出...
  296. pause>nul
  297. exit
复制代码

作者: namejm    时间: 2009-4-13 00:09

占位编辑
作者: Batcher    时间: 2009-4-13 00:24

1、本工具需要与WinRAR的命令行程序rar.exe一起配合使用;

这里是否考虑明确指出应该把rar.exe和批处理放到同一目录(或者修改PATH环境变量)?
作者: namejm    时间: 2009-4-13 22:16

  遵照batcher的提议,已经修改了那个提示。
作者: stuqx    时间: 2009-4-14 11:54

呵呵   楼主也中这个病毒了呀   我前几个礼拜也见了这个  手动删完了  不过DOC什么的文件还在
作者: Batcher    时间: 2009-4-14 13:46     标题: 回复 5楼 的帖子

这个病毒作者放出的病毒不止一个版本,中毒后的症状有所不同,手工查杀的方法也有所区别。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2