Страницы: 1 2 3 4 5 След.
RSS
XLL хранение и выполнение VBA кода, или защита VBA кода от просмотра?
 
Мое почтение, джентльмены...
Делал для себя инструмент позволяющий хранить уже наработанный VBA код и его исполнять из XLL.
Но тут случился Омикрон и проснулся сумрачный гений или случился сон разума... скорее второе...
Сон прошел, но вот что осталось...
Своим VBA-решением можно поделится с коллегами. Они смогут его использовать, но не смогут посмотреть код.
Функционал:
+Создана форма для загрузки и выполнения загруженного VBA-кода (загружаемый код - с Option Explicit и другими операторами).
+Можно запускать прямо с главной панели (выбрав из списка нужный)
+Можно задавать пароль на просмотр (по умолчанию это слово "Пароль")
+Можно смотреть VBA-код, если знаешь пароль.
+Можно выполнять VBA-код, даже если не знаешь пароль.
+Код хранится зашифрованный в файле сохранения настроек библиотеки (BedvitXLL.bin).
+Пароль не хранится, а хранится его хеш
+VBA-код может загрузить любой пользователь и любой пользователь его использовать, при условии включенного доступа к объектной модели проектов VBA.
-пока работает только один модуль VBA
-выполняется только Sub() без аргументов, или с аргументами по умолчанию в качестве стартовой процедуры. В самом коде нет ограничений. Просто вызов с кнопки, аргументы сейчас не передаются. Но доработать можно при наличии интереса.
-нельзя использовать Function(), другими словами UDF.
-функционал скромный, обрисовал только концепцию (на большее просто нет времени)
-кнопка "сохранить в файл" для сохранения кода в формате С++(доп.функционал для автора, для пользователя не нужная), все настройки сохраняются автоматически при загрузке.


Скачать сокращенную версию BedvitXLL(v3.0.0.1)
или Полную последнюю версию на сайте

В библиотеки предзагруженный тестовый код с паролем по умолчанию (можно посмотреть - кнопка "показать код")

Кому интересно, прошу протестировать.
Автору так же интересен момент, есть ли дыры в защите.
Пишите, заделаем бреши, если они есть (проект создан чисто из спортивного интереса)
Изменено: bedvit - 10.04.2022 17:19:00
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, приветствую!
Кодом создать/удалить/изменить код можно с помощью ActiveWorkbook.VBProject.VBComponents.CodeModule — в твоём решении тот же принцип (если не брать во внимание защиту) или что-то другое?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, Алексей, мое решение в том, что любой пользователь может загрузить свой код и поделится с коллегой. Коллега сможет этот код выполнять, но не сможет посмотреть. Идеально для спецов зацикленных на защите своего кода.

Как работает: открыть форму, скопировать свой код из модуля VBA, вставить его в форму и нажать кнопку загрузить (предварительно задав пароль). Всё! Теперь этот код можно использовать на любой пк, если поставить там мою xll (вместе с файлом сохранений). Но код посмотреть без пароля нельзя.

Код и модули создаются с помощью объектной модели  (COM) Excel
Изменено: bedvit - 24.02.2022 10:22:24
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: Коллега сможет этот код выполнять, но не сможет посмотреть
Да — в этом есть смысл и необходимость. Спасибо!  :idea:
Я в единичных случаях только обфускацию делал
Изменено: Jack Famous - 24.02.2022 10:34:34
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
-выполняется только Sub() без аргументов
-нельзя использовать Function(), другими словами UDF.
Очень жаль... Дважды очень жаль.
 
tutochkin, немного поправлюсь, нельзя в качестве первой - вызывающей процедуры, в самом модуле/коде можно.
+ Это первый набросок, ничего не ограничивает добавить аргументы в возов функции. Это возможно. Вопрос времени. Но для чего это нужно? Можно сделать несколько sub(), каждый с нужным вызовом.
Считайте что каждый вызывающий sub() это кнопка. На кнопку вы же не вешаете sub()  с аргументами.
Изменено: bedvit - 25.02.2022 14:54:55
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, у нас немного разные задачи в Excel. У меня на 99,9% это именно функции с аргументами... И их очень много (тысячи две - три точно за год набирается...). И очень не хочется их просто так отдавать. Но приходится, ибо - а как не отдать?
Переделать в Sub с привязкой к ячейкам не вариант...
 
tutochkin, как аргументы попадают в функцию? Это udf?
Изменено: bedvit - 26.02.2022 21:56:15
«Бритва Оккама» или «Принцип Калашникова»?
 
