Страницы: 1
RSS
Как уберечь файл от воровства
 
Вот столкнулся с таким явлением.  
Приятель вел базу покупателей в файле Excel. Доброжелатель скопировал этот файлик и поимел его клиентуру. Была поставлена задача уберечь файл от копирования на чужой компьютер.  
 
Решил её так: создал код, который читает номер диска компьютера, при первом входе пользователю предлагается установить свой пароль на документ. Создается скрытый лист, в ячейки которого записывается номер диска и пароль. При повторном входе в систему вываливается окошко с запросом пароля, если пароль и номер диска совпадают, тогда книга открывается. При тупом копировании файла, даже если пароль известен, но нет совпадения с номером диска, выдается системное сообщение о том, что файл поврежден. Книга закрывается.  
 
Может, есть ещё интересные решения защиты книги от воровства? Было бы неплохо, если бы поделились соображениями!
 
А не могли бы Вы поделиться программным кодом. Просто сейчас столкнулся с такой же ситуацией:  на созданный мною файл уже имеется слишком много желающих, а он создается только для одного рабочего места.
 
Буду благодарен за наводку на взлом файла, который защитил именно этим способом.  
Хотел бы усовершенствовать данный алгоритм. Просто мне нравится делать  эксперименты в Excel.  
 
А как насчет подбора пароля стандартными возможностями и программами?  
Взломать можно всё, мы это все прекрасно знаем. Конечно, может это и паранойя!  
 
Вполне достаточно штатного запароливания. Просто хотел поделиться некоторой идейкой.  
P.S.  
Если макросы отключены, то и сделать ничего нельзя, просто происходит завис книги, не более того. Лист защищен, нет даже возможности что-то на нем редактировать.. Сочетание CTRL+BREAK отключено.
 
Дело в том, что идея состоит не в том, чтобы вывести форму на запрос пароля, таким образом стимулируя вора взломать код, а в том, чтобы отбить у него желание вообще пытаться что-то сделать, получив сообщение о том, что файл поврежден. Это поставит его в тупик.
 
{quote}{login=SerJukov}{date=07.03.2010 10:28}{thema=Re: Как уберечь файл от воровства}{post}А не могли бы Вы поделиться программным кодом. Просто сейчас столкнулся с такой же ситуацией:  на созданный мною файл уже имеется слишком много желающих, а он создается только для одного рабочего места.{/post}{/quote}  
 
Вот ориентировочный упрощенный код. Переделайте то, как Вам нужно. Тут всё очень просто, думаю, проблем с внедрением не будет.  
 
Пожелания и комментарии приветствуются!!!  
 
Private Sub Workbook_Open()  
Dim fs, d, disk  
 
Worksheets("example").Visible = True  
 
 
 
   Set fs = CreateObject("Scripting.FileSystemObject")  
   Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))  
         
' Пока данные не известны  
If Worksheets("example").Range("b2").Value = "" Then  
 disk = d.SerialNumber  
Worksheets("example").Visible = True  
Worksheets("example").Unprotect Password:="12345"  
Worksheets("example").Range("b2").Value = disk  
End If  
 
 
If Worksheets("example").Range("b2").Value <> "" Then  
 disk = d.SerialNumber  
If Worksheets("example").Range("b2").Value <> disk Then  
msg = "Файл поврежден! Работа прекращена!"  
MsgBox msg  
Application.DisplayAlerts = False  
Application.Workbooks.Close  
End If  
End If  
 
 
If Worksheets("example").Range("b1").Value = "" Then  
Worksheets("example").Visible = True  
Worksheets("example").Unprotect Password:="12345"  
Range("B1:b2").Select  
   Selection.NumberFormat = "General"  
 
Worksheets("example").Activate  
'Range("b1").Select  
 
Exit Sub  
End If  
 
'Показываем форму для ввода пароля  
pass.Show  
 
End Sub  
 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
