Что нового

[Файловая система] Зашита USB-флешь диска от вирусов

_dron_

Знающий
Сообщения
84
Репутация
8
AutoIt: 3.3.x.x
Версия: 1.0
Описание: Зашита USB-флешь диска от вирусов
Автор: я
Код:
Код:
#Region config
AutoItSetOption ("TrayIconDebug",0)
AutoItSetOption ("TrayAutoPause",0)
AutoItSetOption ('TrayMenuMode',3)
AutoItSetOption ("TrayOnEventMode", 1)
#EndRegion config

Global $TimeWhile = 30000

Global $CurrentDir = ['recycled','recycle','recycler','System Volume Information'];список зараженных папок
Global $CurrentFile = ['autorun.inf','desktop.ini'];список зараженных файлов

#Region tray menu
;TrayCreateItem("Settings")
;TrayItemSetOnEvent(-1, "Settings")
;TrayCreateItem("")

TrayCreateItem("About")
TrayItemSetOnEvent(-1, "About")
TrayCreateItem("")

TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "__Exit")
TraySetState(1)
#EndRegion tray menu

#Region process drive
While 1
   FindDrive()
   Sleep($TimeWhile )
WEnd

Func FindDrive()
   Local $drive = DriveGetDrive ("REMOVABLE");найти все съемные устройства

   For $i=1 To $drive[0]
	  $drive[$i] = '\\.\' & $drive[$i];преобразовать путь к устройству в UNC-путь
	  if DriveSpaceTotal ( $drive[$i]) > 0 Then;размер диска не нуль - некоторые картрийдеры монтируют пустые флешки
		 if not FileExists($drive[$i] & "\autorun.inf\com1") Then;мы тут уже были =)
			ChangeAutorun($drive[$i]);сделать прививку для дисков чей размер не нуль
		 EndIf
	  EndIf
   Next
EndFunc

Func ChangeAutorun($pathDrive)
   For $FileName in $CurrentFile;список зараженных файлов
	  $path = $pathDrive & "\" & $FileName
	  if FileExists($path) Then
		 FileSetAttrib($path,"-RSH");убрать все аттрибуты
		 FileDelete($path)
	  EndIf
	  DirCreate($path);вместо файла создадим папку (так вирусня не запишет свои данные)
	  ;в папке создадим файл с именем com1 - этот трюк сделает файл не удаляемым (специфика windows)
	  FileWrite($path & '\com1',"out")
	  FileSetAttrib($path & '\com1',"+RSH");атрибуты файла только чтение, системный, скрытый
	  FileSetAttrib($path,"+RSH");атрибуты папки только чтение, системный, скрытый
   Next

   For $DirName in $CurrentDir;список зараженных папок
	  $path = $pathDrive & "\" & $DirName
	  if FileExists($path) Then
		 FileSetAttrib($path,"-RSH");убрать все атрибуты
		 DirRemove($path)
	  EndIf
	  ;из папки сделаем файл (очень часто попытка скопироватся не в папку а в файл не вызывают ошибки)
	  FileWrite($path,"out")
	  FileSetAttrib($path,"+RSH");атрибуты файла только чтение, системный, скрытый
   Next
EndFunc
#EndRegion process drive

#Region Tray Menu Event
Func About()
   MsgBox(64,"Usb-Flas","Программа удаляет вирусы с флешь накопителей во время их монтирования")
EndFunc

Func __Exit()
   Exit (0)
EndFunc
#EndRegion Tray Menu Event

давно делал для себя программку для прививки Usb флешь дисков от вирусов
сейчас переписал и решил выложить


Через каждые 30 сек. выполняется поиск всех съемных носителей и проверка на наличие файла com1 в папке Autorun.inf. Если он есть то мы там уже побывали если нет то нет.

