korsak7, дело не в атрибутах. Это специфика ОС Windows: файл и папка с одинаковым именем невозможны (в одном каталоге/корне). И при этом, команды удаления для файла и папки разные. Получается: вирус пытается записать файл Autorun.inf - ошибка (есть такая папка). Пробует удалить ФАЙЛ и повторить запись - тоже ошибка. А, чтобы догадался папку удалять - мне такие пока не встречались. А атрибуты папки скорее для того, чтобы глаза не мозолило (ну и удалять сложнее).
Держите батник, который лечит флэшки и диски. Удаляет ярлыки, которые вместо папок, возвращает скрытые папки, удаляет авторан, создает не удаляемую штатными средствами папку авторан. Запускать из корня. Если вам нужно своё имя флешки, а не название "съемный диск", то вам этот способ не пойдет. Винда не отобразит имя диска, если на нем есть авторан.
Скрытый текст
Код:
@echo off Setlocal EnableDelayedExpansion EnableExtensions mode con: cols=82 lines=30 title Anti Hidden Fast - Удаление следов вирусной деятельности ver.1.5.1 color 1a echo. echo Этап 1. Возобновление свойств корневых папок. echo. echo Будут установлены такие параметры: echo - не "Скрытый" echo - не "Системный" echo + стать собственником echo + предоставить полные права echo. echo Для ускорения операции можно временно отключить антивирусное ПО. Call :StrOne " Работаю с папкой: " <nul set /p text=%% Call :StrOne " " new Set Cur=%~dp0 Set Cur=%Cur:~0,-1% ::Оценка количества папок для прогресс-бара, запись первой порции папок в массив (Hidden) chcp 1251>nul for /f "delims=" %%i in ('dir "%Cur%" /b /a:dh 2^>nul') do (set /a folders+=1& Set F.!folders!=%Cur%\%%i) chcp 866>nul for /L %%A in (1,1,%folders%) do ( set /a Progress=100*%%A/%folders% Call :StrOne "!Progress! - !F.%%A!" Call :RecovFolder "!F.%%A!" ) chcp 1251>nul for /f "delims=" %%i in ('dir "%Cur%" /b /a:ds 2^>nul') do ( Call :StrOne "*** - %%i" Call :RecovFolder "%Cur%\%%i" ) chcp 866>nul Call :StrOne "100 - завершено. " echo. echo Этап 2. Удаление лишних ярлыков. chcp 1251>nul ::Удаление только ярлыков, имена которых соответствуют именам папок for /f "delims=" %%i in ('dir "%Cur%" /b /a:d') do if exist "%Cur%\%%i.lnk" ( call :killfile "%Cur%\%%i.lnk" ) chcp 866>nul echo Этап 3. Блокирование сторонних активных процессов и удаление их источника. if exist %appdata%\*.exe ( for /f "delims=" %%i in ('dir %appdata%\*.exe /b /a') do taskkill /im "%%i" /t /f call :killfile "%appdata%\*.exe" ) echo Этап 4. Удаление файла автозапуска. if not exist "%Cur%\autorun.inf\" if exist "%Cur%\autorun.inf" call :killfile "%Cur%\autorun.inf" echo Этап 5. Удаление модифицированных системных папок и инородных файлов. for %%a in ("recycled" "System Volume Information") do ( if exist "%Cur%\%%~a\" Call :KillFolder "%Cur%\%%~a") ) 1>nul 2>&1 if exist "%Cur%\recycler\" ( echo Найдена папка Recycler. Продолжить удаление корзины Windows для тома %~d0 ? Set /p RecycleRemove="Нажмите "Y" и кнопку {ENTER} " Echo.!RecycleRemove!|>nul find /i "y"&&Call :KillFolder "%Cur%\recycler" ) for %%b in (game.cpl system *.lnk) do for /F "delims=" %%a in ('2^>nul dir "%Cur%\%%b" /b /a:-d') do ( echo. echo Найдено подозрительный файл - %%a. echo Для удаления нажмите "Y" и кнопку {ENTER} (takeown /f "%Cur%\%%a"&echo y|cacls "%Cur%\%%a" /g %username%:f) 1>nul 2>&1 del /f /p /A "%Cur%\%%a" ) echo. color 1b echo Этап 5.1. Поиск и удаление файлов host.exe. Пожалуйста, подождите... tasklist |1>nul 2>&1 FindStr /B /L /I /C:host.exe&&( Echo В системе запущен подозрительный процесс Host.exe Set /p HostClose=" Завершить его? - нажмите Y и {ENTER}" Echo.!HostClose!|>nul find /i "y"&&taskkill /im "host.exe" /t /f ) (for /f "tokens=*" %%a in ('Dir /b /s /a:-d "%Cur%\host.exe"') Do ( if not Defined HostAgree ( Echo Все файлы с именем Host.exe будут удалены с носителя %~dp0% рекурсивно. Set /p HostAgree="Чтобы продолжить нажмите Y и {ENTER}" Echo.!HostAgree!|>nul find /i "y"||Goto :ExtHostSeek ) Call :KillFile "%%a" )) 2>nul :ExtHostSeek color 1a echo Этап 6. Создание защитного файла автозапуска, который не удаляется echo штатными средствами. if not exist "%Cur%\autorun.inf\" mkdir "%Cur%\autorun.inf" 1>nul 2>&1 if not exist "%Cur%\autorun.inf\Metamorf..\" mkdir "%Cur%\autorun.inf\Metamorf..\" 1>nul 2>&1 if not exist "%Cur%\autorun.inf\com1\" mkdir "\\?\%Cur%\autorun.inf\com1" 1>nul 2>&1 if not exist "%Cur%\autorun.inf\defence" ( mkdir "%Cur%\autorun.inf\defence" 1>nul 2>&1 echo y|1>nul 2>&1 cacls "%Cur%\autorun.inf\defence" /d Все echo y|1>nul 2>&1 cacls "%Cur%\autorun.inf\defence" /d All ) echo. echo Процедура проведена. Программа будет закрыта. ping -n 3 localhost 1>nul 2>&1 color goto :eof :RecovFolder attrib -s -h "%~1" 1>nul 2>&1 attrib "%~1"|>nul FindStr /BIR "....H.." if %errorlevel%==0 ( Call :GrantAccess "%~1" attrib -s -h "%~1" 1>nul 2>&1 ) else ( attrib "%~1"|>nul FindStr /BIR "...S..."&&( Call :GrantAccess "%~1" attrib -s -h "%~1" 1>nul 2>&1 ) ) exit /b :GrantAccess takeown /f "%~1" /r /d y 1>nul 2>&1 echo y|cacls "%~1" /g %username%:f 1>nul 2>&1 exit /b :KillFile attrib -s -h "%~1" 1>nul 2>&1 del /F /Q "%~1" 1>nul 2>&1 if exist "%~1" ( takeown /f "%~1" echo y|cacls "%~1" /g %username%:f del /F /Q /A "%~1" ) 1>nul 2>&1 if exist "%~1" ( del /F /Q /A "\\?\%~1" ) 1>nul 2>&1 exit /b :KillFolder attrib -s -h "%~1" 1>nul 2>&1 rd /S /Q "%~1" 1>nul 2>&1 if exist "%~1" ( takeown /f "%~1" /r /d y echo y|cacls "%~1" /g %username%:f rd /S /Q "%~1" ) 1>nul 2>&1 if exist "%~1" ( rd /S /Q "\\?\%~1" ) 1>nul 2>&1 exit /b :StrLen ::Вычисляет длину переменной. ::Результат записывается в переменную LastLen set strString=%~1 set /a LastLen = 0 ::Максимальная длина переменной = 1024 символа for /l %%i in (0,1,1024) do ( set strTempString=!strString:~%%i,1! if "!strTempString!" neq "" ( set /a LastLen+=1 ) ) exit /b 0 :StrOne ::%1 - строка, которую отображаем ::%2 - параметры: ::new - печатать рядом ::vblf - печатать с новой строки ::если опущен, то заменять предыдущий текст. if "%2"=="new" (set /a conWidth-=%LastLen%& call :StrWrite "%~1" New& exit /b 0) if "%2"=="crlf" (call :GetConsoleWidth& echo.&call :StrWrite "%~1" New& exit /b 0) ::если предыдущего текста не было, просто печатаем текст и записываем его длину if not defined LastLen (call :GetConsoleWidth& call :StrWrite "%~1" New& exit /b 0) ::Переменная с БекСпейсами Set BS= ::Набиваем нужным количеством БекСпейсов for /l %%i in (1,1,%LastLen%) do (Set BS=!BS!) ::Возвращаем каретку назад <nul set /p text=%BS% Set /a LenBefore=%LastLen% ::Печатаем текст поверх старого Call :StrWrite "%~1" Fill ::Если новый текст короче старого, нужно затереть оставшиеся символы if %LenBefore% GTR %LastLen% ( set Space= set /a n=%LenBefore%-%LastLen% rem Набиваем Space слева пробелами, а справа возратом каретки rem Нужно ее ведь затем вернуть в пред. позицию for /l %%i in (1,1,!n!) do (Set Space= !Space!) rem Знак подчеркивания + BackSpace здесь я использую для обхода ограничения rem т.к. иначе, если в начале строки мы захотим напечатать пробел - это не получится сделать rem Команда (<nul set /p text= Текст) выведет "Текст" без пробела! (<nul set /p text=_!Space!) ) exit /b 0 :StrWrite ::Вычисляем длину напечатанной строки Call :StrLen "%~1" ::Определяем поместится ли по ширине консоли Set Text=%~1 if %LastLen% GTR %conWidth% ( call set Text=!Text:~0,%conWidth%! set /a LastLen=%conWidth% ) ::Печатаем текст на той же строке <nul set /p text=_%Text% ::Обнуляем переменную длины предыдущей строки if "%2"=="New" set /a LenBefore=0 exit /b 0 :GetConsoleWidth ::Получение ширины консоли For /F "skip=4 tokens=1,2" %%v In ('mode con') Do ( Set /A conWidth=%%w-4 Exit /B )
Последний раз редактировалось: Metamorf (2015-04-05 17:16), всего редактировалось 1 раз
Доброго всем времени суток! korsak7 Panda USB and AutoRun Vaccine Не работает на exFat, и есть немного негативных отзывов (в комментариях по Вашей ссылке). Может есть какие ещё ограничения? И если не затруднит, могли бы Вы более углубленно, по возможности, описать возможность программы (из Вашего опыта "ковыряния" в ней)? Metamorf Ваш способ (Anti_Hidden), он как писал conty9 - делает атрибуты "Read-only", "Hidden", "System"? (не силён в этом, так что не ругайте) И что означает:
Цитата
Удаляет ярлыки, которые вместо папок, удаляет авторан ?
О каких ярлыках идёт речь? И авторан - вирус может удалить, который прописался? NTFS Drive Protection (по совету conty9) - не проверял, так как не всегда использую NTFS... Также попробовал способ nikzzzz и его FullBubble, не знаю как на других файловых системах, но на FAT32 - довольно долго идёт процесс (а флешка на 16ГБ), но рабочий способ. P.S. никто не желает создать тему Защита usb от вируса (вариантов достаточно), а эту тему удалить за ненадобностью?
KaSpieC 666, Приветствую! Мой способ создаст папку, которую не то, что вирус, ты и сам не сможешь удалить. В папке autorun.inf создаются еще папки, каждая с разными вариантами защиты от удаления. Может одну сможешь удалить... Попробуй. Обычно авторан вирусы делают папки скратыми системными и только для чтения, вместо папок создают ярлыки с иконкой внешне неотличимой от папки. Пользователь нажимая наиярлык, запускает скрипт, написанный вирусописателем, а потом открывается папка. Пользователь сам распространяет вирус, открывая папки на разных компах. Выложенный мной скрипт, удаляет вирус, восстанавливает аттрубуты папок, удаляет ярлыки, создает защиту на флэшке. Незнаю как еще объяснить.
KaSpieC 666, Не заморачивайся. Вирусы авторан простые, иначе их ловят антивирусы. Не переименовывают они папку. Они файл пытаются создать, возможно с попыткой замены старого. Им это не удастся.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы