Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Можно ли разместить в gdb файле приватную инф-цию


Автор: Delphist 24.10.2007, 09:17
Можно ли в gdb файле разместить информацию, которая была бы не видна стандартными средствами, например, IBExpert'ом. Просто необходимо различать db_demo и db-release, чтобы пользователь немог их подменять. Одна идея есть, но она мне не очень нравится - это через хранимую процедуру откомпилить ее и удалить ее исходник. Может, посоветует что получше. У меня Firebird 2.0

Автор: Deniz 24.10.2007, 09:30
Delphist, вопрос про метаданные или сами данные?

Автор: Delphist 24.10.2007, 09:37
Цитата(Deniz @  24.10.2007,  10:30 Найти цитируемый пост)
Delphist, вопрос про метаданные или сами данные? 

Неважно что, главное, чтобы была возможность различать db_demo и db-release, чтобы пользователь немог их подменять, т.е. у клиента ест demo-версия программы c db_demo, а он берет и подсовывает db_release, вот и надо как-то невидимо для пользователя идентифицировать БД, т.е. хранить идентификатор БД-Demo и БД-Release.

Автор: pompei 24.10.2007, 10:32
Я сравню метаданные своей демо с чьей-то рилизом, и как раз получу то, что нужно сделать с моей демой, чтобы она стала рилизом. 

Поэтому попыткайтесь сменить политику безопасности, например, лицензирование.

Огорчу Вас заранее, если хороший кракер захочет кракнуть, то он кракнет, чего бы Вы не сделали со своей программой. Потому что небыло в истории ещё ни одной десктопной программы, которую бы ещё не кракнули!

Автор: Delphist 24.10.2007, 10:37
Цитата(pompei @  24.10.2007,  11:32 Найти цитируемый пост)
Я сравню метаданные своей демо с чьей-то рилизом, и как раз получу то, что нужно сделать с моей демой, чтобы она стала рилизом. 

Ну моя защита с БД расчитана на лохов, понятно что профи это вопрос не сложный.

Автор: Deniz 24.10.2007, 14:52
Delphist, т.е. если я правильно понял, нужно послать какой-то запрос к БД, и определить что это за БД?
В таком случае защиты наверное нет.
Объясни, чем должны отличаться db_demo и db-release, именно по функциям, т.е. какие ограничения или еще чего должны быть в db_demo.

Автор: Sansa 25.10.2007, 10:24
Если он не владеет правами sysdba попробуй в разных версиях создать разных пользователей. Изменить он их не сможет, соответственно, выборкой из таблицы users можно будет узнать что за версия

Автор: Delphist 25.10.2007, 10:33
Цитата(Sansa @  25.10.2007,  11:24 Найти цитируемый пост)
Если он не владеет правами sysdba попробуй в разных версиях создать разных пользователей. Изменить он их не сможет, соответственно, выборкой из таблицы users можно будет узнать что за версия

У меня нет разделение на пользователей, и используется SYSDBA

Автор: Deniz 26.10.2007, 05:24
Delphist, таки расскажи подробнее что хочешь получить.
Что-то подсказывает, что нужно еще в клиенте что-то сделать.

Автор: Sansa 26.10.2007, 11:56
Delphist, так убери sysdba. Сделай пользователя, который владеет ПОЧТИ всем. И через него работай

Автор: Akella 1.11.2007, 10:20
советую такую проверку сделать не в базе а в самой программе, с пом. DEFINE

Автор: Delphist 1.11.2007, 16:13
Цитата(Akella @  1.11.2007,  11:20 Найти цитируемый пост)
советую такую проверку сделать не в базе а в самой программе, с пом. DEFINE 

и каким же образом

Автор: Sansa 1.11.2007, 16:34
Мне это напоминает ситуацию, когда отдаешь пароль для root, а потом пытаешься что то ограничить...

Автор: Akella 5.11.2007, 17:00
Цитата(Delphist @  1.11.2007,  16:13 Найти цитируемый пост)
и каким же образом

создаём текстовый файл, например с именем _define.inc
в нём:
Цитата

{$DEFINE local_ver}
{$DEFINE demo}
const firma = '(программа не зарегистрирована)';
const firma_address = '---------------------';


далее в программе 
Код

//чистый модуль//
unit uShares;

interface

uses Classes.....
Var
..... переменные модуля