Принцип работы прививки:
Все вирусы записывают путь к себе в файл autorun.inf или desktop.ini (здесь dll с иконкой заражение через инициализацию последней).
Скрип заменяет эти файлы папками что портит жизнь вирусам, но последние могут ее удалить и поэтому записывает в папку файл com1 (используя UNC-пути вида \\.\x:\) что делает папку не удаляемой из-за этого файла.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
_dron_ сказал(а):
каждые 30 сек. выполняется поиск
Большое кол-во времени, может использовать использовать такую схему:
В начале запуска проверить на УЖЕ имеющиеся носители, ну а потом в цикле ловить методом WM_DEVICECHANGE
 
Автор
D

_dron_

Знающий
Сообщения
84
Репутация
8
тогда окно нужно создать! А здесь предполагается что окно не требуется!

зы: а время можно увеличить \ уменьшить
 
Автор
D

_dron_

Знающий
Сообщения
84
Репутация
8
это костыли 8)
ИМХО

ps: потом другим объясняй зачем окно

зы зы: проверил, при подключении устройства функция вызывается 6-8 раз!!! Это не есть гуд!
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
_dron_ сказал(а):
проверил, при подключении устройства функция вызывается 6-8 раз!!! Это не есть гуд!
Ну конечно, вы наверно без всяких предусловий написали функцию, потому она и реагирует на все подряд
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("")
GUIRegisterMsg($wm_devicechange,"__GetFlash")
While 1
	Sleep(10)
WEnd
Func __GetFlash($hWnd,$Msg,$wParam,$lParam)
	If $wParam=0x8000 Then
		Local $DEV_BROADCAST_VOLUME = DllStructCreate("int dbcvsize;int dbcvdevicetype;int dbcvreserved;int dbcvunitmask;" & _
				"ushort dbcvflags", $lParam)
		Local $iDriveType = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvdevicetype")
		ConsoleWrite($iDriveType & @LF)
		If $iDriveType=0x00000002 Then
			Local $iMask = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvunitmask")
			$iMask = Log($iMask) / Log(2)
			Local $iDrive = Chr(65 + $iMask) & ":"
			MsgBox(64,"Device","Подключено новое устройство - "&$iDrive)
		EndIf
	EndIf
EndFunc

_dron_ сказал(а):
потом другим объясняй зачем окно
Как есть так и объясните :smile: Типа так, мол так надежней и своевременней
 
Автор
D

_dron_

Знающий
Сообщения
84
Репутация
8
Ну конечно, вы наверно без всяких предусловий написали функцию, потому она и реагирует на все подряд

я не про это а про сам вызов функции 6-8 раз - это значит что число вхождений в функцию 6-8 раз когда монтируется новое устройство!!!

Происходит обход всех устройств - у меня встроенный карт-реадер который вашим кодом не проверяется (смонтирован до запуска скрипта в BIOS) поэтому у меня не работал первоначальный код (я пытался тоже использовать GUIRegisterMsg а окном были настройки)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
_dron_
а тему http://autoit-script.ru/index.php?topic=2301.0
не смотрел?
 

Black_Hole

Знающий
Сообщения
126
Репутация
11
отключение автозапуска решает все проблемы с вирусами на флешках и дисках или я чего-то просто не понимаю?
 
Автор
D

_dron_

Знающий
Сообщения
84
Репутация
8
отключение автозапуска не решает проблемы т.к. вирусы используют директиву на открытие устроиства

[autorun]
open=Prog.exe
shell\execute = Prog.exe
shell\open = Prog.exe
shell\open\command = Prog.exe
shell\open\execute = Prog.exe
последние 4 меняют меню для устройства
 

erlik

Продвинутый
Сообщения
317
Репутация
84
OffTopic:
_dron_
отключение автозапуска не решает проблемы т.к. вирусы используют директиву на открытие устроиства
Есть еще такая полезная штука как отключение функции поиска autorun на диске.
И тогда вышеуказанные параметры не будут иметь никакого действия.
 
Верх