Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
Поиск по сайту


 

   Базы данных -> Access -> Прозрачное шифрование баз данных Access


Прозрачное шифрование баз данных Access

Эта статья посвящена новому способу защиты БД 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 необходимо сделать следующее:

  • получить идентификатор процесса с помощью функции GetCurrentProcessId
  • получить описатель процесса, используя OpenProcess
  • получить адрес замещающей функции, используя AddressOf
  • получить описатель модуля kernel32 с помощью GetModuleHandle
  • получить адрес функции ReadFile с помощью GetProcAddress
  • прочитать и сохранить первые оригинальные 6 байт стандартной API функции ReadFile с помощью ReadProcessMemory
  • записать с помощью WriteProcessMemory вместо этих 6 байт код ASM инструкции push и ret, указав в качестве аргумента инструкции push адрес замещающей функции

Таким образом, сначала мы меняем код API функции ReadFile на вызов нашей замещающей функции. Поле вызова метода Open объекта Connection - одна из библиотек ADODB начинает читать файл БД, используя ReadFile. Так как эта функция была нами модифицирована - она обращается к замещающей функции.

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

  • возвращаем оригинальные 6 байт стандартной API функции ReadFile на место с помощью WriteProcessMemory
  • вызываем ReadFile с теми же аргументами, с какими её вызывала библиотека ADODB
  • так как нам известен размер считанных данных и адрес, куда они были прочитаны - мы дешифруем эти данные
  • всё. библиотека ADODB получает управление обратно, даже не заметив наших действий. С её точки зрения - она просто вызвала функцию ReadFile, которая считала блок данных из файла. Повторное чтение файла функцией ReadFile будет происходить как обычно, так как мы вернули её в исходное состояние

Развитие проекта

  • Этот материал ранее был опубликован на sql.ru в форуме по Access
  • Предлагаю поучаствовать в дальнейшем совершенствовании этой технологии. На мой взгляд, она достаточно эффективна в плане защиты, проста в использовании и пригодна для добавления в существующие проекты
  • Может, кому удастся перевести код на VBA. Основная проблема в использовании AddressOf. В таком случае можно будет интегрировать код в mde файл, и избежать той глупой ошибки, которую я допустил, возвращая Recordset из Active-X dll
  • Также можно реализовать не только чтение, но и запись заголовка и сделать возможной работу под win98

Источник: www.infocity.kiev.ua

Ссылки по теме
Защита и взлом баз данных Access
Схемы блокировок в Базах Данных
Защита баз mdb
Access 2000
Настройка программ Access 2000
 

Компьютерная документация от А до Я - Главная

 

по ссылке
 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100