Пароль на защиту листа

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

&quot писал(а):А что за сайт?
http://www.eliansoft.com/
Но там сейчас ничего нет :(
cсылки на старые продукты остались на
http://wareseeker.com/publisher/elian-soft/24334/
Но сами продукты автор похоже убрал из Сети :(
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

VictorM, я когда то развлекался удалением S-кода из скомпилированного
компаунд документа (EXCEL). В принципе это работает. Но результат
неустойчивый. При переносе файла на другой компьютер иногда рабочая
книга не открывалась ...
По идее с xlsx это можно сделать ещё проще ;)
Т.е сохранить скомпилированный проект а потом просто открыть zip и убрать
исходный код. Правда, возможно будет заморочка с контрольными суммами - в офисе 2007 не пробовал.
;)
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Aent, спасибо за ссылки, интересно.
p.s. Вы развлекались, а подобными вещами еще даже не пробовал заниматься :(
пока что это для меня - темный лес :( :confused:
Все что можно найти почитать - на английском, а у меня с ним туго.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

VictorM, Спасибо за код, конечно же буду пробовать, просто знаний пока маловато.
Aent, спасибо за файл то что нужно.
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

Вроде получилось устанавливать случайный пароль при открытии книги. Проверил с помощью двух программ взломщиков, они говорят что книга не защищена, но при открытии пароль стоит. Но с VBA проектом пока не могу справиться, подскажите как можно установить на него пароль (случайный). VictorM решал проблему со снятием пароля с помощью SendKey, а мне наоборот надо установить пароль.
Вложения
Пар.zip
(6.66 КБ) 28 скачиваний
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Mint86, тут такая ситуация:
пароль, установленный программым путем, при открытии рабочей книги, легко обходится. Создаем рабочую книгу с таким кодом:

Код: Выделить всё

Sub NoStart()
Dim iName
 iName = "ИмяКниги"
iFullName = "C:\Temp\" & iName'обе книги в одной папке
With Application
     .EnableEvents = False
     .Workbooks.Open Filename:=iFullName
     .EnableEvents = True
End With
End Sub
открываем эту книгу, запускаем код и все :( . И опять Ваш код беззащитный :confused:
И еще - пароль, созданный случайным образом, сами - то как собираетесь вводить? Или тоже "ломать" прийдется?
IMHO программа, предложенная Aent все - таки лучший вариант. Хотя, может я и не прав, не зная именно Вашей ситации, судить трудно. В любом случае - выбор за Вами.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Mint86, о SendKey "Если знаешь, что нельзя, но сильно хочется - то можно" (с) К.Прудков :)
Посмотрите код в теме http://forum.developing.ru/showthread.php?t=12818, поэкспериментируйте. Сохраняйте сгенерированный пароль в переменную и вставляйте в SendKey. Однако здесь тоже возникают неприятности. Пароль на код VBA, созданный таким образом, не сработает до сохранения и закрытия рабочей книги. Т.е., пароль Вы создали, редактор VBE закрыли, но... Alt+F11 и Ваш код - вот он. :rolleyes: Попробуйте.
Так что, не знаю... :confused:
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

VictorM писал(а):Mint86, тут такая ситуация:
пароль, установленный программым путем, при открытии рабочей книги, легко обходится. Создаем рабочую книгу с таким кодом:

Код: Выделить всё

Sub NoStart()
Dim iName
 iName = "ИмяКниги"
iFullName = "C:\Temp\" & iName'обе книги в одной папке
With Application
     .EnableEvents = False
     .Workbooks.Open Filename:=iFullName
     .EnableEvents = True
End With
End Sub
открываем эту книгу, запускаем код и все :( . И опять Ваш код беззащитный :confused:
И еще - пароль, созданный случайным образом, сами - то как собираетесь вводить? Или тоже "ломать" прийдется?
IMHO программа, предложенная Aent все - таки лучший вариант. Хотя, может я и не прав, не зная именно Вашей ситации, судить трудно. В любом случае - выбор за Вами.
Да, лучше конечно использовать программу от Aent, просто было интересно можно ли это сделать и как. Оказалось что затраты выше чем прибыль :(
Насчет кода, да действительно чел. им может воспользоваться, но раз он знает что такое VBA, то в случае с моей "защитой" он может просто отключить выполнение макроса и заломать пароль. Данная защита конечно же предназначена на среднего юзера. А сам я просто держу второй "резервный" файл, который без пароля.
ИМХО: Как Вы сами сказали в начале топика, если чел. знает как ломать и главное хочет сломать он это сделает, даже если использовать DLL и упаковать его протектором (хотя хлопот будет намного больше).
Спасибо огромное за помощь!
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

Подскажите пожалуйста кусочек кода с помощью которого можно проверить правильность пароля листа. Т.е. если лист защищен, то проверить пароль с определенным паролем.
Сам добился только того что проверяю защищен ли лист

Private Sub workbook_open()
Dim iWorksheet As Worksheet

For Each iWorksheet In ThisWorkbook.Worksheets


If iWorksheet.ProtectContents Then
MsgBox "Лист защищен"
Else
MsgBox "Не защищен"
End If
Next
'ThisWorkbook.Close

End Sub
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Mint86, посмотрите.
Первые два кода я Вам давал, только в первом есть некоторые изменения. Точно так же можно модифицировать и второй код. Читайте комменты. Третий код -
кусочек кода с помощью которого можно проверить правильность пароля листа
если я Вас правильно понял.

Код: Выделить всё

Sub SheetsPassw() ' листы по выбору, если листы скрытые - выскочит ошибка
    iPass = InputBox("Введите новый пароль") 'пароль можно ввести так
    'достаточно интересный вариант, пароль не хранится в открытом виде
'    iPass = "321"' или сразу в коде
For Each iList In Worksheets(Array("Лист1", "Лист2", "Лист3"))
    Worksheets(iList.Index).Protect Password:=iPass, UserInterfaceOnly:=True
'    раскомментируйте MsgBox и увидите работу макроса
'    MsgBox "Имя рабочего листа : " & iList.Name & ", пароль:  " & iPass
    Next
End Sub
Sub AllSheetsPassw() 'все рабочие листы книги, в том числе и скрытые
     Application.ScreenUpdating = False
     Dim iWorksheet As Worksheet, iHidden As Boolean
     For Each iWorksheet In ThisWorkbook.Worksheets
         If iWorksheet.Visible <> True Then 'если есть скрытые листы, перед установкой пароля - отобразить
            iHidden = True
            iOldVisible& = iWorksheet.Visible
            iWorksheet.Visible = True
         End If
         iWorksheet.Protect Password:="12345", UserInterfaceOnly:=True
         If iHidden = True Then ' и опять все скрыть
            iWorksheet.Visible = iOldVisible&
            iHidden = False
         End If
     Next
     Application.ScreenUpdating = False
End Sub
Sub EnterPass() ' можно проверить пароль на правильность
        iPass = "321" 'но только если Вы его знаете :-)
        Pword = InputBox("Введите пароль")
    If Pword <> iPass Then
        MsgBox "Неправильный пароль"
        End
    End If
End Sub
Обратите внимание, новый пароль можно установить ТОЛЬКО сняв прежний пароль.
поэтому, по аналогии с установкой пароля, можно написать процедуру для снятия паролей, перед установкой новых.
p.s. при ответе не обязательно цитировать сообщение целиком :-)
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Ответить