Есть у меня одна идея, думаю обсудить здесь с участниками форума.
В продолжении своей темы по хранению кода vba. Решил убрать такие недостатки как невозможность udf и все другие.
Для этого решил хранить сразу всю xlam.
Меры безопасности:
1. Хранение в зашифрованном виде
2. Сам файл запаролен случайным паролем, с открытия до закрытия.
3. Проект запаролен автором.
4. Внесён макрос на событие копирования книги, запрещающее это действие Private Sub workbook_BeforeSave
+Правильно ли я понимаю что, скопировать кодом код из запароленного модуля нельзя?
+Скопировать кодом файл тоже нельзя.
Годно?
Изменено: bedvit - 26.02.2022 23:03:45
«Бритва Оккама» или «Принцип Калашникова»?
 
Здравствуйте
Хотел опробовать надстройку.
Ожидал что при изменении кода код должен сохраниться, но этого не произошло. Что я сделал не так?
Изменено: Михаил Л - 27.02.2022 10:19:06
 
Михаил Л, код нужно менять в форме xll. Как вы вносили и изменяли код?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Как вы вносили и изменяли код?
Надстройки - ХРАН - Показать код  -  Добавил пробелы  -  Загрузить код  -  сохранив, закрыл файл  -  Открыл файл - Изменения не сохранились
 
Попробовал так: открыл BedvitXLL(x64).xll, изменил код макроса Test, чтобы сохранить -создал книгу и сохранил. Открыл эту книгу и изменений в коде опять нет.
Excel 2021 - Office LTSC
 
Какой файл? Данные хранятся в xll. Откройте форму, нажмите "Показать код" и посмотрите сохраняются ли там измененения. Ничего закрывать и открывать не нужно.
«Бритва Оккама» или «Принцип Калашникова»?
 
Код хранится в xll, и при изменениях он сохраняется, сразу при загрузке. Можно открыть форму и посмотреть изменения сразу. Никаких доп файлов не нужно.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Откройте форму, нажмите "Показать код" и посмотрите сохраняются ли там измененения
Да, сохраняются. Что дальше делать?
Выключил компьютер, включил компьютер, открыл надстройку, нажал "Показать код". В коде нет изменений(условных пробелов).
Я извиняюсь конечно. Разве не должны сохранять изменения?
Я еще в пятницу пробовал вместо макроса Test вставлять другой макрос, но при открытии файла там опять макрос Test.
Может кто повторит мои действия и отпишется
 
Может я и вправду чего не понял)
Рабочая ситуация: заказчик дает задание - нужно макросом перенести значение из ячейки A1 в ячейку D1 и отправляет файл F. Я создаю макрос A, который переносит значение. Открываю ХРАН, Показать код и вместо макроса Test вставляю макрос A. Выставляю пароль и жму Загрузить код.
Далее что, я так понимаю отправляю надстройку с моего компьютера заказчику. Заказчик устанавливает надстройку, открывает файл F, открывает форму ХРАН, выбирает макрос A, жмет Выполнить. Макрос сработал.
Заказчик рад, оплачивает, я ему отправляю код макроса.
Так должно происходить отношения?
Может я и вправду чего не понял
 
Михаил Л, Михаил, все верно, только с xll есть еще файл bin, там хранятся все сохранения. Сейчас проверю у себя сохранения после закрытия библиотеки.
«Бритва Оккама» или «Принцип Калашникова»?
 
Да, действительно, был отключен функционал сохранения. Включил, библы перезалил. Проверяйте.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Проверяйте
теперь изменение в макросе Test сохраняется :)

Можно уточнение:
Цитата
Михаил Л написал:
и вместо макроса Test вставляю макрос A. Выставляю пароль и жму Загрузить код. Далее что, я так понимаю отправляю надстройку с моего компьютера заказчику
При этой ситуации что отправлять заказчику?
Надстройку с файлом bin? Где находится файл bin?
 
Да два файла, xll и bin. Все два находятся рядом. При установке надстройки в папке надстроек, при простом открытии xll, в той же папке, что и xll.
Если у заказчика уже стоит xll нужной версии, то можно переслать только bin. Все пользовательские настройки хранятся в bin, в т.ч. и зашифрованный код vba. Ему нужно будет просто положить в ту же папку, где и запускаемая xll.
Изменено: bedvit - 27.02.2022 19:13:11
«Бритва Оккама» или «Принцип Калашникова»?
 
Попробовал запустить файл на другом ноуте. Не сработало. На первом ноуте Excel 2021 64разряд, на втором Excel 2010 32разряд.
Что я сделал?
Отправил архив и bin. Причем bin нашел в папке - C:\Users\user\AppData\Roaming\Microsoft\AddIns
На другом ноуте запустил Installer_...xlam . Нашел папку AppData\Roaming\Microsoft\AddIns и туда скопировал bin.

