metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-07-11 03:31 pm

Про обфускацию БД

http://belnetmon.livejournal.com/1973180.html?style=mine
Читаю и никак не могу проникнуться священным ужасом.
Потому что у меня в продакшене (уже 12 лет) есть самодельная объектно-ориентированная база с собственным бинарным форматом файлов и запросами на XML. Только вот в этом году с ребе белнетмоном чуть-чуть подобрались к вопросу "переделать все по-человечески".
И я обслуживал сторонний продукт, написанный на Clarion под дос, а потом под винду, в котором был собственный язык программирования (с разными диалектами в разных версиях и разных модулях программы) и собственная иерархическая база поверх кларионовской.
И потом я чуть было не поучаствовал во внедрении продукта этих же производителей, уже на С++ и Oracle, где поверх оракла была сделана графовая БД с собственным языком запросов и собственный документный фреймворк.
И еще у меня есть продукты с всякого рода дебильной защитой от копирования. И продукты с асимметричным криптованием передаваемых файлов и ключами, непонятно как храняющимися. И прочий security theater.
А сейчас софты я пишу на кложури и F#, причем из них генерируется C# и дельфи. И есть ненулевая вероятность, что через 20 лет над этими софтами будут рыдать и проклинать последователи.

Т.е. ИТ само по себе безумие, чему тут удивлятся, что отдельные экземпляры оного бывают чуть чуть более безумные чем в среднем.

[identity profile] maxdz.livejournal.com 2012-07-11 04:04 pm (UTC)(link)
С этим хитро. У меня есть тулзa, которая всасывает в себя структуру нешифрованной БД и рожает скрипт, для генерации шифрованной БД. Кроме того, рожает хидеры/реализацию, с классами/функциями получения шифрованных имён таблиц/полей, которые и вызываются из программы в релизе.

В общем, в релизе нешифрованных имён таблиц/полей у меня нет, вообще. :)

[identity profile] zmila.livejournal.com 2012-07-12 09:13 am (UTC)(link)
и есть тулза, которая по зашифрованному имени таблицы-поля даст его нормальный вид?

т.е. это совсем не отличается от подхода: именовать все таблицы T1 T2 T3 ... и все столбцы внутри каждой c1 c2 c3 ... и хранить при этом файлик соответствий?

[identity profile] maxdz.livejournal.com 2012-07-12 09:25 am (UTC)(link)
Никакого файлика соответствий нет - есть модуль "шифратор-дешифратор", который делает все операции "на лету". Но этот модуль работает только в серверной версии программы (при помощи которой я наполняю нешифрованную серверную версию БД, готовлю апдейты для клиентской шифрованной бд, итп). В релизе клиентской программы этого модуля нет, чтобы кракеру нечего было ломать.

Ещё есть тулза, которая делает "дифф" структуры бд (между серверной нешифрованной и клиентской шифрованной) и выводит скрипт добавления/удаления таблиц/полей, если структура бд меняется. Этит скрипт тоже выкладывается в апдейты и выполняется на клиенте. :)