'Блокировка Save as  
If SaveAsUI Then  
       Cancel = True  
   End If  
End Sub  
 
 
Это код для формы ввода пароля  
 
Private Sub CommandButton_OK_pass_Click()  
 
If ThisWorkbook.Worksheets("example").Range("b1").Value = pass_field.Value Then  
Application.ScreenUpdating = False  
Worksheets("necessary sheet").Activate  
Application.ScreenUpdating = True  
Unload pass  
' Показываем то, что требуется  
Exit Sub  
End If  
 
 
 
pass_field.Value = ""  
pass_field.SetFocus  
 
 
msg = "Вы не знаете пароля!" & vbCrLf  
msg = msg & "  Программа будет закрыта!"  
MsgBox msg  
Application.DisplayAlerts = False  
Application.Workbooks.Close  
 
 
Exit Sub  
 
End Sub  
 
Это для того, чтобы юзер не смог закрыть форму, нажав на крестик справа вверху:  
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
msg = ""  
If CloseMode = vbFormControlMenu Then  
msg = msg & "Таким образом" & vbCrLf  
msg = msg & "   форму закрыть нельзя!" & vbCrLf  
MsgBox msg  
Cancel = True  
End If  
End Sub  
 
Private Sub Worksheet_Activate()  
InputPass = InputBox("Введите Ваш будущий пароль доступа к файлу!")  
 'Worksheets("example").Unprotect Password:="12345"  
 
 
Sheets("example").Range("b1").Value = InputPass  
On Error Resume Next  
Sheets("example").Protect Password:="12345", DrawingObjects:=True, Contents:=True, Scenarios:=True  
ActiveWorkbook.Save  
Worksheets("example").Visible = xlSheetVeryHidden  
Application.ScreenUpdating = False  
Worksheets("example-example").Activate  
Application.ScreenUpdating = True  
'Тут показываем то, что Вам требуется  
End Sub  
 
 
И напоследок:  
 
Private Sub Worksheet_Deactivate()  
     
   ActiveWorkbook.Save  
   Sheets("example").Protect Password:="12345", DrawingObjects:=True, Contents:=True, Scenarios:=True  
Worksheets("example").Visible = xlSheetVeryHidden  
' Переходим на нужный лист      
End Sub
 
REMniOFF! Спасибо большое! Думаю, что за выходные найду время заняться кодом!
 
Как пример. Привязка к жесткому диску. Пароль - 123
 
Спасибо за листинг.    
Но тут у Вас нет свободы для пользователя. Вам заранее известен серийник диска, к тому же Вы жестко устанавливаете свой пароль, что может не понравиться пользователю.  
 
Я предложил свой способ, как вариант при установке на не известный заранее компьютер. Листинг упрощен, показана именно та часть кода, которая отвечает за считывание номера диска и назначения свободного пароля пользователя.  
Паранойя состоит и в том, что при получении файла почтой, пользователь устанавливает его на машину, при первом запуске программа считывает диск, предлагает установить пароль, после чего, в теневом режиме, удаляет скачанный файл.  
 
Я и открыл специально эту тему, так как вопрос может интересовать многих разработчиков. Штатные средства защиты достаточно упрощены. Конечно, сломать пароль в 2007 сложнее, чем в 2003. Однако, тут есть и неудобства при паролировании файла. Ведь скачанная книга может быть передана другому челу вместе с подсмотренным или сворованным паролем.
 
{quote}{login=REMniOFF}{date=08.03.2010 09:58}{thema=Re: }{post} при получении файла почтой,<...> удаляет скачанный файл.{/post}{/quote}Я этого не увидел в Вашем примере. Интересно, как Вы определяете почтовую программу и в ней что-то удаляете? И я бы сказал, что пользователю сильно не понравится, что кто-то ему файлы удаляет и в почте ковыряется.
Bite my shiny metal ass!      
Страницы: 1
Наверх