Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 30.01.2009, 15:12   #1
Raikhman
Пользователь
 
Аватар для Raikhman
 
Регистрация: 30.01.2009
Сообщений: 75
По умолчанию Защита приложения Excel от проникновения пользователя в проект VBA

Проект VBA, закрытый паролем легко ломается и пользователь получает доступ к Вашему исходному тексту. Можно-ли как-то исключить возможность открытия редактора кода? Клавиша Alt+F11 легко перехватывается,а меню программы переделывается, но остается еще ярлычек листа.Например, сделать главное окно невидимым, как только пользователь щелкнул на ярлычке листа "Исходный текст"?
Raikhman вне форума
Старый 30.01.2009, 15:36   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Полностью защитить код проекта VBA не получится...

Тема неоднократно обсуждалась на этом и на соседних форумах.
Посмотрите, например, здесь, здесь и здесь.

Цитата:
но остается еще ярлычек листа
Можно убрать (или заблокировать, или переопределить) пункт исходный текст из контекстного меню ярлычка листа.
Не забывайте ещё про аналогичный пункт в контекстном меню книги.
Но это не лучший способ.

Можно сделать, как я видел однажды в одном макровирусе - там переопределяется команда открытия редактора VBA - создаётся пустой макрос с названием типа ToolsMacro - и попытка посмотреть код не удаётся (редактор VBA не открывается).
Но обойти такую защиту очень легко.

Последний раз редактировалось EducatedFool; 30.01.2009 в 15:44.
EducatedFool вне форума
Старый 30.01.2009, 16:24   #3
Raikhman
Пользователь
 
Аватар для Raikhman
 
Регистрация: 30.01.2009
Сообщений: 75
По умолчанию

Как переопределить команду открытия редактора?
Где вообще лежит событие открытия главного окна редактора или его надо самому писать?
Raikhman вне форума
Старый 30.01.2009, 16:34   #4
Raikhman
Пользователь
 
Аватар для Raikhman
 
Регистрация: 30.01.2009
Сообщений: 75
По умолчанию

Подскажите, Как переопределить команду открытия редактора?
Raikhman вне форума
Старый 30.01.2009, 16:42   #5
Raikhman
Пользователь
 
Аватар для Raikhman
 
Регистрация: 30.01.2009
Сообщений: 75
По умолчанию Защита VBA проектов от несанкцианированного использования

Я защищаюсь так: внешним загрузчиком (Exe) загружаю защищенную книгу. Пароль зашит в загрузчик и пользователь его не видит. Самое главное - загрузчик устанавливает низкий уровень защиты макросов, так что пользователь не может отключить макросы.Но открыв книгу он залезает в редактор VBA, с которого он элементарно предварительно снял пароль. Там он вырезает все ненужное и пересохраняет файл без пароля. Я думаю - здесь надо просто не пускать его в проект и тогда он не сможет воспользоваться взломанным паролем.
Что не так?
Raikhman вне форума
Старый 30.01.2009, 17:02   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
внешним загрузчиком (Exe) загружаю защищенную книгу
А этот самый загрузчик после открытия нужной киги продолжает висеть в памяти?

Если да, то всё очень просто.
10 раз в секунду Ваш "загрузчик" считывает заголовки всех открытых окон, и, если среди них присутствует окно с заголовком Microsoft Visual Basic, посылает этому окну команду закрытия.

Но что мешает пользователю снять пароль с файла, и на другом компе (где нет "загрузчика") посмотреть код VBA?
EducatedFool вне форума
Старый 30.01.2009, 19:09   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Raikhman Посмотреть сообщение
он залезает в редактор VBA, с которого он элементарно предварительно снял пароль..
Есть сотни методов эффективных защит, защитите сам файл, а не редактор, например: через RAR + пароль(причем не надо, постоянно распаковывать, запаковывать, работа прям в RAR -е), спрятать док в фотку, заменить расширение ...........

Последний раз редактировалось valerij; 30.01.2009 в 19:25.
valerij вне форума
Старый 30.01.2009, 22:00   #8
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

В дополнение к ссылкам EducatedFool могу порекоменовать посмотреть вот эту тему Пароль на защиту листа.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума
Старый 31.01.2009, 12:23   #9
Raikhman
Пользователь
 
Аватар для Raikhman
 
Регистрация: 30.01.2009
Сообщений: 75
Злость

Но что мешает пользователю снять пароль с файла, и на другом компе (где нет "загрузчика") посмотреть код VBA?[/QUOTE]

Спасибо, EducatedFool и VictorM.