.....
 function  Demo():string;
 function  DemoB():Boolean;
 function  localStr():string;
 function  F_address():string;
 function  F_Name():string;
... другие процедуры


implementation

uses uDM, .....;

{$I _define.inc} //это демоверсия
//{$I _kiev_irina.inc}
//{$I _stolica.inc}
//{$I _npk_moscow.inc}



....
function  Demo():string;
begin
 {$IFDEF demo} result := ' ~ Демонстрационная версия' {$ELSE} result := firma {$ENDIF};
end;

function  DemoB():Boolean;
begin
 {$IFDEF demo} result := True {$ELSE} result := false {$ENDIF};
end;


function  localStr():string;
begin
 {$IFDEF local_ver} result := 'локальная версия' {$ELSE} result := '' {$ENDIF};
end;


function  F_Name():string;
begin
 {$IFDEF demo} result := 'Демоверсия программы' {$ELSE} result := firma {$ENDIF};
end;

function  F_Address():string;
begin
 {$IFDEF demo} result := '--------' {$ELSE} result := firma_address {$ENDIF}
end;


При создании, скажем, главной формы:
Код

procedure TfmMain.FormShow(Sender: TObject);
....
  Caption := Caption + IsDemo();
  StatusBar1.Panels[1].Text := Demo();
ShowMessage('Зарегистрировано на '+F_Name())


вот ещё пример файла описаний:
точка - это типа закомментировано
Цитата

{.$DEFINE local_ver}
{.$DEFINE demo}
const firma = 'Название фирмы';
const firma_address = 'г. Бабруйск, ул.Бабруйска, д.14, оф.2 5эт.';


Добавлено @ 17:10

Если в этом месте меняешь подключаемый файл

implementation
uses uDM, .....;
//{$I _define.inc} //было так
{$I _kiev_irina.inc} //теперь так
//{$I _stolica.inc}
//{$I _npk_moscow.inc}

то обязательно нужно перекомпилировать проект (Build)

Автор: Akella 5.11.2007, 17:15
теперь в любом модуле, используя функцию function  IsDemoBool():Boolean;

можно:

Код

if DemoB then
  aSQL  := 'select first 10 * from table' //в демоверсии выбирае только первые 10 записей, и пофиг, что крякеры ключ нашли к программе  :crazy 
else
  aSQL  := 'select * from table'

Автор: Akella 5.11.2007, 17:55
В вьюхах это тоже можно сделать, хоть минимальный, но ограничения, не каждый взломщик, знающий ASM, знает ещё и FB SQL  smile 
Код

select first 10 * from table


Добавлено через 1 минуту и 43 секунды
вообще-то надо было тебе задать вопрос в технологиях защиты тоже

Автор: VOS 14.11.2007, 17:09
Если я правильно понял условие:

1) Есть *.gdb (release) и *.gdb(demo), а exe модуль один и тот же.
2) Этот модуль должен по-разному работать в зависимости от БД.
3) У юзера есть и тот и другой *.gdb (release он у друга скопировал).

При таких раскладах он всегда может просто заменить один  *.gdb на другой. И зачем ему копаться во всяких metadata и т.д.?

Автор: tishaishii 16.11.2007, 16:56
А почему не нравится вариант с компиляцией UDF?
Я написал UDF, запхал туда побольше хранимых процедуры для ускорения работы.
При первой загрузке UDF определяет параметры компа и ставлю переменную типа BOOLEAN в соответствующее состояние. Если они не сходятся с параметрами целевого компа, выполняю halt и FB вылетает. Теперь, при попытке использования какой-нибудь UDF проверяется состояние галочки, если FALSE - сразу halt.

Параметры целевого компа удобно хранить в результате необратимой функции типа SHA1.
Потом ещё перед поставкой программы, я dll-ку с UDF-ами пакую upx-ом. Таким образом усложняю работу "не-лохов" как могу. Можно перед всем ещё каким-нибудь оптимизатором пройтись.

Автор: Akella 16.11.2007, 18:14
Цитата(tishaishii @  16.11.2007,  16:56 Найти цитируемый пост)
выполняю halt и FB вылетает.

а если у пользователя под FB запущена другая программа...........

Автор: tishaishii 16.11.2007, 18:23
Всё равно halt даёт вылет. Ну в любом случае, если не нравится halt, можно выдавать NULL вместо информации или анекдоты какие-нибудь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)