Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Как спрятать код макроса от редактирования пользователем?

Автор Олег*, 04.04.2013, 13:54

« назад - далее »

Олег*

Добрый день!

Возникло желание поделиться книгой с макросом со своим приятелем, но в то же время не хочется, чтобы у него была возможность просматривать/изменять код макроса, поскольку он в этом все равно ничего не понимает. Можно ли это сделать?

Правильно я понимаю, что "обычными" средствами это недостижимо и надо будет как-то "колдовать" с созданием надстроек, чтобы обеспечить такую скрытность?

У меня Excel 2010, а у приятеля Excel 2003.
Муж это единственный зарегенный юзер, а все остальные это хакеры :)

Serge 007

Поставьте пароль на проект. Это самое простое, удобное и надёжное решение.
Или скомпилируйте проект в DLL-ку, если знаете как это сделать.
Все остальные решения - так или иначе, это костыли
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

_Boroda_

#2
В Ecxel жмем Alt+F11 - вылезаем в VBA
там жмем Ctrl+R - вылезаем в окно проектов (если оно уже открыто, то этот шаг можно пропустить)
там жмем ПКМ в любом месте внутри нужного проекта, выбираем ВБАПроджектПроперти...
Поскольку вражеский Вы знаете, дальше разберетесь (там 2 вкладки)
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Олег*

Serge 007 и _Boroda_
Спасибо за супер-оперативную подсказку, сейчас буду разбираться.
О результатах обязательно отпишусь.
Муж это единственный зарегенный юзер, а все остальные это хакеры :)

Олег*

Все, спасибо! Разобрался, проверил, работает!!!

Цитата: _Boroda_ от 04.04.2013, 14:11
В Ecxel жмем Alt+F11 - вылезаем в VBA
там жмем Ctrl+R - вылезаем в окно проектов
там жмем ПКМ в любом месте внутри нужного проекта, выбираем ВБАПроджектПроперти...
Поскольку Вражеский Вы знаете, дальше разберетесь (там 2 вкладки)
А я туда еще перед открытием этой ветки заглядывал и даже галку ставил, и даже пароль вводил, но почему-то не срабатывало. Наверно, это потому что я открытый файл, сохранил под другим именем (чтобы не портить оригинал), а потом оказалось, что запаролил не тот (из этих двух) который хотел. В результате получилось, что мог открывать и просматривать код макросов безо всяких паролей.
Тогда я решил, что такой возможности просто не существует, поскольку если бы была такая простая возможность, то я бы о ней обязательно знал :)  Короче говоря,  такая ущербная логическая цепочка в голове у меня выстроилась :)

Потом вспомнил, что Уокенбах писал, что одно из преимуществ надстроек зто сокрытие кода от пользователя. Сделал все как у него описано, но оказалось, что в результате не только код макроса оказался скрытым, но и вся книга :)  И как мой приятель будет с ней работать, стало совершенно не понятно :)

Одним словом, вся надежда, как всегда, оставалась только на форум. Ну вот он и выручил уже в который раз. Огромное спасибо, а то пришлось бы мне сейчас "копать" совершенно не в том направлении, в смысле, разбираться с этими самыми надстройками.

Цитата: Serge 007 от 04.04.2013, 14:05
Или скомпилируйте проект в DLL-ку, если знаете как это сделать.
А как это сделать, меня заинтересовало? И что в результате увидит конечный пользователь?
Муж это единственный зарегенный юзер, а все остальные это хакеры :)

_Boroda_

Только учтите, что все это (пароль на VBA) вскрывается элементарно. Просто вручную, не говоря даже о спецпрограммах-вскрывашках.
Кстати, про это в правилах форума написано: "Запрещается обсуждение способов взлома защиты программ и файлов".

А надстройку можно сделать и видимой, и невидимой. По желанию.
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Serge 007