Пароль на файл электронной таблицы, состоящий из 20-30 символов практически не снимается внешними взломщиками паролей. Они эффективны до 10 символов и не более. Но пользователь, находяь в открытом через загрузчик файле, может его пересохранить без пароля, если я не исключу такую возможность. Я ее исключил и написал свое сохранение файла без возможности снятия пароля. Можно изменить только имя. Написал полностью свое меню и запретил его изменение со стороны пользователя и перехватил клавиши доступа к меню и к проекту (Alt+F11).
Таким образом у пользователя осталась одна возможность доступа к проекту VBA со взломанным паролем - через ярлычек листа "исходный текст". Никак не пойму, что здесь можно изменить. Или просто скрыть ярлычки листов, а навигацию по книге написать свою и засунуть ее в меню или контекстнозависимое меню.

Есть два вопроса:
1.Как написать событие на открытие главного окна проекта по типу того что при открытии листа:

Private Sub Worksheet_Activate()

2. Как управлять параметрами этих дурацких ярлычков.
Думаю, от моих дурацких вопросов я потеряю репутацию с 10 до 3.

Последний раз редактировалось Raikhman; 31.01.2009 в 12:43.
Raikhman вне форума
Старый 31.01.2009, 13:23   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Как написать событие на открытие главного окна проекта по типу того что при открытии листа:
Private Sub Worksheet_Activate()
Не понял вопроса.

Может, что-то вроде этого:
Код:
Private Sub Workbook_Activate()    ' при активации книги
    UserInterface    ' изменяем под наши нужды графический интерфейс Excel
End Sub

Private Sub Workbook_Deactivate()    ' при деактивации книги (при переключении на другой файл Excel)
    RestoreInterface    ' восстанавливаем графический интерфейс Excel
End Sub

Private Sub Workbook_Open()
    Application.Visible = False    ' скрываем приложение Excel при запуске формы
    frmMain.Show    ' при открытии файла сразу запускаем главную форму
End Sub
Цитата:
2. Как управлять параметрами этих дурацких ярлычков.
Можно почистить их контекстное меню:
Код:
Sub УдалитьПункт_ИСХОДНЫЙ_ТЕКСТ()
    On Error Resume Next
    Application.CommandBars("Ply").Controls("Ис&ходный текст").Delete
End Sub

Sub ВосстановитьПункт_ИСХОДНЫЙ_ТЕКСТ()
    Application.CommandBars("Ply").Reset
End Sub

Или просто заблокировать данный пункт:
Код:
Sub ЗаблокироватьПункт_ИСХОДНЫЙ_ТЕКСТ()
    Application.CommandBars("Ply").Controls("Ис&ходный текст").Enabled = False
End Sub
Можно просто скрыть ярлычки листов:
Код:
Sub СкрытьЯрлычкиЛистов()
    ActiveWindow.DisplayWorkbookTabs = False
End Sub

Или вообще отключать всё лишнее:
Код:
Sub UserInterface(): ChangeInterface False: End Sub    ' скрывает всё лишнее с экрана

Sub RestoreInterface(): ChangeInterface True: End Sub    ' восстанавливает всё как было

Sub ChangeInterface(ByVal Value As Boolean)
    On Error Resume Next
    With Application
        .ScreenUpdating = False: .Caption = IIf(Value = True, Empty, "Мой заголовок окна Excel")
        .DisplayStatusBar = Value: .DisplayFormulaBar = Value
        For Each iCommandBar In .CommandBars
            iCommandBar.Enabled = Value
        Next
        With .ActiveWindow
            .Caption = IIf(Value, .Parent.Name, "")
            .DisplayHeadings = Value: .DisplayGridlines = Value
            .DisplayHorizontalScrollBar = True: .DisplayVerticalScrollBar = Value:
            .DisplayWorkbookTabs = Value
        End With: .ScreenUpdating = True
    End With
End Sub
Цитата:
Думаю, от моих дурацких вопросов я потеряю репутацию
Ваши вопросы вовсе не дурацкие.

Вот только обеспечить полную защиту таким способом вряд ли удастся...
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на VBA в виде функции пользователя Strel'nikova Помощь студентам 3 31.10.2008 13:53
Как средствами VBA получить доменное имя пользователя? Прохожий Microsoft Office Excel 3 04.10.2008 18:28
защита ячейки в VBA tat-besidovska Microsoft Office Excel 4 06.02.2008 04:57
Формы пользователя Excel Bayers Microsoft Office Excel 3 18.07.2007 21:22
защита приложения от копирования flaxe Общие вопросы Delphi 2 19.11.2006 22:26