Страницы: 1 2 3 4 След.
RSS
Вопросы по защите в Excel/VBA
 
День добрый всем !

Задался целью обезопасить учетную рабочую таблицу чтобы файл Excel работал только на определенном компе
- а если на других открываешь файл самоуничтожается
Нашел замечательный код здесь http://www.programmersforum.ru/showthread.php?t=36480 от уважаемого EducatedFool
Код
Private Sub Workbook_Open()
    Const My_Drive_C_SerialNumber = "12345678" ' сюда пишем серийный номер своего диска
    If Drive_C_SerialNumber <> My_Drive_C_SerialNumber Then
        MsgBox "Вы пытаетесь открыть файл на другом компьютере", vbCritical, "Нет доступа"
        Application.DisplayAlerts = False
        newsh = ThisWorkbook.Worksheets.Add.Name    ' создаём пустой лист
        For Each sh In ThisWorkbook.Worksheets
            If sh.Name <> newsh Then sh.Delete    ' удаляем все листы этого файла, кроме пустого
        Next
        ThisWorkbook.Save
        ThisWorkbook.Close False
    End If
End Sub

Function Drive_C_SerialNumber() As String
    Drive_C_SerialNumber = CreateObject("scripting.filesystemobject").GetDrive("c:\").SerialNumber
End Function

При тесте узнал предварительно серийник диска С своего компьютера (через командную строку сделать wmic diskdrive get model,name,serialnumber ) , ввожу свой серийник диска С  и пробую запустить на своем же компьютере  - но вываливается
MsgBox "Вы пытаетесь открыть файл на другом компьютере"  хотя серийник ввел правильно 100% (перепроверил серийный номер другими прогами)
В чем может быть ошибка - серийник диска обычно выдается большими буквами типа JPS930N11PNDRV  - может маленькими надо вводить или что в коде поправить ?
Изменено: oleg355 - 06.06.2018 17:54:08
 
А просто обернуть и то и другое в UCase, например, не пробовали?
Код
If UCase(Drive_C_SerialNumber) <> UCase(My_Drive_C_SerialNumber) Then
Изменено: StoTisteg - 04.06.2018 14:59:28
 
я к сожалению чайник в VBA  и даже не понимаю как это сделать в UCase   Код выше срабатывает на уничтожение информации - создает пустой лист и удаляет листы с информацией - но почему родной серийник не воспринимает ?
Изменено: oleg355 - 04.06.2018 15:01:27
 
Цитата
oleg355 написал:
обычно
у меня цифрами
Код
    [a1] = CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber
 
У меня тоже возвращает 10-значное число. запустите код
Код
Sub test()
   
   Cells(1,1).value = Drive_C_SerialNumber = CreateObject("scripting.filesystemobject").GetDrive("c:\").SerialNumber

End Sub

и запишите в Ваш код то, что появится в ячейке А1.
Изменено: StoTisteg - 04.06.2018 15:06:04
 
У меня вот такое выдало по коду Catboyun  "-1861936793"    число с минусом   (ячейка A1 в текстовом формате)  это число с минусом без минуса вводить как серийный номер ?
Изменено: oleg355 - 04.06.2018 15:24:53
 
Попробовать с минусом, попробовать без минуса... Неужели нужно все спрашивать на форуме?
 
Число с минусом прокатило - работает   ( проверил на других компах)
Число без минуса не работает ( проверил на других компах)

 хотя это же не серийный номер - откуда это число берется ?  
Изменено: oleg355 - 04.06.2018 15:24:24
 
oleg355, а какая Вам разница, если оно однозначно идентифицирует Ваш комп?
 
Цитата
oleg355 написал: откуда это число берется ?  
Это код логического диска. Хотите серийнный номер , тогда WMI
Код
Sub GetDiskSerialNumvbers()
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("select * from Win32_DiskDrive")
For Each objItem In colItems
    Debug.Print "SerialNumber: " & objItem.SerialNumber
Next
End Sub

Sub GetVolumeSerialNumbers()
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("select * from Win32_LogicalDisk")
For Each objItem In colItems
    Debug.Print "Volume Serial Number: " & objItem.VolumeSerialNumber
Next
End Sub

но может быть несколько дисков.

А то что у вас  - 1861936793 - это серийный номер тома FFFFFFFF A2E6BC67 в HEX.  A2E6BC67 выдаст скорее всего GetVolumeSerialNumbers, но Если я правильно помню, при клонировании этот серийник сохраняется.
Изменено: БМВ - 04.06.2018 16:11:37
По вопросам из тем форума, личку не читаю.
 
Благодарю БМВ за ответ -понял. Еще один вопрос если можно - реализация защиты по  полному пути файла Excel на этих же принципах можно реализовать  ? как понимаю тут
Function Drive_C_SerialNumber() As String  будет просто другая например - как прописать путь файла ?
те 2 защиты совместить - если файл будут пытаться открыть на другом компе или из другой папки (или даже просто переименовав файл)
Код
Function ПутьФайла() As String ' функция по полному пути файла
..................................... как прописать путь файла ?
End Function 

 
Изменено: oleg355 - 04.06.2018 16:00:24
 
давайте представуим меня в роли злоумышленника и я отключил макросы в Excel
и что дальше делать Вашей защите??? (с самоуничтожением, с привязкой к серийному номеру и со всеми прочими макросами, проверяющими легальность использования файла?)
займитесь чем-то созидательным...
Изменено: Ігор Гончаренко - 04.06.2018 16:12:26
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,  ну есть нормальные примеры реализации, не идеальной, но всеж защиты, когда файл открытый на компе с отключенными макросами просто ничего не покажет кроме рекомендации включить макросы и это хоть немного прикрывает тылы и это делается не сложно. Не у Дмитрия ли встречал на сайте. Другое дело, что знать бы что защищаем  :-)? Тут с Вами согласен.
По вопросам из тем форума, личку не читаю.
 
БМВ, нет в Excel приемлемой защиты данных, кроме пароля на открытия файла.
Цитата
БМВ написал:
не идеальной, но всеж защиты, когда файл открытый на компе с отключенными макросами просто ничего не покажет кроме рекомендации включить макросы
снимаем пароль с VBA проекта (если он есть), открываем сильно скрытие листы - всё. Всё это поиграться для начинающих.
«Бритва Оккама» или «Принцип Калашникова»?
 
Для защиты "от дурака" может хватить  - понятно что идеальной защиты нет
 
Цитата
StoTisteg написал:
а какая Вам разница
Напомнило цитату
А вообще если по теме, зачем вам от переименования или адреса защищать? Это Excel файл и у него предназначение ползать туда куда его положат. А если я файл на флешку закинул и открыл дома, получается я не могу с ним дома работать?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Те как понимаю для бм защиты нужно 3 вида защиты
1)Защита на отключение макросов
2)Защита с самоуничтожением по серийному номеру при переносе на другой комп
3)Защита с самоуничтожением по пути файла и имени файла
ну и запаролить VBA

