Смотрите, столкнулся с проблемой, что в мой компьютер суються отнюдь не белые и пушистые флехи. Хотелось бы сделать их доступ к ним по паролю. Реализуемо ли такое. Если да, то как?
Запрет на автозапуск флешки
Сообщений 1 страница 19 из 19
Поделиться223.03.2011 23:00:35
Можно в реестре полностью заблокировать автозапуск с флешки.
А программно наверное можно это сделать, но нужно подумать как.
Поделиться323.03.2011 23:06:04
ну вот я ж о том же.
Поделиться423.03.2011 23:07:50
Как то пытался написать что то подобное, только без пароля. Вот некоторые наработки. Программа блокирует сменные носители. При выходе из программы всё разблокируется. Так и не довел до ума, так что дерзайте!
Global DeviceEvent #WM_DEVICECHANGE=$219 #DBT_DEVICEARRIVAL=$8000 ;A device has been inserted #DBT_DEVICEREMOVECOMPLETE=$8004 ;A device has been removed. Procedure RemoveDevice(DriveLetter.s) #DIGCF_PRESENT = $2 #DIGCF_ALLCLASSES = $4 ; Constantes pour SetupDiGetDeviceRegistryProperty #SPDRP_ADDRESS = $1C #SPDRP_BUSNUMBER = $15 #SPDRP_BUSTYPEGUID = $13 #SPDRP_CAPABILITIES = $F #SPDRP_CHARACTERISTICS = $1B #SPDRP_CLASS = $7 #SPDRP_CLASSGUID = $8 #SPDRP_COMPATIBLEIDS = $2 #SPDRP_CONFIGFLAGS = $A #SPDRP_DEVICEDESC = $0 #SPDRP_DEVTYPE = $19 #SPDRP_DRIVER = $9 #SPDRP_ENUMERATOR_NAME = $16 #SPDRP_EXCLUSIVE = $1A #SPDRP_FRIENDLYNAME = $C #SPDRP_HARDWAREID = $1 #SPDRP_LEGACYBUSTYPE = $14 #SPDRP_LOCATION_INFORMATION = $D #SPDRP_LOWERFILTERS = $12 #SPDRP_MAXIMUM_PROPERTY = $1C #SPDRP_MFG = $B #SPDRP_PHYSICAL_DEVICE_OBJECT_NAME = $E #SPDRP_SECURITY = $17 #SPDRP_SECURITY_SDS = $18 #SPDRP_SERVICE = $4 #SPDRP_UI_NUMBER = $10 #SPDRP_UI_NUMBER_DESC_FORMAT = $1E #SPDRP_UNUSED0 = $3 #SPDRP_UNUSED1 = $5 #SPDRP_UNUSED2 = $6 #SPDRP_UPPERFILTERS = $11 ; Caracteristiques du device #CM_DEVCAP_LOCKSUPPORTED = $1 #CM_DEVCAP_EJECTSUPPORTED = $2 #CM_DEVCAP_REMOVABLE = $4 #CM_DEVCAP_DOCKDEVICE = $8 #CM_DEVCAP_UNIQUEID = $10 #CM_DEVCAP_SILENTINSTALL = $20 #CM_DEVCAP_RAWDEVICEOK = $40 #CM_DEVCAP_SURPRISEREMOVALOK = $80 #CM_DEVCAP_HARDWAREDISABLED = $100 #CM_DEVCAP_NONDYNAMIC = $200 Structure SP_DEVINFO_DATA cbSize.l ClassGuid.GUID DevInst.l reserved.l EndStructure #Memoire_Taille = 200 Protected DeviceInfoData.SP_DEVINFO_DATA, DeviceCapabilities.l Protected *Memoire, Index DeviceInfoData\cbSize = SizeOf(DeviceInfoData) hDeviceInfoSet = SetupDiGetClassDevs_(0, 0, 0, #DIGCF_PRESENT | #DIGCF_ALLCLASSES) If hDeviceInfoSet <>#INVALID_HANDLE_VALUE Library = OpenLibrary(#PB_Any, "setupapi.dll") If Library *SetupDiGetDeviceInstanceId = GetFunction(Library, "SetupDiGetDeviceInstanceIdA") *SetupDiGetDeviceRegistryProperty = GetFunction(Library, "SetupDiGetDeviceRegistryPropertyA") *CM_Locate_DevNode = GetFunction(Library, "CM_Locate_DevNodeA") *CM_Request_Device_Eject = GetFunction(Library, "CM_Request_Device_Eject_ExA") *CM_Get_DevNode_Registry_Property = GetFunction(Library, "CM_Get_DevNode_Registry_PropertyA") While SetupDiEnumDeviceInfo_(hDeviceInfoSet, Index, @DeviceInfoData) *DeviceService = AllocateMemory(#Memoire_Taille) *DevicePhysicalName = AllocateMemory(#Memoire_Taille) *DeviceName = AllocateMemory(#Memoire_Taille) *DeviceDescription = AllocateMemory(#Memoire_Taille) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_SERVICE, 0, *DeviceService, #Memoire_Taille, 0) ;Debug PeekS(*DeviceService) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_LOCATION_INFORMATION, 0, *DevicePhysicalName, #Memoire_Taille, 0) ;Debug PeekS(*DevicePhysicalName) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_FRIENDLYNAME, 0, *DeviceName, #Memoire_Taille, 0) ;Debug PeekS(*DeviceName) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_DEVICEDESC, 0, *DeviceDescription, #Memoire_Taille, 0) ;Debug PeekS(*DeviceDescription) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_CAPABILITIES, 0, @DeviceCapabilities, 4, 0) If UCase(PeekS(*DeviceService)) = "USBSTOR" *DeviceId = AllocateMemory(#Memoire_Taille) CallFunctionFast(*SetupDiGetDeviceInstanceId, hDeviceInfoSet, DeviceInfoData, *DeviceId, #Memoire_Taille, 0) DD$=PeekS(*DeviceId) If CallFunctionFast(*CM_Locate_DevNode, @DevInst.l, @DD$, 0) = 0 CallFunctionFast(*CM_Request_Device_Eject, DevInst, 0, 0, 0, 0, 0) EndIf FreeMemory(*DeviceId) EndIf FreeMemory(*DeviceService) FreeMemory(*DevicePhysicalName) FreeMemory(*DeviceName) FreeMemory(*DeviceDescription) Index + 1 Wend CloseLibrary(Librairie) EndIf SetupDiDestroyDeviceInfoList_(hDeviceInfoSet) EndIf EndProcedure Procedure GetDeviceEvent(WindowID,Message,wParam,lParam) ;Callback procedure to catch a removable device event result = #PB_ProcessPureBasicEvents If Message=#WM_DEVICECHANGE result = #True Select wParam Case #DBT_DEVICEARRIVAL ;MessageRequester("","Inserted",#PB_MessageRequester_Ok) RemoveDevice("i:\") Case #DBT_DEVICEREMOVECOMPLETE MessageRequester("","Устройство USB деактивировано",#PB_MessageRequester_Ok) EndSelect EndIf ProcedureReturn result EndProcedure SystemPath.s=Space(255) Result=GetSystemDirectory_(SystemPath.s,255) Window_Form1=OpenWindow(0,80,80,100,100,"DVD_USB_Look",#PB_Window_Invisible) ; окно программы у нас невидимое, но зато есть иконка в трее и меню. CreatePopupMenu(0) MenuItem(1, "Выход") MenuItem(2, "О программе") MenuItem(3, "Заблокировать\Разблокировать") ; иконка программы в трее берётся из системной DLL - что зря её с собой таскать, если есть готовая... AddSysTrayIcon(1, WindowID(0),ExtractIcon_(0,SystemPath+"\SetupAPI.dll",29)) ; 25 -я иконка DVD Lock SysTrayIconToolTip(1, "DVD_USB_Look - разблокировано") SetWindowCallback(@GetDeviceEvent()) Repeat EventID = WaitWindowEvent() If EventID = #PB_Event_SysTray Select EventType() Case #PB_EventType_RightClick ; Обработка правой кнопки мышки DisplayPopupMenu(0, WindowID(0)) ; показ вспывающего меню EndSelect EndIf If EventID = #PB_Event_Menu Select EventMenu() Case 1 Quit = 1 Case 3 ChangeSysTrayIcon(1,ExtractIcon_(0,SystemPath+"\SetupAPI.dll",25)) SysTrayIconToolTip(1, "DVD_USB_Look - заблокировано") Case 2 MessageRequester("DVD_USB_Look", "Делает все внешние носители недоступными..", #PB_MessageRequester_Ok) EndSelect EndIf If EventID = #PB_Event_CloseWindow ; Выходим из программы Quit = 1 EndIf Delay(10) Until Quit = 1 End
Поделиться523.03.2011 23:38:08
а запуск по паролю я знаю только как сделать консолью, а можно вот консольный input перенести в оконный.
идея с паролем:
Open Console() p$=Input() If p$="" ;в кавычках пишется пароль ;сама программа Else End EndIf
или можно поместить пароль в файл
pt$=include('pass.ini') Open Console() p$=Input() If p$=pt$ ;сама программа Else End EndIf
Поделиться623.03.2011 23:47:25
можно вот консольный input перенести в оконный
Можно так сделать:
String.s = InputRequester("Запрос пароля","Введите пароль","") Debug String
Поделиться723.03.2011 23:51:39
Да, но когда я пишу условные операторы, то не получаются процедуры.
If string.s="11643" ;действия, действия, действия Else End EndIf
даже, если я переношу в процедуры в конец бывают сбои
Отредактировано Сергей (24.03.2011 00:03:20)
Поделиться823.03.2011 23:57:01
Да, но когда я пишу условные операторы, то не получаются процедуры.
Всмысле?
Как одно мешает другому?
Поделиться924.03.2011 00:04:00
просто когда процедуры внутри условного оператора оно выдает ошипку
Поделиться1024.03.2011 00:11:18
просто когда процедуры внутри условного оператора
А зачем туда засовывать сами процедуры?
Размести их выше по коду, а внутри условных операторов, вызывай.
Поделиться1124.03.2011 00:21:05
ну я до этого уже и сам догадался.
Поделиться1226.03.2011 11:34:21
наконецто додумал вариант выхода по паролю.
при нажатии на слове выход выскакивает консоль, куда надо ввести пароль, чтобы флешку не заблокировало.
Global DeviceEvent #WM_DEVICECHANGE=$219 #DBT_DEVICEARRIVAL=$8000 ; носитель вставлен #DBT_DEVICEREMOVECOMPLETE=$8004 ;носитель блокирован Procedure RemoveDevice(DriveLetter.s) #DIGCF_PRESENT = $2 #DIGCF_ALLCLASSES = $4 ; Constantes pour SetupDiGetDeviceRegistryProperty #SPDRP_ADDRESS = $1C #SPDRP_BUSNUMBER = $15 #SPDRP_BUSTYPEGUID = $13 #SPDRP_CAPABILITIES = $F #SPDRP_CHARACTERISTICS = $1B #SPDRP_CLASS = $7 #SPDRP_CLASSGUID = $8 #SPDRP_COMPATIBLEIDS = $2 #SPDRP_CONFIGFLAGS = $A #SPDRP_DEVICEDESC = $0 #SPDRP_DEVTYPE = $19 #SPDRP_DRIVER = $9 #SPDRP_ENUMERATOR_NAME = $16 #SPDRP_EXCLUSIVE = $1A #SPDRP_FRIENDLYNAME = $C #SPDRP_HARDWAREID = $1 #SPDRP_LEGACYBUSTYPE = $14 #SPDRP_LOCATION_INFORMATION = $D #SPDRP_LOWERFILTERS = $12 #SPDRP_MAXIMUM_PROPERTY = $1C #SPDRP_MFG = $B #SPDRP_PHYSICAL_DEVICE_OBJECT_NAME = $E #SPDRP_SECURITY = $17 #SPDRP_SECURITY_SDS = $18 #SPDRP_SERVICE = $4 #SPDRP_UI_NUMBER = $10 #SPDRP_UI_NUMBER_DESC_FORMAT = $1E #SPDRP_UNUSED0 = $3 #SPDRP_UNUSED1 = $5 #SPDRP_UNUSED2 = $6 #SPDRP_UPPERFILTERS = $11 ; Caracteristiques du device #CM_DEVCAP_LOCKSUPPORTED = $1 #CM_DEVCAP_EJECTSUPPORTED = $2 #CM_DEVCAP_REMOVABLE = $4 #CM_DEVCAP_DOCKDEVICE = $8 #CM_DEVCAP_UNIQUEID = $10 #CM_DEVCAP_SILENTINSTALL = $20 #CM_DEVCAP_RAWDEVICEOK = $40 #CM_DEVCAP_SURPRISEREMOVALOK = $80 #CM_DEVCAP_HARDWAREDISABLED = $100 #CM_DEVCAP_NONDYNAMIC = $200 Structure SP_DEVINFO_DATA cbSize.l ClassGuid.GUID DevInst.l reserved.l EndStructure #Memoire_Taille = 200 Protected DeviceInfoData.SP_DEVINFO_DATA, DeviceCapabilities.l Protected *Memoire, Index DeviceInfoData\cbSize = SizeOf(DeviceInfoData) hDeviceInfoSet = SetupDiGetClassDevs_(0, 0, 0, #DIGCF_PRESENT | #DIGCF_ALLCLASSES) If hDeviceInfoSet <>#INVALID_HANDLE_VALUE Library = OpenLibrary(#PB_Any, "setupapi.dll") If Library *SetupDiGetDeviceInstanceId = GetFunction(Library, "SetupDiGetDeviceInstanceIdA") *SetupDiGetDeviceRegistryProperty = GetFunction(Library, "SetupDiGetDeviceRegistryPropertyA") *CM_Locate_DevNode = GetFunction(Library, "CM_Locate_DevNodeA") *CM_Request_Device_Eject = GetFunction(Library, "CM_Request_Device_Eject_ExA") *CM_Get_DevNode_Registry_Property = GetFunction(Library, "CM_Get_DevNode_Registry_PropertyA") While SetupDiEnumDeviceInfo_(hDeviceInfoSet, Index, @DeviceInfoData) *DeviceService = AllocateMemory(#Memoire_Taille) *DevicePhysicalName = AllocateMemory(#Memoire_Taille) *DeviceName = AllocateMemory(#Memoire_Taille) *DeviceDescription = AllocateMemory(#Memoire_Taille) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_SERVICE, 0, *DeviceService, #Memoire_Taille, 0) ;Debug PeekS(*DeviceService) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_LOCATION_INFORMATION, 0, *DevicePhysicalName, #Memoire_Taille, 0) ;Debug PeekS(*DevicePhysicalName) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_FRIENDLYNAME, 0, *DeviceName, #Memoire_Taille, 0) ;Debug PeekS(*DeviceName) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_DEVICEDESC, 0, *DeviceDescription, #Memoire_Taille, 0) ;Debug PeekS(*DeviceDescription) CallFunctionFast(*SetupDiGetDeviceRegistryProperty, hDeviceInfoSet, DeviceInfoData, #SPDRP_CAPABILITIES, 0, @DeviceCapabilities, 4, 0) If UCase(PeekS(*DeviceService)) = "USBSTOR" *DeviceId = AllocateMemory(#Memoire_Taille) CallFunctionFast(*SetupDiGetDeviceInstanceId, hDeviceInfoSet, DeviceInfoData, *DeviceId, #Memoire_Taille, 0) DD$=PeekS(*DeviceId) If CallFunctionFast(*CM_Locate_DevNode, @DevInst.l, @DD$, 0) = 0 CallFunctionFast(*CM_Request_Device_Eject, DevInst, 0, 0, 0, 0, 0) EndIf FreeMemory(*DeviceId) EndIf FreeMemory(*DeviceService) FreeMemory(*DevicePhysicalName) FreeMemory(*DeviceName) FreeMemory(*DeviceDescription) Index + 1 Wend CloseLibrary(Librairie) EndIf SetupDiDestroyDeviceInfoList_(hDeviceInfoSet) EndIf EndProcedure Procedure GetDeviceEvent(WindowID,Message,wParam,lParam) ;Callback procedure to catch a removable device event result = #PB_ProcessPureBasicEvents If Message=#WM_DEVICECHANGE result = #True Select wParam Case #DBT_DEVICEARRIVAL ;MessageRequester("","Inserted",#PB_MessageRequester_Ok) RemoveDevice("i:\") Case #DBT_DEVICEREMOVECOMPLETE MessageRequester("","Устройство USB деактивировано",#PB_MessageRequester_Ok) EndSelect EndIf ProcedureReturn result EndProcedure SystemPath.s=Space(255) Result=GetSystemDirectory_(SystemPath.s,255) Window_Form1=OpenWindow(0,80,80,100,100,"Khome USB Block",#PB_Window_Invisible) ; окно программы у нас невидимое, но зато есть иконка в трее и меню. CreatePopupMenu(0) MenuItem(1, "Выход") MenuItem(2, "О программе") MenuItem(3, "Заблокировать\Разблокировать") ; иконка программы в трее берётся из системной DLL - что зря её с собой таскать, если есть готовая... AddSysTrayIcon(1, WindowID(0),ExtractIcon_(0,SystemPath+"\SetupAPI.dll",25)) ; 25 -я иконка DVD Lock SysTrayIconToolTip(1, "Khome USB Block - разблокировано") SetWindowCallback(@GetDeviceEvent()) Repeat EventID = WaitWindowEvent() If EventID = #PB_Event_SysTray Select EventType() Case #PB_EventType_RightClick ; Обработка правой кнопки мышки DisplayPopupMenu(0, WindowID(0)) ; показ вспывающего меню EndSelect EndIf If EventID = #PB_Event_Menu Select EventMenu() Case 1 OpenConsole() pass1$=Input() If pass1$="11647" Quit = 1 Else EndIf CloseConsole() Case 3 ChangeSysTrayIcon(1,ExtractIcon_(0,SystemPath+"\SetupAPI.dll",25)) SysTrayIconToolTip(1, "Khome USB Block - заблокировано") Case 2 MessageRequester("Khome USB Block", "Блокирует внешние носители", #PB_MessageRequester_Ok) EndSelect EndIf If EventID = #PB_Event_CloseWindow ; Выходим из программы Quit = 1 EndIf Delay(10) Until Quit = 1 End
Поделиться1326.03.2011 13:31:44
наконецто додумал вариант выхода по паролю.
К стати, вот эта строчка
RemoveDevice("i:\")
Это потому, что у меня он "i", а на других компах какой угодно может быть! Просто код этот я не дописал, и экспериментировал конкретно с диском i. А в реалии надо определять какой диск вставили. Вот сегодня мусолим эту тему тут:
http://pbasic.spb.ru/phpBB2/viewtopic.p … highlight=
Советую прочитать, там есть как определить путь к флешке.
К стати, я забросил этот проект т.к. если в компьютере не отключен автозапуск флешек, то он срабатывает быстрее, чем флешка определяется и блокируется. Т.е. вначале вирус записывается в компьютер, а уж потом мы её сможем деакивировать. А если отключен автозапуск, то зачем мне вообще нужны какие то программы лишние в памяти? Короче, бесполезная это хрень...
Поделиться1427.03.2011 15:18:16
я забросил этот проект т.к. если в компьютере не отключен автозапуск флешек, то он срабатывает быстрее, чем флешка определяется и блокируется. Т.е. вначале вирус записывается в компьютер, а уж потом мы её сможем деакивировать. А если отключен автозапуск, то зачем мне вообще нужны какие то программы лишние в памяти? Короче, бесполезная это хрень...
спасибо за прояснение. отключю подручными средствами автозапуск и все.
Поделиться1530.03.2011 19:27:04
Зря вы относитесь к этой идее только как к антивирусной, есть такой комерческий продукт, не помню как название. Там у них реализована защита внутри корпоративной сети всех устройств внешнего доступа, точнее USB и DVDRW только по паролю или только от администратора. Продается за нехилые деньги. Играют ребята на страхе руководителей перед действиями подчиненных. Но там еще и лог есть кто, когда, куда, что, записал (если было открыт доступ).
Так что расти есть куда, да и рынок есть...))
Поделиться1603.04.2011 10:03:17
а как програмка называется
Поделиться1704.04.2011 13:47:06
Я имел в виду стоимость лицензий Zlock. Но есть и другие Devicelock, Filecontrol, Deviceinspector и еще можешь посмотреть http://www.infobezpeka.com/products/insider/. Там тоже есть повод для размышлений..))
Поделиться1804.04.2011 15:01:35
Свежие вести с полей доказывают, что борьба с USB этими средствами бесполезна:
В этом докладе Джан Лаример представил несколько новых тех-
ник, которые может использовать малварь для автоматического
выполнения зловредной загрузки с USВ-накопителей и при этом
вообще не зависеть от системы AutoRun винды. Где тут секрет?
Существует большое количество кода, который выполняется между
USВ-драйверами и десктопными программами, которые, к примеру,
рендерят иконки и превьюшки для документов. Это открывает
sесuгitу-исследователям большое количество целей для эксплуатирования.
Причем поскольку обычные пейлоады (вроде открытия
шелла] здесь не всегда полезны, в докладе предложено несколько
альтернативных нагрузок , которые немедленно предоставляют
хакерам доступ к системе . Проблема касается не только Windows,
что продемонстрировал ресерчер, когда сумел разблокировать
экран Linux, вставив USВ-флешку в ноутбук.
Из последнего ][акера статья.
Поделиться1911.11.2013 12:24:54
Select EventMenu() Case 1 OpenConsole() pass1$=Input() If pass1$="11647" Quit = 1 Else EndIf CloseConsole()
Я бы заменил на это:
Select EventMenu() Case 1 pass1$=InputRequester("Запрос пороля", "Введите пароль", "",#PB_InputRequester_Password) If pass1$="11647" Quit = 1 EndIf