Цитата: _Boroda_ от 04.04.2013, 15:08
...пароль на VBA вскрывается элементарно...
Саш, ты что-то путаешь
Пароль на проект - это достаточно серьёзная защита, со сложным хэш-шифрованием. В отличие от паролей листов и книги Excel, вскрыть или подобрать пароль на проект VBA обычному юзеру на порядок сложней, а иногда и вообще невозможно, особенно если он не является специалистом в области хакерства :)
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Олег*

#7
Цитата: _Boroda_ от 04.04.2013, 15:08
Только учтите, что все это (пароль на VBA) вскрывается элементарно. Просто вручную, не говоря даже о спецпрограммах-вскрывашках.
Кстати, про это в правилах форума написано: "Запрещается обсуждение способов взлома защиты программ и файлов".
Да какие там спецпрограммы :) Он (мой приятель) не знает даже, как в редактор VBA в Экселе перейти, а, скорее всего, даже не подозревает, что в Экселе вообще можно программировать как-то. Это я просто страхуюсь от того, чтобы он как-нибудь туда случайно все-таки не залез, что-нибудь там не испортил, а потом мне претензии не предъявлял, дескать, не работает твоя разработка.
А так я хоть буду наверняка знать, что он туда не лазил, ничего там не менял, и я могу в случае каких-нибудь проблем исходить из того, что там все осталось в том состоянии, в котором я ему все это дело вручил :)

Цитата: _Boroda_ от 04.04.2013, 15:08А надстройку можно сделать и видимой, и невидимой. По желанию.
А видимой, это как?
Я все делал по описанию из книги Уокенбаха, а в результате, когда к новой книге подключил эту надстройку (а она с несколькими листами и даже с диаграммами), ничего вообще не произошло. Как был пустой Лист1, так и остался пустой Лист1 :)

Ну, как я уже понял, для моей исходной цели это не нужно.
Одним словом, остановлюсь на том, что уже есть, а именно, что код макроса среднестатистический пользователь изменить самостоятельно не сможет, а к этому я, собственно, и стремился.

Короче говоря, давайте забудем про все эти надстройки :)

Вы мне лучше подскажите, как сделать так, чтобы для него процедура первого запуска моей книги (с макросом) прошла наиболее гладко. В смысле, чтобы поменьше всяких пугающих окон выскакивало при первом запуске. Сам-то я знаю, как макросы подписывать, так и делаю. А ему придется тоже пошагово объяснять, как это делать? И ему придется тоже проходить всю эту процедуру от начала до конца? Или можно как-то упростить, чтобы как-нибудь сразу выскочило окошко, в котором будет написано что-то вроде: "Автор - Олег. Доверять макросам, полученным из этого источника? Да/Нет".
Теоретически, есть еще вариант установить на его компе самый низкий уровень системы безопасности, но я этот вариант сразу отвергаю. Я и сам так никогда не делаю, и никому не советую.

Еще раз напомню, у меня Excel 2010, а у него 2002 или 2003 (скорее всего 2003 все-таки).

Ну или как мне составить для него описание тех шагов, которые он должен будет выполнить на своем компе, чтобы это было, скажем так, не слишком пугающе? А иначе он просто не захочит с этим заморачиваться.

Я по себе знаю, что бывает иногда довольно хлопотно запускать свои же собственные макросы на своем же собственном компе, но не том, на котором они были разработаны. Приходится заново подписывать макросы и проходить другие формальности.

Меня сейчас совершенно не интересуют какие-то хакерские штучки. Совсем наоборот. Интересует совершенно "официальное", но понятное разъяснение юзеру, как запустить книгу Экселя с чужими макросами, не снижая при этом уровень безопасности системы.

В принципе, можно, конечно, поехать к нему домой и установить все самому, но мы с ним живем на противоположных концах Москвы, встречаемся очень редко и обычно летом. Честно говоря, не хотелось бы ради всего этого нарушать установившуюся традицию :)








Муж это единственный зарегенный юзер, а все остальные это хакеры :)

