Прозоре шифрування баз даних access

Відомо, що на сьогоднішній день не існує способу захистити значення, збережені в таблицях БД Access від прямого доступу. Або захист видаляється за допомогою програм типу dbRecowery, або вона накладає серйозні обмеження на продуктивність додатків працюють з БД і все одно зламуються, але з великими затратами.

Ось гідності пропонованого способу:

  • захист встановлюється і знімається натисненням однієї кнопки
  • додавання захисту в код - додавання одного рядка при підключенні БД і змінити рядок з паролем в коді. (більше ні чого міняти не треба)
  • її не можна зняти програмами типу dbRecowery
  • її використання майже не позначається на продуктивності
  • можна використовувати ADO або DAO
  • захищає код можна інтегрувати в VB проект (2 класу і 2 модуля)
  • не треба платити за програми та електронні ключі

Ось його недоліки:

  • реалізовано у вигляді Active-X dll на Visual Basic 6 (не вдалося зробити на VBA)
  • працює тільки на читання даних (запис не реалізована)
  • працює під WinXP; має працювати під 2k; під 98 - не працює (треба доробляти)

Про тестовому проекті

  • data.mdb - захищена БД з двома таблицями і одним запитом
  • user.mdb - БД з формою 'main' в яку виводяться дані з data.mdb за допомогою Protect.dll
  • Protect.dll - шукає data.mdb в тій же директорії, де і сама і повертає ADODB.Recordset для реєстрації необхідно виконати в командному рядку 'regsvr32.exe [Ваш шлях до] \ Protect.dll'

Опис способу захисту

Даний спосіб заснований на використанні прозорого шифрування. При такому підході працює з даними програма не помічає, що дані зашифровані. Іншими словами, коли бібліотеки ADODB нашої програми звертаються до файлу БД - вони бачать самий звичайний файл. Але якщо з цими даними починає працювати чужа програма - вона бачить зашифровані дані. Подібний підхід використовується в HASP Envelope. Але з його допомогою шифрується весь файл, що сильно знижує продуктивність. Тим часом, досить зашифрувати тільки заголовок БД щоб отримати прийнятний рівень захисту.

Для роботи з БД Access в даний час використовується ADODB. Спочатку створюється підключення до файлу БД (ADODB.Connection). Коли задані всі параметри підключення - викликається метод Open, який відкриває БД. При цьому, відбувається читання перших H10000 байт файлу БД. Тут і спрацьовує захист. ми ці H10000 байт попередньо зашіфруем. Програма перехоплює виклик API функції ReadFile, сама зчитує заголовок БД, і повертає дешифровані дані.

Щоб перехопити виклик API функції ReadFile необхідно зробити наступне:

Заміщає функція має той же набір аргументів, що і оригінальна ReadFile. Таким чином, отримавши управління в свої руки, ми знаємо - звідки і скільки треба вважати і куди результат помістити. При виклику замещающеё функції відбувається наступне:

розвиток проекту

Схожі статті