Завтра попробую на работе. Там тоже Excel 2021 64разряд
 
Проверьте во втором случае, что бы в папке были два файла (обычно папку настроек можно посмотреть через подключенные надстройки в Excel.
+ Должнен быть включен доступ к объектной модели проектов VBA. Проверьте.
Разрядность xll не должна влиять на функционал и на файл bin. Это бинарный формат, он совместим с х86 и с х64.
Т.е. в вашем случае должно работать.
Попробуйте создать bin в x32 и использлвать на х64. Не могу проверить, дома х64 Excel.
Если не сработает, можно вас попросить посмотреть размер создаваемых bin в Excel x32 и Excel x64?
Изменено: bedvit - 27.02.2022 20:37:21
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Должнен быть включен доступ к объектной модели проектов VBA
Это и было причиной. Теперь работает!!! Спасибо
Насчет bin сейчас сделаю
 
Создал bin в Excel 2010 32 разряд и использовал этот bin в Excel 2021 64разряд. Все сработало!
В папке Addlns можно сохранять хот сколько bin-ов. Надо только выбирать нужный.


А так размеры bin - 32разряд - 970b, 64разряд - 986b


А нельзя ли сделать версию надстройки только для этого дела - XLL хранение и выполнение VBA кода.
То есть оставить только это:
Изменено: Михаил Л - 27.02.2022 21:14:53
 
Михаил, спасибо. Представлялось, что размер должен быть одинаков. Количество сохранений может быть любое. Но автоматически все изменения сохраняются в базовом варианте BedvitXLL.bin
Он же используется при начальной загрузке xll (применяются сохраненные настройки). Вручную можно выгрузить/загрузить любое сохранение.
Изменено: bedvit - 27.02.2022 21:17:55
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Михаил Л написал:
А нельзя ли сделать версию надстройки только для этого дела - XLL хранение и выполнение VBA кода
Можно создать единичную отдельную версию, где почти весь остальной функционал можно отключить. Могу сделать лично для вас. Но в дальнейшем все обновления алгоритмов все равно будут происходить в основной версии. Какой смысл развивать несколько версий одной и той же библиотеки? Проще сделать список включаемых/отключаемых команд в основной версии (когда руки дойдут).
Изменено: bedvit - 28.02.2022 00:12:54
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, здравствуйте
На работе все отработало нормально
Цитата
bedvit написал:
Проще сделать список включаемых/отключаемых команд в основной версии (когда руки дойдут
Ну это наверное не скоро будет.
Может, не только мне лично, а в эту тему в пост 27 выложить, а через неделю удалить :)
Мне это нужно чтобы у заказчика было меньше вопросов по остальным командам.
 
Работает - это хорошо.
Внесение нового функционала зависит от свободного времени автора и уровнем интереса в реализации чего-то нестандартного.
Выкладывать на неделю нет смысла, ибо потом тема будет, а решения не будет, это неправильно. Лучше приложить отдельной ссылкой по просьбе заинтересованных пользователей.
Заказчику можно прокоментировать, что это свободно распространяемый, бесплатный набор инструментов и функций, используемый некоторыми спецами на разных форумах, в .т. на Этом, Киберфоруме и т.д. Им пожно пользоватся, при желании.
Автор гарантирует отсутствие встроенного вредоносного кода в библиотеке, за исключением пользовательских сохранений (здесь заказчик на свой страх и риск использует данный функционал, подгружая сторонний bin, и запуская макрос).
Полного описания фкнционала нет (не успел еще на сайте вики накидать), но есть отдельные темы по разбору:
Планета Excel
Киберфорум
Оффиц. сайт
Так же есть краткое описание функционала на каждой кнопке, в виде всплывающей подсказки.
Изменено: bedvit - 28.02.2022 09:59:36
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, приветствую!
    Когда у меня какой-то большой проект и отдельные его части я могу использовать где-то ещё, то эти части имеет смысл вынести в отдельные программы. Я имею ввиду, что у тебя есть файловый менеджер, который может "вшить" в файл что угодно.
    Надо просто вшить в файл зашифрованный код, дать шифратор. Вроде как стало не сильно сложнее, зато гораздо проще в реализации (тебе), если я не ошибаюсь и достаточно будет отправлять только сам файл без пакета "сопроводительной документации"  :D
    Что думаешь?
Изменено: Jack Famous - 28.02.2022 09:56:26
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1 2 3 4 5 След.
Наверх