Добрый день, уважаемые форумчане. Возможно ли средствами Excel реализовать следующие хотелки:
Имеется некий файл Excel. Информация в файле конфиденциальная. С данным файлом в течение дня работает много народу, пароль ставить на него нельзя. Необходимо обеспечить полноценную работу с файлом только на том компьютере, на котором он находится сейчас (постоянно в одной папке). Если данный файл скопировать на флэшку и перенести на другой компьютер, то файл должен перестать функционировать. (файл или тупо не открывается, или информация становится нечитабельной, или листы скрываются или что-то что делает файл нечитабельным) Как вариант, например: при открытии файла Excel, происходит запрос на дополнительный файл, расположенный где-нибудь на этом же компьютере, но в укромной директории. (при копировании файла Excel на другой компьютер, файла-ответчика, естественно, там не окажется) Или как еще можно защитить файл от копирования с компьютера на котором он находится? Спасибо.
Добрый день, уважаемые форумчане. Возможно ли средствами Excel реализовать следующие хотелки:
Имеется некий файл Excel. Информация в файле конфиденциальная. С данным файлом в течение дня работает много народу, пароль ставить на него нельзя. Необходимо обеспечить полноценную работу с файлом только на том компьютере, на котором он находится сейчас (постоянно в одной папке). Если данный файл скопировать на флэшку и перенести на другой компьютер, то файл должен перестать функционировать. (файл или тупо не открывается, или информация становится нечитабельной, или листы скрываются или что-то что делает файл нечитабельным) Как вариант, например: при открытии файла Excel, происходит запрос на дополнительный файл, расположенный где-нибудь на этом же компьютере, но в укромной директории. (при копировании файла Excel на другой компьютер, файла-ответчика, естественно, там не окажется) Или как еще можно защитить файл от копирования с компьютера на котором он находится? Спасибо.Paketik
Или как еще можно защитить файл от копирования с компьютера на котором он находится?
И какое отношение этот пост имеет к разделу Формулы!? Но по сути вы сами ответили на свой вопрос:
Цитата
Как вариант, например: при открытии файла Excel, происходит запрос на дополнительный файл, расположенный где-нибудь на этом же компьютере, но в укромной директории. (при копировании файла Excel на другой компьютер, файла-ответчика, естественно, там не окажется)
Или как еще можно защитить файл от копирования с компьютера на котором он находится?
И какое отношение этот пост имеет к разделу Формулы!? Но по сути вы сами ответили на свой вопрос:
Цитата
Как вариант, например: при открытии файла Excel, происходит запрос на дополнительный файл, расположенный где-нибудь на этом же компьютере, но в укромной директории. (при копировании файла Excel на другой компьютер, файла-ответчика, естественно, там не окажется)
Private Sub List_of_Drives() ' инфо о дисках компьютера Dim DRV: Const DriveType = 2 '0-"UnKnown", 1-"Removable", 2-"HDD", 3-"Network", 4-"CD/DVD", 5-"RAM" On Error Resume Next For Each DRV In CreateObject("Scripting.FileSystemObject").Drives If DRV.DriveType = DriveType Then Debug.Print "------------------------" Debug.Print "DriveLetter = " & DRV.DriveLetter Debug.Print "IsReady = " & DRV.IsReady Debug.Print "VolumeName = " & DRV.VolumeName Debug.Print "TotalSize = " & DRV.TotalSize Debug.Print "AvailableSpace = " & DRV.AvailableSpace Debug.Print "SerialNumber = " & Hex$(DRV.SerialNumber) End If Next End Sub
Private Sub DrvSerialNumber() 'серийный номер диска С на компьютере Debug.Print Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) End Sub
Private Sub test_SYSTEM_INFO() ' получение системной информации On Error Resume Next Dim objWMIService Set objWMIService = GetObject("WinMgmts:{ImpersonationLevel=Impersonate}!\\" & "." & "\root\cimv2")
' операционная система Dim colOperatingSystems, objOperatingSystem Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem In colOperatingSystems Debug.Print "OS RegisteredUser: " & objOperatingSystem.RegisteredUser Debug.Print "OS SerialNumber: " & objOperatingSystem.SerialNumber Next
' процессор Dim colProcessor, objProcessor Set colProcessor = objWMIService.ExecQuery("SELECT * FROM Win32_Processor") For Each objProcessor In colProcessor Debug.Print "CPU ProcessorId: " & objProcessor.ProcessorId Next
On Error GoTo 0 End Sub
Private Sub OS_Environment_Variable_Info() ' информация о переменных среды ОС Dim i As Integer On Error Resume Next For i = 1 To 29 Debug.Print Environ(i) Next End Sub
Private Sub OS_UserName() Dim objWMIService Set objWMIService = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2") Dim colOperatingSystems, objOperatingSystem Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem In colOperatingSystems Debug.Print "OS RegisteredUser: " & objOperatingSystem.RegisteredUser Next End Sub
Private Sub REG_UserName() Dim oReg, sKeyPath$, sValueName$, sValue$ Set oReg = GetObject("WinMgmts:{ImpersonationLevel=Impersonate}!\\.\root\default:StdRegProv") sKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer" sValueName = "Logon User Name" oReg.GetExpandedStringValue &H80000001, sKeyPath, sValueName, sValue Debug.Print sValue End Sub
Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName Debug.Print Application.UserName End Sub
[/vba]
Выбирайте на свой вкус, к чему привязаться:[vba]
Код
Private Sub List_of_Drives() ' инфо о дисках компьютера Dim DRV: Const DriveType = 2 '0-"UnKnown", 1-"Removable", 2-"HDD", 3-"Network", 4-"CD/DVD", 5-"RAM" On Error Resume Next For Each DRV In CreateObject("Scripting.FileSystemObject").Drives If DRV.DriveType = DriveType Then Debug.Print "------------------------" Debug.Print "DriveLetter = " & DRV.DriveLetter Debug.Print "IsReady = " & DRV.IsReady Debug.Print "VolumeName = " & DRV.VolumeName Debug.Print "TotalSize = " & DRV.TotalSize Debug.Print "AvailableSpace = " & DRV.AvailableSpace Debug.Print "SerialNumber = " & Hex$(DRV.SerialNumber) End If Next End Sub
Private Sub DrvSerialNumber() 'серийный номер диска С на компьютере Debug.Print Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) End Sub
Private Sub test_SYSTEM_INFO() ' получение системной информации On Error Resume Next Dim objWMIService Set objWMIService = GetObject("WinMgmts:{ImpersonationLevel=Impersonate}!\\" & "." & "\root\cimv2")
' операционная система Dim colOperatingSystems, objOperatingSystem Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem In colOperatingSystems Debug.Print "OS RegisteredUser: " & objOperatingSystem.RegisteredUser Debug.Print "OS SerialNumber: " & objOperatingSystem.SerialNumber Next
' процессор Dim colProcessor, objProcessor Set colProcessor = objWMIService.ExecQuery("SELECT * FROM Win32_Processor") For Each objProcessor In colProcessor Debug.Print "CPU ProcessorId: " & objProcessor.ProcessorId Next
On Error GoTo 0 End Sub
Private Sub OS_Environment_Variable_Info() ' информация о переменных среды ОС Dim i As Integer On Error Resume Next For i = 1 To 29 Debug.Print Environ(i) Next End Sub
Private Sub OS_UserName() Dim objWMIService Set objWMIService = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2") Dim colOperatingSystems, objOperatingSystem Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem In colOperatingSystems Debug.Print "OS RegisteredUser: " & objOperatingSystem.RegisteredUser Next End Sub
Private Sub REG_UserName() Dim oReg, sKeyPath$, sValueName$, sValue$ Set oReg = GetObject("WinMgmts:{ImpersonationLevel=Impersonate}!\\.\root\default:StdRegProv") sKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer" sValueName = "Logon User Name" oReg.GetExpandedStringValue &H80000001, sKeyPath, sValueName, sValue Debug.Print sValue End Sub
Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName Debug.Print Application.UserName End Sub
Очень прошу ребят, помогите нубу - мне нужна такая защита, и этот форум единственное место где я смог найти хоть что-то похожее на ответ ))) Если можно расскажите на пальцах, как сделать так, как предложено выше - чтобы при открытии запрашивался файлик и если его нет, то ничего невозможно было бы прочитать, если можно то очень подробно ))) ибо я ранее никогда с такой проблемой не сталкивался! Заранее спасибо большое )) Alex_ST,
Очень прошу ребят, помогите нубу - мне нужна такая защита, и этот форум единственное место где я смог найти хоть что-то похожее на ответ ))) Если можно расскажите на пальцах, как сделать так, как предложено выше - чтобы при открытии запрашивался файлик и если его нет, то ничего невозможно было бы прочитать, если можно то очень подробно ))) ибо я ранее никогда с такой проблемой не сталкивался! Заранее спасибо большое )) Alex_ST,Bend_r
Достаточно отключить макросы, и никто ничего запрашивать не будет.
Ну, Андрей, не всё так печально и если немного поизвращаться, то вполне можно сделать. Сейчас точно не помню где, но здесь тему про то, как юзверга заставить включить макросы уже курили... Принцип такой: 1. Проект VBA закрываешь паролем чтобы нельзя было докопаться до ручного управления свойствами модулей листов. 2. На Auto_Open прописываешь показать все листы, а специальный лист-транспарант с надписью типа "Для работы с файлом макросы должны быть включены" шибко прячешь (xlSheetVeryHidden). 3. На Auto_Close прописываешь показать шибко спрятанный лист-транспарант, а все остальные листы шибко прячешь .
А в приложении к теме данного топика в Auto_Open прописываешь ещё и аутентификацию юзера. Если даже макросы и разрешены, но юзера нет в списке доверенных лиц, то показываешь другой лист-транспорант, на котором написано, "Чао, бамбино, сорри" и файл через несколько секунд закрываешь.
----------------------------------- О! Нарыл где в последний раз такой принцип использовали - в топике Как запретить одновременное открытие файла? Только там запрещали одновременное открытие, а здесь можно допилить на не авторизированное. Даже проще.
Достаточно отключить макросы, и никто ничего запрашивать не будет.
Ну, Андрей, не всё так печально и если немного поизвращаться, то вполне можно сделать. Сейчас точно не помню где, но здесь тему про то, как юзверга заставить включить макросы уже курили... Принцип такой: 1. Проект VBA закрываешь паролем чтобы нельзя было докопаться до ручного управления свойствами модулей листов. 2. На Auto_Open прописываешь показать все листы, а специальный лист-транспарант с надписью типа "Для работы с файлом макросы должны быть включены" шибко прячешь (xlSheetVeryHidden). 3. На Auto_Close прописываешь показать шибко спрятанный лист-транспарант, а все остальные листы шибко прячешь .
А в приложении к теме данного топика в Auto_Open прописываешь ещё и аутентификацию юзера. Если даже макросы и разрешены, но юзера нет в списке доверенных лиц, то показываешь другой лист-транспорант, на котором написано, "Чао, бамбино, сорри" и файл через несколько секунд закрываешь.
----------------------------------- О! Нарыл где в последний раз такой принцип использовали - в топике Как запретить одновременное открытие файла? Только там запрещали одновременное открытие, а здесь можно допилить на не авторизированное. Даже проще.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Суббота, 06.09.2014, 20:13
"Что один человек сделал, другой завсегда сломать сможет"
О степени секретности данных и уровне защиты вопрос не ставился. От простого открытия средним пользователем встроенная в Офис защита защищает вполне успешно. В офисе встроена защита от пользователя-"прохожего", который просто, увидев файл, попробовал его открыть, а когда не получилось, сказал: "Фиг с ним. Не очень-то и хотелось" и пошёл дальше. Защита же от преднамеренного взлома адвэнсед-юзером, а уж тем более - хакером, - совсем другое дело и так просто, а уж тем более средствами VBA, не делается.
"Что один человек сделал, другой завсегда сломать сможет"
О степени секретности данных и уровне защиты вопрос не ставился. От простого открытия средним пользователем встроенная в Офис защита защищает вполне успешно. В офисе встроена защита от пользователя-"прохожего", который просто, увидев файл, попробовал его открыть, а когда не получилось, сказал: "Фиг с ним. Не очень-то и хотелось" и пошёл дальше. Защита же от преднамеренного взлома адвэнсед-юзером, а уж тем более - хакером, - совсем другое дело и так просто, а уж тем более средствами VBA, не делается.Alex_ST
Защита же от преднамеренного взлома адвэнсед-юзером, а уж тем более - хакером, - совсем другое дело и так просто, а уж тем более средствами VBA, не делается.
Согласен Но можно немного усложнить задачу взломщикам. Можно так: 1.Создаем файлик в расширении XLSB - "Advanced Office Password Recovery"(по крайней мере такой как у меня) не ломает такие файлы 2.задаем сложные пароли на "защиту книги", и "защиту листа" - я делал 30 символьный случайно по всем 255 символам. 3.Пишем макрос на закрытие книги - спрятать все листы visible = 2 - чтобы при закрытии файл сохранялся с спрятанными листами. 4.На первом(титульном ) листе ставим кнопку для начала работы с файлом, которая будет запускать снятие паролей только при нужных Вам условиях...
Таким образом даже при отключении макросов - нельзя увидеть скрытый лист - открыть его при помощи сторонних макросов также не получится(пока не будет взломана защита книги и листов), поскольку стоит защита листа и книги(защиту книги нужно делать на "изменение", а не на открытие). Останется ломать VBA ... ну а его, как я уже писал сломать в выбранном формате не просто Но даже при всем выше перечисленном хакер(или advanced user) сможет получить доступ к информации.... ... но как это сделать писать не буду ... дам только подсказку (AllInternalPasswords).
Защита же от преднамеренного взлома адвэнсед-юзером, а уж тем более - хакером, - совсем другое дело и так просто, а уж тем более средствами VBA, не делается.
Согласен Но можно немного усложнить задачу взломщикам. Можно так: 1.Создаем файлик в расширении XLSB - "Advanced Office Password Recovery"(по крайней мере такой как у меня) не ломает такие файлы 2.задаем сложные пароли на "защиту книги", и "защиту листа" - я делал 30 символьный случайно по всем 255 символам. 3.Пишем макрос на закрытие книги - спрятать все листы visible = 2 - чтобы при закрытии файл сохранялся с спрятанными листами. 4.На первом(титульном ) листе ставим кнопку для начала работы с файлом, которая будет запускать снятие паролей только при нужных Вам условиях...
Таким образом даже при отключении макросов - нельзя увидеть скрытый лист - открыть его при помощи сторонних макросов также не получится(пока не будет взломана защита книги и листов), поскольку стоит защита листа и книги(защиту книги нужно делать на "изменение", а не на открытие). Останется ломать VBA ... ну а его, как я уже писал сломать в выбранном формате не просто Но даже при всем выше перечисленном хакер(или advanced user) сможет получить доступ к информации.... ... но как это сделать писать не буду ... дам только подсказку (AllInternalPasswords).SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Понедельник, 08.09.2014, 11:30
Я смотрел ... если честно не знаю как сломать пароль VBA в формате XLSB. тот же APRVBA - не работает с этим форматом... может другой... дайте подсказку. Можно и не ломать VBA ... :
Я смотрел ... если честно не знаю как сломать пароль VBA в формате XLSB. тот же APRVBA - не работает с этим форматом... может другой... дайте подсказку. Можно и не ломать VBA ... :
Вба можно открыть через OpenOffice ... А там, если удалить нужные строки(нужно знать какие) - можно дорыться к секретной информации. Делаю вывод - OpenOffice - зло
Вба можно открыть через OpenOffice ... А там, если удалить нужные строки(нужно знать какие) - можно дорыться к секретной информации. Делаю вывод - OpenOffice - зло SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Понедельник, 08.09.2014, 14:14