"Alemox написал:
А  вообще если по теме, зачем вам от переименования или адреса защищать?  Это Excel файл и у него предназначение ползать туда куда его положат. А  если я файл на флешку закинул и открыл дома, получается я не могу с ним  дома работать?"
да предполагается  что пользователь только на рабочем может пользоваться например базой данных и пр - если захочет уволочь с флешкой - то не получится
Изменено: oleg355 - 04.06.2018 16:36:02
 
я не буду обсуждать тему взломов, но надежда на защиту сделанную дилетанскими способоми - как минимум просто наивна
oleg355,
и чем меньше Вы обсуждаете способы защиты на публичных форумах, тем больше вероятности, что хоть что-то получиться
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
У вас там база данных для FBI. Что-то у нас все жадными стали до того, что они что-то придумали причём на работе скорее всего. Такое ощущение будто 1С свою написали. Чуваки OS с открытым кодом пишут и программы, которыми пользуются миллионы, а тут файлик, на который миллион защитных уровней.
Как вариант ещё рассмотрите защиту через реестр. Чтобы уж наверняка.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
oleg355 написал:
идеальной защиты нет
Это верно. Все зависит от того, насколько ценен ваш код.
Цитата
oleg355 написал: 3 вида защиты
Все ваши варианты решаются на раз. Профи будет лень что-то ломать, если он быстрее сделает сам. Разве из спортивного интереса, но это с опытом проходит, начинаешь уважать труд коллег.
«Бритва Оккама» или «Принцип Калашникова»?
 
Извините что поднял тему - но это хотя бы чтото - лучше чем ничего
 
Цитата
bedvit написал:
Всё это поиграться для начинающих
Приемлемое  - означает сопоставимое.  Защита не должна стоить дороже содержимого :-)
По вопросам из тем форума, личку не читаю.
 
По опыту форумному: обычно с вопросами защиты выходят те, у кого и защищать-то особо нечего.
А вот где посерьезнее, где есть что прятать - разработчики уже на таком уровне, когда сами знают, как защищаться, или ищут способы защиты не так открыто. Уверен, у каждого, кто этим "страдает",  есть свои секреты и любимые методы. И делиться ими налево и направо не будут.
 
Виктор, все верно.

Цитата
БМВ написал: Защита не должна стоить дороже содержимого :-)
Поэтому сложные решения (которые хотят защитить) не делают в VBA :)
«Бритва Оккама» или «Принцип Калашникова»?
 
Ну скажем так, если отойти о защиты, то не знаю за чем это нужно, но заводской серийный номер диска(ов) получается кодом из #10 :-)
По вопросам из тем форума, личку не читаю.
 
oleg355, если уж Вам так приспичило защищаться, подсказываю простой способ по принципу отца Брауна :)
1. Разархивируете файл WinRAR-ом
2. Архивируете обратно, с паролем
3. Переименовываете во-что-нибудь нафиг никому не нужное, типа "Фотачки Нюты.rar"
 
Цитата
StoTisteg написал: Фотачки Нюты.rar
Плохой совет. Особенно если Фотачки Нюты топлес.rar. Взломают. И какое будет разочарование! :)
 
vikttur, не вопрос. Архив Анализы.rar точно никому не нужен :) И потом тот, кто станет такое ломать, всё равно не поймёт, что сломал...
Изменено: StoTisteg - 04.06.2018 18:52:27
 
Зачем раром и так сложно, если можно просто поставить пароль на открытия файла. По взломостойкости также как .rar
«Бритва Оккама» или «Принцип Калашникова»?
 
Если нужна привязка к жесткому диску, - лучше использовать такую функцию
http://excelvba.ru/code/HardwareID
но она работает не всегда (почему - не знаю, как-то поднимал эту тему на форуме уже),
потому, надо комбинировать с другими идентификаторами в случае ошибки WMI
Страницы: 1 2 3 4 След.
Наверх