Sdscompany.ru

Компьютерный журнал
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как защитить код vba

Защита программного кода на VBA

Защитить программный проект VBA можно с помощью пароля:

  1. Откройте окно редактора Visual Basic, например с помощью комбинации клавиш + .
  2. Выберите команду Сервис, Свойства (Tools,

Properties). Появится диалоговое окно свойств программного проекта.

  • Откройте вкладку Защита (Protection) и введите пароль в поле Пароль (Password) и Подтверждение пароля (Confirm password). Этот пароль будет требоваться при попытке отобразить диалоговое окно свойств проекта.
  • Если необходимо защитить проект от просмотра, установите флажок Запретить просмотр программного кода (Lock project for viewing). Это значит, что введенный пароль будет также использован для защиты программного проекта от просмотра.
  • Нажмите кнопку ОК.
  • Установленные параметры начнут действовать только при следующем открытии базы данных.

    Есть другой способ защиты программного кода приложения Access — можно создать файл, содержащий откомпилированную версию программного проекта и всех объектов базы данных (файл с расширением mde) или проекта Access (файл с расширением ade). Открыв этот файл, пользователи могут использовать все созданные в нем объекты, изменять данные и выполнять макросы и процедуры VBA, но не будут иметь возможности изменить структуру объектов или программный код. Такой файл имеет намного меньший размер по сравнению с исходным файлом базы данных или проекта. Права доступа и прочие обстоятельства, необходимые пользователю для возможности создания файла mde или ade, приведены в справочной системе Access 2002.

    Создать файл МОЕ или ADE можно только на основе базы данных или проекта Access в формате Access 2002. Если ваша база данных (или проект) сохранена в формате Access 2000, потребуется сначала преобразовать ее в формат Access 2002 (см. гл. 19).

    Чтобы создать файл МDЕ на основе базы данных в формате Access 2002:

    1. Откройте Access 2002, но не открывайте базу данных или проект Access.
    2. Выберите команду Сервис, Служебные программы, Создать MDE-файл (Tools, Database Utilities, Make MDE File).
    3. Появится диалоговое окно База данных для сохранения как MDE (Database to Save as MDE). В раскрывающемся списке Тип файлов (Files of type) выберите элемент Базы данных Microsoft Access (Microsoft Access Databases). Затем укажите папку и имя файла исходной базы данных (файла с расширением mdb) и нажмите кнопку Создать MDE (Make MDE).
    4. Появится диалоговое окно Сохранение файла MDE под именем (Save MDE As). Укажите папку и введите имя целевого файла в формате MDE. ;
    5. Нажмите кнопку Сохранить (Save).

    Чтобы создать файл ADE на основе проекта в формате Access 2002:

    1. Откройте Access 2002, но не открывайте базу данных или проект Access.
    2. Выберите команду Сервис, Служебные программы, Создать MDE-файл (Tools, Database Utilities, Make MDE File).
    3. Появится диалоговое окно База данных для сохранения как MDE (Database to Save as MDE). В раскрывающемся списке Тип файлов (Files of type) выберите элемент Проекты Access (Microsoft Access Projects). Затем укажите папку и имя файла исходного проекта Access 2002 (файла с расширением adp) и нажмите кнопку Создать MDE (Make MDE).
    4. Появится диалоговое окно Сохранение файла ADE под именем (Save ADE As). Укажите папку и введите имя целевого файла в формате ADE.
    5. Нажмите кнопку Сохранить (Save).

    Как защитить проект VBA паролем

    Для тех кто уже освоился более-менее в программировании на Visual Basic for Application рано или поздно непременно встает вопрос: как защитить свой код от изменений или даже от просмотра? Как правило это делается в файлах, которые в дальнейшем «гуляют по рукам». Т.е. автор создал и потом файл отсылается или другим пользователям, или клиентам, поставщикам и т.п. Чтобы у тех, кто будет в дальнейшем работать с этим файлом, не было возможности подсмотреть проект и тем более что-то в нем изменить. В каких-то случаях цель такой защиты это защита «от дурака»: чтобы по незнанию не изменили так, что файл просто откажется работать. Так же есть и другая причина — код является «коммерческим» и в нем присутствует некая защита от использования функционала по истечению ДЕМО-периода и надо закрыть код, чтобы эту защиту не «сломали».
    По сути защитить проект VBA стандартными средствами совсем не сложно. Переходим в проект VBA (Alt+F11), далее:

    1. ToolsVBAProject Properties -вкладка Protection;
    2. устанавливаем галочку «Lock project for viewing«. Если галочка не установлена, то весь код можно будет просматривать и изменять, но изменить или просмотреть свойства самого проекта будет уже невозможно без снятия пароля;
    3. вписываем пароль в полях Password и Confirm password.

    Чтобы снять пароль с проекта VBA необходимо перейти в проект VBA (Alt+F11) и:

    1. ToolsVBAProject Properties -вкладка Protection;
    2. снимаем галочку «Lock project for viewing«;
    3. удаляем пароль в полях Password и Confirm password

    Хочу так же отметить, что пароль от проекта VBA ломается на ура(программ для этого достаточно в сети, перечислять не буду — кому надо сможет найти, а кто не сможет — значит не так уж и надо). Корпорацией Microsoft данный пароль точно не разрабатывался для защиты проекта от несанкционированного взлома и скорее был направлен больше на защиту от дурака. А может дело в том, что сам VBE практически не дорабатывался чуть ли не с самого его создания.
    В любом случае, для тех, кто хочет чуть надежнее защитить свой проект VBA лучше использовать для этого сторонние утилиты. Например, очень хорошая программа для рядовых пользователей Protect VBA от eliansoft (http://www.eliansoft.com). Данная программа делает недоступным проект VBA. Никаких паролей вводить не надо — проект просто недоступен даже для ввода пароля. Последняя бесплатная версия была 1.6. Сейчас в сети её уже практически не найти в бесплатном варианте, т.к. разработчики убрали её с офф.сайта и постарались убрать отовсюду, видимо. Но т.к. у меня эта программа есть — выкладываю здесь, но скачать можно только после регистрации на сайте (чтобы тот же eliansoft не смог добраться).
    Скачать Protect VBA

    Protect_VBA.zip (287,1 KiB, 361 скачиваний)
    У Вас нет прав для скачивания этого файла. Возможно, Вы не зарегистрированы на сайте. Зарегистрируйтесь и попробуйте скачать снова.

    • создаете файл с кодом, сохраняете, закрываете
    • запускаете Protect VBA
    • выбираете файл, проект VBA которого надо защитить
    • нажимаете Protect
    • будет предложено выбрать папку для сохранения защищенного файла. Здесь лучше заранее создать папку для сохранения файла, т.к. программа делает копию оригинального файла и не даст сохранить непосредственно тот же файл. Что к лучшему — ведь должен же у нас остаться файл с открытыми кодами 🙂

    Статья помогла? Поделись ссылкой с друзьями!

    Лучший способ защитить код Excel VBA?

    Я собрал простую базу данных Excel, которая выполняет несколько макрофункций, и мне нужно распределить эту базу данных нескольким людям — но они не могут видеть, как на самом деле работает макрофункция (глупые правила, которым я должен следовать!). Каков наилучший способ достичь этого?

    Я провел небольшое исследование и нашел два способа:

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

    Перейти на полностью скомпилированный язык, такой как C++ ; мои навыки очень ограничены до VBA на Excel и Access, так что это идеальное решение; не является решением для меня 🙁

    Есть ли другие способы? Я подумал о том, чтобы иметь «главный документ excel» со всеми macros в нем, а затем отправить базы данных ‘children’ конечным пользователям и подключить базы данных ‘children’ к ‘master’ — возможно ли что-то подобное? Размещая мастер в интернете или даже отправляя конечным пользователям мастер, но делая его полностью недоступным, если к нему не обращаются базы данных ‘children’?

    2 Ответа

    Вы можете создать надстройку автоматизации.

    Надстройка автоматизации обеспечивает несколько преимуществ

    Скорость выполнения : автоматическое дополнение, написанное в VB6, компилируется в собственный машинный код, который работает намного быстрее, чем интерпретируемый VBA язык.

    Безопасность : в отличие от надстройки XLA, вы никогда не распространяете исходный код среди конечных пользователей. Если ваш код содержит конфиденциальную информацию или ценность интеллектуальной собственности, которая остается надежно защищенной на вашем собственный компьютер. Он никогда не распространяется среди пользователей. Ваш код может никогда не подвергайся риску.

    Существует не так уж много способов надежно защитить ваш код Excel VBA.

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

    Другой ответ на этот вопрос упоминает использование VB6, но это ограничивает ваш код 32-битным Excel. Также VB6 может быть декомпилирован декомпилятором VB.

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

    Преобразование кода в VBA.NET является ошибочным решением, поскольку скомпилированный код .NET assembly может быть преобразован обратно в исходный код.

    Преобразование кода VBA в код C или C++ является наиболее эффективной формой защиты, но это требует большого опыта и усилий, поскольку C/C++ и VBA-очень разные языки.

    Я бы предложил вам взглянуть на инструмент под названием VBA Compiler for Excel ( https://vbacompiler.com/how-to-compile/). Он компилирует ваш код Excel VBA в файл DLL одним щелчком мыши. Вам не нужно никаких знаний языков C или C++, чтобы использовать его.

    Похожие вопросы:

    У меня есть таблица Excel (.xlsb), который подключается к серверу SQL через объекты данных ActiveX (ADO) в VBA, которые я должен поделиться с кучей людей. Код использует следующую строку для.

    У меня есть надстройка Excel, разработанная в VBA, развернутая в сети. Надстройка считывает данные из базы данных Oracle и вставляет таблицы в новый лист, который также будет содержать кнопку.

    Моя цель-добавить macros в Книгу excel без необходимости включать Trust Access to the VBA Project Object Module в центре доверия Excel. (Включение доступа кажется угрозой безопасности). Нашел.

    С помощью такого триггера, как флажок, я хочу защитить свою трудовую книжку. Я попробовал Excel 2003: thisworkbook.protect(password,true,true) thisworkbook.unprotect(password) Это не работает. Есть.

    Я пытаюсь выяснить, как распространять файл excel в Сети Таким образом, чтобы большинство пользователей могли его использовать. Я знаю о программе Microsoft Excel Viewer (которая может открывать.

    У меня есть лист excel, детализирующий список оборудования (около 12000 строк в листе). Я хочу сделать приборную панель, в которой я ввожу название оборудования, и оно возвращает производителя, дату.

    В веб-приложении мы определяем роли, проверку подлинности форм и т. д. для безопасности, но каков должен быть лучший способ защитить Winform ? На самом деле я делаю настольное приложение, в котором.

    У меня есть около 25 листов в моей рабочей книге (таблица Excel). Есть ли способ защитить все 25 листов в один клик ? или эта функция недоступна, и мне придется написать код VBA, чтобы выполнить.

    Я не могу найти никакой информации, если можно разрешить пользователям видеть код макрокоманды, но в то же время сделать их неспособными изменить код VBA. Мне нужно заблокировать его только для.

    Я написал код в VBA на конкретном листе excel (как макрос). Код работает отлично, и теперь я хочу отправить его как скрипт другим людям, как я могу это сделать? без отправки excel я написал макрос.

    How password protection of Excel VBA code works?

    This question is related to my previous one.

    Can you explain or provide a link to an explanation of how Excel VBA code password protection actually works in versions prior to 2007? What is the difference in Excel 2007 and previous versions in terms of password protection?

    Also does Excel’s password protection actually encrypt the code? How does Excel execute the code if it is encrypted?

    Lastly, how does password removal software for excel work?

    Создан 03 ноя. 08 2008-11-03 20:46:15 axk

    3 ответа

    VBA security is widely considered to be pretty poor. The VBA code isn’t compiled, and the source is available in the excel file. The password protection is pretty easy to circumvent.

    As I understand it, Office 2003 and earlier saves the vba code as part of the binary format of the worksheet (or document / presentation). When you fire up the VBA IDE, it simply looks to see whether the VBA code has been «protected» or not. This doesn’t mean it’s encrypted — just unavailable for viewing. The theory is that this stops your users from meddling with your code, but a hard-core coder would be able to get around the password.

    So Excel doesn’t need to unencrypt any code — it just needs to stop people from viewing it.

    Office 2007 does encrypt macros (don’t ask me how or what algorithm). This is necessary presumably because XLSM files (or any Office 2007 file) are just zip files with a different extension. Anyone can get into those files and poke around.

    To answer your last question — how does the password removal work on older Office formats, I’m not entirely sure. Different vendors will possibly approach the problem different ways, but I suspect the most common approach will be a brute-force attack on the passwords until a match is found.

    The Excel VBProject object has a Protection property which will return different enumerations depending on the protection status of the macro ( vbext_pp_locked if the macro is protected, for example). If you were to keep trying passwords programmatically until the vbext_pp_locked evaluated to false, you would have found your password.

    I wonder if there is an option in 2007 to store only the byte code for macros within a workbook, allowing you to deliver functions without the source? – DaveParillo 20 янв. 10 2010-01-20 16:59:29

    That functionality isn’t (AFAIK) baked into any version of Office. Rather, the expectation is that if you specifically want automation for an Office file bundled, you’ll use the Visual Studio Tools for Office (VSTO) to write your own DLL and store that as an add-in. – Phil.Wheeler 20 янв. 10 2010-01-20 20:03:42

    FYI — I created an xlsm (using the converter available for 2003). Changed the xlsm extension to xip, unzipped and looked inside. All the VBA was inside a single file ‘vbaProject.bin’. In a hex editor it appeared to be build from exactly the same BIFF blocks that other excel files are made from. All strings in the macros were plainly visible. So it doesn’t look as if the encryption has changed too much. – DaveParillo 04 фев. 10 2010-02-04 18:22:56

    @DaveParillo — Huh. Thanks for that. I was led to believe that the code was encrypted. Should probably have checked for myself. – Phil.Wheeler 04 фев. 10 2010-02-04 20:14:10

    Phil is correct — the password prevent you from looking at the modules, they are not encrypted themselves. I know in excel 2007 a file is essentially a zipped collection of XML and other files, but I don’t know the details of how encryption is handled. For earlier versions — excel 2, 3, 4, 5, 95, 97, 2000, XP, & 2003, there is the comprehensive OpenOffice.org’s Documentation of the Microsoft Excel File Format:

    The Excel file format is named BIFF (Binary Interchange File Format). It is used to store all types of documents: worksheet documents, workbook documents, and workspace documents. There are different versions of this file format, depending on the version of Excel that has written the file, and depending on the document type.

    A workbook document with several sheets (BIFF5-BIFF8) is usually stored using the compound document file format (also known as “OLE2 storage file format” or “Microsoft Office compatible storage file format”). It contains several streams for different types of data. A complete documentation of the format of compound document files can be found here.

    The Workbook Protection Block occurs just after the DEFINEDNAME block (i.e. Named Ranges) in most BIFF streams, although BIFF8 is a major departure from that pattern. The record protection block In Biff5 — Biff8 the structure of the Workbook Protection Block:

    • WINDOWPROTECT Window settings: 1 = protected
    • PROTECT Workbook contents: 1 = protected
    • PASSWORD Hash value of the password; 0 = no password
    • PROT4REV Shared workbook: 1 = protected
    • PROT4REVPASS Hash value of the shared password; 0 = no password

    The password block stores a 16-bit hash value, calculated from the worksheet or workbook protection password.

    Someone made a working vba code that changes the vba protection password to «macro», for all excel files, including .xlsm (2007+ versions). You can see how it works by browsing his code.

    Pasted from a previous post from his blog:

    For Excel 2007/2010 (.xlsm) files do following steps:

    1. Create a new .xlsm file.
    2. In the VBA part, set a simple password (for instance ‘macro’).
    3. Save the file and exit.
    4. Change file extention to ‘.zip’, open it by any archiver program.
    5. Find the file: ‘vbaProject.bin’ (in ‘xl’ folder).
    6. Extract it from archive.
    7. Open the file you just extracted with a hex editor.

    Find and copy the value from parameter DPB (value in quotation mark), example: DPB=»282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A». (This value generated for ‘macro’ password. You can use this DPB value to skip steps 1-8)

    Do steps 4-7 for file with unknown password (file you want to unlock).

    Change DBP value in this file on value that you have copied in step 8.

    If copied value is shorter than in encrypted file you should populate missing characters with 0 (zero). If value is longer — that is not a problem (paste it as is).

    Save the ‘vbaProject.bin’ file and exit from hex editor.

  • Replace existing ‘vbaProject.bin’ file with modified one.
  • Change extention from ‘.zip’ back to ‘.xlsm’
  • Now, open the excel file you need to see the VBA code in. The password for the VBA code will simply be macro (as in the example I’m showing here).
  • Создан 28 мар. 14 2014-03-28 21:44:11 Morosho

    Лучший способ защитить код VBA Excel?

    Я собрал простую базу данных Excel, которая выполняет несколько макрофункций, и мне нужно распределить эту базу данных нескольким людям, но они не могут видеть, как на самом деле работает макрофункция (глупые правила, которым я должен следовать!). Как лучше всего этого добиться?

    Я провел небольшое исследование и нашел два способа:

    Защита паролем проекта VBA; но это, по-видимому, очень легко сломать с помощью легко доступных инструментов в интернете (это было бы в интересах людей, которых я отправляю, чтобы узнать, как работают макросы и функции; поэтому я почти на 100% уверен, что они будут пытаться попасть в него.. поэтому защита паролем кажется неадекватной.

    Перейти к полностью скомпилированному языку, как c++ ; мои навыки очень ограничены VBA на Excel и доступа, так что это идеальное решение; не является решением для меня

    Есть ли другие способы? Я подумал о том, чтобы иметь «главный документ excel» со всеми макросами в этом, а затем отправить «дочерние» базы данных конечным пользователям и подключить «дочерние» базы данных к «главному» — возможно ли что-то подобное? Размещая мастер онлайн или даже отправляя конечным пользователям мастер, но делая его полностью недоступным, если не доступны «дочерние» базы данных?

    2 ответа

    Вы можете создать Automation Add In.

    Автоматизация добавляет в обеспечивает несколько преимуществ

    Скорость выполнения: автоматизация добавить в письменной форме в VB6 компилируется в
    машинный код, который работает намного быстрее, чем интерпретируемый VBA
    languange.

    Безопасность: в отличие от добавления XLA, вы никогда не распространяете исходный код конечным пользователям. Если в коде есть собственные сведения или
    значение интеллектуальной собственности, которое остает безопасно защищенным на вашем
    собственный компьютер. Он никогда не распространяется пользователю. Ваш код может
    никогда не подвергайтесь риску.

    Существует не так много способов надежной защиты кода VBA Excel.

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

    Другой ответ на этот вопрос упоминает использование VB6, но это ограничивает ваш код 32-битным Excel. Также VB6 может быть декомпилировано VB decompiler.

    Преобразование кода в скомпилированный язык действительно является лучшим способом защиты кода VBA, но имейте в виду, что в этом случае не весь код создается равным.

    Преобразование кода в VBA.NET это ошибочное решение, поскольку скомпилированный код .NET assembly может быть преобразован обратно в исходный исходный код.

    Преобразование кода VBA в C или C++ является наиболее эффективной формой защиты, но это требует большого опыта и усилий, так как C/C++ и VBA очень разные языки.

    Читать еще:  Порты для vpn
    Ссылка на основную публикацию
    Adblock
    detector