复制代码
- @echo off
- :: 功能:修复被SOLA病毒感染的文件
- :: 1、可以列出指定路径下所有受感染文件的列表,并可以按文件类型导出受感染文件的列表
- :: 2、可以对文件列表中列出的文件进行修复,也可以对指定路径下的文件进行修复
- :: Cody by namejm @bbs.bathome.net 2009.4.12~
- :: 声明:转载请注明出处
- color 2f
- mode con lines=25
- set TT=SOLA病毒染毒文件修复工具1.0
- :Main
- title %TT%-SOLA病毒简介
- cls
- echo.&echo.
- echo SOLA病毒简介
- echo.
- echo SOLA病毒主要通过移动介质传播,主要感染以.doc、.jpg、.txt或.exe为后缀名
- echo 的文件,偶尔也会感染文件夹。
- echo.
- echo SOLA病毒在打开了自动播放功能的机器上十分容易发作。它会关联盘符的双击动
- echo 作和右键打开动作,全盘感染文件,并在后台监控新插入的移动介质,一旦发现有新
- echo 的可写移动存储介质插入,将迅速感染新的移动存储介质。
- echo.
- echo 此病毒感染文件后的主要表现为:被感染的原始文件消失,代之以.exe为后缀名
- echo 的同名文件,双击这些.exe文件,还会造成重复感染。
- echo.
- echo 实际上,这些消失了的文件并没有真正丢失,而是放在与之同名的.exe文件中,
- echo 而这些.exe文件,实际上是用rar.exe命令行软件压缩后的自解压文件,里面还存有
- echo 一个Function.dll文件和一个以.bat为后缀名的文件。把这些病毒exe文件后缀名改
- echo 为.rar之后,用WinRAR软件打开它,可以看到里面保存有上述文件——强烈建议先改
- echo 为.rar后缀之后再打开,否则,很容易造成重复感染!
- echo.
- echo 本工具能修复被SOLA病毒感染的文件,从而最大程度减少您的损失!
- echo.&echo 按任意键继续...
- pause>nul
- :ChooseFunction
- title %TT%-选择功能
- cls
- echo.&echo.
- echo 本程序具有两大功能:获取染毒文件列表和修复染毒文件。
- echo.
- echo 若您仅需获取染毒文件列表,可以选择直接显示在当前屏幕上,或是保存到相应
- echo 的文本文件中,以方便您掌握SOLA病毒感染情况,从而有利于您做出合适的后续选择。
- echo.
- echo 修复染毒文件支持两种方式:通过直接扫描硬盘上的文件获取染毒文件列表,或
- echo 是读取上一次保存的染毒文件列表。修复时也可以选择是否保存染毒文件列表。
- echo.
- echo 请选择您需要的功能。
- echo.&echo.
- echo 1 仅获取染毒文件列表
- echo.
- echo 2 修复染毒文件
- echo.&echo.&echo.
- set Mode=
- set /p Mode= 请选择功能(1/2):
- if not defined Mode goto Main
- if /i "%Mode%"=="1" goto ScanVirus
- if /i "%Mode%"=="2" goto ScanVirus
- goto Main
- :ScanVirus
- cls
- title %TT%-扫描病毒
- set "ScanRoute=%cd%"
- echo.&echo.
- echo 请输入要扫描的路径,或是把要处理的文件夹直接拖曳到本窗口中,程序将扫描
- echo 指定路径及其所有子目录下的所有染毒文件。
- echo.
- echo 直接回车将扫描当前目录及其所有子目录。
- echo.&echo.
- set /p ScanRoute= 请输入需要扫描的路径:
- set "ScanRoute=%ScanRoute:"=%"
- if /i "%Mode%"=="2" (
- findstr /ic:"扫描项目:Sola病毒染毒文件扫描" "%ScanRoute%">nul 2>nul&&goto RepairFromList
- )
- set OutPut=
- set /p OutPut= 是否导出染毒文件列表(Y=是 其他键=否):
- if /i "%OutPut%"=="y" (
- set OutPut=染毒文件列表.txt
- ) else set OutPut=
- if defined OutPut (
- echo 请在下面指定保存路径(支持文件夹拖曳,直接回车将保存在当前目录下)
- set "SaveRoute=%cd%"
- set /p SaveRoute=
- if defined SaveRoute call set "SaveRoute=%%SaveRoute:"=%%"
- call md "%%SaveRoute%%" 2>nul
- call set "Output=%%SaveRoute%%.\%OutPut%"
- (
- echo 扫描项目:Sola病毒染毒文件扫描
- echo 扫描时间:%date% %time%
- echo 扫描目录(含子目录): "%ScanRoute%"
- echo -------------------------------------------------------
- echo.
- )>"%OutPut%"
- set OutPut=^>^>"%OutPut%"
- )
- if /i "%Mode%"=="2" goto RepairFiles
- :ChooseScanMode
- cls
- title %TT%-选择扫描模式
- for /f "delims==" %%i in ('set num_ 2^>nul') do set %%i=0
- echo.&echo.
- echo 本工具提供了三种扫描模式,分别应对不同的情况,请视情况选择最适合的扫描
- echo 模式。
- echo.
- echo 最快模式:只验证exe压缩包中是否存在Function.dll,速度最快,精确度较低
- echo ,并且导出的染毒文件列表不能按照原始文件类型进行统计,但是能适应文件中毒后
- echo 只改文件名不改后缀名的情况。
- echo.
- echo 快速模式:只验exe证压缩包中是否存在与exe文件同名的doc、jpg、txt或com文
- echo 件,速度较快,精度较高,导出的染毒文件列表能按照原始文件类型进行统计,但是
- echo 不能适应文件中毒后改名的情况。
- echo.
- echo 精确模式:同时验证exe压缩包中是否存在Function.dll文件、是否存在与exe文
- echo 件同名的doc、jpg、txt或com文件,精确度极高,速度较慢,导出的染毒文件列表能
- echo 按照原始文件类型进行统计,但是不能适应文件中毒后改名的情形。
- echo.
- echo 1、最快模式
- echo.
- echo 2、快速模式
- echo.
- echo 3、精确模式
- echo.
- set ScanMode=
- set /p ScanMode= 请选择扫描模式(1/2/3):
- if not defined ScanMode goto ChooseScanMode
- if "%ScanMode%"=="1" goto ScanQuickly1
- if "%ScanMode%"=="2" goto ScanQuickly2
- if "%ScanMode%"=="3" goto ScanExactly
- goto ScanMode
- :ScanQuickly1
- :: 快速扫描并列出所有被感染文件的路径
- :: 只验证压缩包中是否存在Function.dll,最快速,最不精确,不能按照文件类型进行统计,
- :: 但是能适应文件中毒后只改文件名不改后缀名的情况
- cls
- title %TT%-最快扫描模式
- echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo 正在扫描以下目录及其所有子目录,请耐心等待...
- echo.
- echo "%ScanRoute%"
- echo.
- set num=0
- for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
- title 正在扫描"%%i"
- for /f "delims=" %%j in ('rar lb "%%i"^|findstr /beic:"Function.dll"') do (
- set /a num+=1
- call echo .exe| "%%i"%OutPut%
- )
- )
- (
- echo.
- echo -------------------------------------------------------
- echo 被感染的文件总计 %num% 个
- )%OutPut%
- goto End
- :ScanQuickly2
- :: 快速扫描并按照文件类型列出所有被感染文件的路径
- :: 只验证压缩包中是否存在与exe文件同名的.doc、.jpg、.txt或.com文件,不够精确,不能
- :: 适应文件中毒后改名的情形
- :: 因为文件名中可能存在空格,所以,findstr不能精确匹配首尾
- cls
- title %TT%-快速扫描模式
- echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo 正在扫描以下目录及其所有子目录,请耐心等待...
- echo.
- echo "%ScanRoute%"
- echo.
- for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
- title 正在扫描"%%i"
- set type=
- for /f "delims=" %%j in ('rar lb "%%i"^|findstr /ei "\.doc \.jpg \.txt \.com"') do (
- if /i "%%~ni"=="%%~nj" (
- set /a num_%%~xj+=1
- set type=%%~xj
- call echo %%type%%| "%%i"%OutPut%
- )
- )
- )
- goto Count
- :ScanExactly
- :: 用最精确的方法判断染毒文件,并按照文件类型列出所有被感染文件的路径
- :: 先验证压缩包中是否存在Function.dll文件,再验证压缩包中是否存在与exe文件同名的doc
- :: jpg、txt或com文件,比较精确,不能适应文件中毒后改名的情形
- :: 因为文件名中可能存在空格,所以,不能用findstr /be同时匹配首尾
- cls
- title %TT%-精确扫描模式
- echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo 正在扫描以下目录及其所有子目录,请耐心等待...
- echo.
- echo "%ScanRoute%"
- echo.
- for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
- title 正在扫描"%%i"
- for /f "delims=" %%j in ('rar lb "%%i"^|findstr /beic:"Function.dll"') do (
- set type=
- for /f "delims=" %%k in ('rar lb "%%i"^|findstr /ei "\.doc \.jpg \.txt \.com"') do (
- if /i "%%~ni"=="%%~nk" (
- set /a num_%%~xk+=1
- set type=%%~xk
- call echo %%type%%| "%%i"%OutPut%
- )
- )
- )
- )
- :Count
- set Total=0
- (
- echo.
- echo -------------------------------------------------------
- )%OutPut%
- for /f "tokens=2,3 delims=_=" %%i in ('set num_ 2^>nul') do (
- echo 被感染的%%i文件 %%j 个%OutPut%
- set /a Total+=%%j
- )
- echo 被感染的文件总计 %Total% 个%OutPut%
- :: 按类型罗列被感染文件
- if defined OutPut (
- cls
- echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo 正在按照文件类型整理被感染的文件,请稍候...
- for %%i in (doc jpg txt com) do (
- (
- echo 扫描项目:Sola病毒染毒文件扫描(仅.%%i格式)
- echo 扫描时间:%date% %time%
- echo 扫描目录(含子目录): "%ScanRoute%"
- echo -------------------------------------------------------
- echo.
- )>.%%i格式染毒文件列表.txt
- )
- for /f "tokens=1* delims=| " %%i in ('findstr /b "\." "%OutPut:~3,-1%"') do (
- echo %%i| "%%~fj">>"%SaveRoute%.\%%~xi格式染毒文件列表.txt"
- )
- for /f "tokens=2,3 delims=_=" %%j in ('set num_ 2^>nul') do (
- (
- echo.
- echo -------------------------------------------------------
- echo 被感染的%%j文件总计 %%k 个
- )>>"%SaveRoute%.\%%j格式染毒文件列表.txt"
- )
- )
- :End
- echo.
- echo 按任意键退出...
- pause>nul
- exit
- :RepairFiles
- :: 恢复染毒文件
- :: 先探测哪些是染毒文件,然后从染毒文件中解压出原始文件,并把染毒文件加上.rar后缀名做备份
- :: 并去掉原始文件可能存在的各种属性
- :: 若原始文件是exe,还需要把解压出来的com改名为exe
- :: 因为病毒作者提取文件名的时候,把第一个点号之前的字符串认为是完整的文件名
- :: 因此,当文件名中含有多个点号的时候,恢复出来的文件名只保留第一个点号之前的字符串
- findstr /ic:"扫描项目:Sola病毒染毒文件扫描" "%ScanRoute%">nul 2>nul&&goto RepairFromList
- :: 通过扫描染毒文件来确定要修复的文件
- :: 为了能适应扫描大量文件对速度的要求,同时也为了适应中毒后手工修改文件名的极端情况
- :: 按照最快扫描模式判断染毒文件
- cls
- title %TT%-通过扫描染毒文件确定要修复的文件
- echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo 正在修复以下目录及其所有子目录中的染毒文件,请耐心等待...
- echo.
- echo "%ScanRoute%"
- echo.
- for /f "delims=" %%i in ('dir /a-d /b /s "%ScanRoute%.\*.exe"') do (
- for /f "delims=" %%j in ('rar lb "%%i"^|findstr /beic:"Function.dll"') do (
- echo .exe| "%%i"%OutPut%
- rar e -c- -idq "%%i" "%%~dpi" n "%%~ni.*"&&(
- ren "%%i" "%%~nxi.rar"
- attrib -s -h -r "%%~dpni.*"
- ren "%%~dpni.com" "*.exe" 2>nul
- )
- )
- )
- echo.
- echo 按任意键退出...
- pause>nul
- exit
- :RepairFromList
- :: 从染毒文件列表中获取要修复的文件
- :: 以点号打头的行为文件路径所在的行
- cls
- title %TT%-从染毒文件列表获取要修复的文件
- echo.&echo.&echo.&echo.&echo.&echo.&echo.
- echo 正在修复以下文件中所列出的染毒文件,请耐心等待...
- echo.
- echo "%ScanRoute%"
- echo.
- for /f "tokens=1* delims=| " %%i in ('findstr /b "\." "%ScanRoute%"') do (
- echo 正在处理 %%j
- rar e -c- -idq %%j "%%~dpj" n "%%~nj.*"&&(
- ren %%j "%%~nxj.rar"
- attrib -s -h -r "%%~dpnj.*"
- ren "%%~dpnj.com" "*.exe" 2>nul
- )
- )
- echo.
- echo 按任意键退出...
- pause>nul
- exit
1、本工具需要与WinRAR的命令行程序rar.exe一起配合使用;
欢迎光临 批处理之家 (http://bbs.bathome.net/) | Powered by Discuz! 7.2 |