_Boroda_

Цитата: Олег* от 04.04.2013, 15:50
А видимой, это как?
Да хотя бы прописать в ней Private Sub Workbook_Open()
ThisWorkbook.IsAddin = False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.IsAddin = True
End Sub

Про "пугающие" окна - я своим товарищам объясняю так: если файл, который заведомо с макросом, открывается БЕЗ окна с вопросом типа "Включить макросы?" (или файл, в котором макросов быть не должно, задает такой вопрос), тогда срочно звони мне, ничего больше не нажимай и вообще что-то не то творится у тебя. Т.е., появление такого окна показывает, что все в порядке. И один раз нажать на кнопку, соглашаясь с работой макросов, это не только не должно быть в лом, а наоборот, прививает человеку очень полезную привычку внимательно за этим следить. Кстати, из этой же серии - про низкий уровень безопасности - абсолютно согласен.
Цитата: Serge 007 от 04.04.2013, 15:27
Саш, ты что-то путаешь
Не, не путаю. Конечно, не настолько просто, как, например, пароль на лист, но при желании...
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Prist

#9
Цитата: Serge 007 от 04.04.2013, 15:27
Пароль на проект - это достаточно серьёзная защита, со сложным хэш-шифрованием. В отличие от паролей листов и книги Excel, вскрыть или подобрать пароль на проект VBA обычному юзеру на порядок сложней, а иногда и вообще невозможно, особенно если он не является специалистом в области хакерства :)
Позволю себе не согласиться в некоторых моментах. Защита листов, книги на редактирование и проекта VBA сделаны как "защита от дурака". Ничего сложного в этой защите нет. Хэш этих паролей всего 16 бит и поэтому подобрать такой пароль не составит особого труда. Даже макросом перебора, что по времени будет не так уж много - несколько минут(в зависимости от мощности ПК). Проект VBA возможно чуть сложнее(официальных упоминаний про применяемые алгоритмы нет, но полагаю, что мало чем они не отличаются от защиты листа и книги, т.к. VBA не менялся в последнее время(после 2003 Excel) - все силы были брошены на VSTO, который обещали внедрить в офис, но пока все еще ждем).

А вот для шифрования пароля на открытие книги применено намного более стойкое ко взлому 128-разрядное шифрование по алгоритму AES. С перебором подобного пароля не справится ни один даже самый мощный компьютер. Сломать, конечно, можно и его - но никак не в домашних условиях и я даже не могу представить сколько на это нужно времени.
Насколько я заню в более ранних версиях Excel(97-2003) до определенного момента использовался менее стойкий ко взлому алгоритм с шифрованием RC4 с длиной хэша всего 40 бит. Т.е. теоретически даже на обычном ПК можно было взломать за примемлемое время(относительно, конечно - месяц или около того). Затем он так же был заменен на AES.

Думаю, нет надобности говорить, что пароль надо задавать тоже стойкий: буквы загланые вперемешку со строчными и спец. символами(&,%,# и т.п.), а длина пароля не менее 8 символов. 4-символьный пароль вполне возможно сломать простым перебором.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

Олег*

Всем большое спасибо за советы и разъяснения!

Передумал я ему эту программу отдавать :) Я ему постоянно скриншоты диаграмм по скайпу посылаю, а если у него у самого эта программа будет, которая автоматически все диаграммы строит и анализирует, то на хрена, спрашивается, ему мои скриншоты нужны будут, и что я тогда ему буду посылать? :) 

Но все равно, разговор в этой ветке был для меня очень полезен. Может быть когда-нибудь все-таки соберусь ему какие-нибудь макросы отдать, ну вот тогда оно и пригодится.


Муж это единственный зарегенный юзер, а все остальные это хакеры :)

zs

Извините, уважаемые коллеги, за непрофи-фразу! "Чем больше пишешь. тем больше знаешь". Имеет ли смысл сея мысль в Вашем диалоге-решать вам.;)