class A: public public IBaseEvents
{
public:
A()
{
Parent = CreateIBase();
Parent.AttachEvents(this);
}
~A()
{
Parent.DetachEvents();
DeleteIBase(Parent);
}
virtual void Out() { .....}
}
A a;
a.Process(buf,100);
вопрос:
насколько сложно будет использовать эту DLL не имея *.h файла с описанием интерфейса? Возможно ли это? Интересует прежде всего с целью защиты своего кода.
Здравствуйте, napalmxp, Вы писали:
N>вопрос: N>насколько сложно будет использовать эту DLL не имея *.h файла с описанием интерфейса? Возможно ли это? Интересует прежде всего с целью защиты своего кода.
Ну что-то же ты должен рассказать об интерфейсе тем, кто будет использовать твою библиотеку... Ты, конечно, можешь им интерфейс на словах объяснить... А они сами h файл напишут... Но смысл? Проще сразу дать h файл.
Тем более, что так ты ничего не защитишь.
[offtop]
Да, вообще, это какой-то старый предрассудок. Исходный код не представляет такой ценности, как многие думают. В большинстве программ (скорее всего и в твоей, хотя я, конечно, это не утверждаю) нет никаких мега-инновационных супер-секретных алгоритмов, да вообще ничего такого, что имеет смысл скрывать. Просто программа.
[/offtop]
Я примерно таким же образом экспортировал интерфейсы из DLL-ки на mingw в прогу на CBuilder-е.
Работает.
Только надо очень осторожно с соглашениями о вызовах -, параметрами, возвращаемыми значениями.
Разобраться с выравниванием структур.
Давить все исключения на выходе.
И смириться с тем, что отладка несколько затрудняется.
Ну и как правильно сказал remark, усилия потраченные на "защиту своего кода" очень редко окупаются.
Лучше потратить их на более чёткиое составление договора.
Здравствуйте, remark, Вы писали:
R>Здравствуйте, napalmxp, Вы писали:
R>Ну что-то же ты должен рассказать об интерфейсе тем, кто будет использовать твою библиотеку... Ты, конечно, можешь им интерфейс на словах объяснить... А они сами h файл напишут... Но смысл? Проще сразу дать h файл.
R>Тем более, что так ты ничего не защитишь.
R>[offtop] R>Да, вообще, это какой-то старый предрассудок. Исходный код не представляет такой ценности, как многие думают. В большинстве программ (скорее всего и в твоей, хотя я, конечно, это не утверждаю) нет никаких мега-инновационных супер-секретных алгоритмов, да вообще ничего такого, что имеет смысл скрывать. Просто программа. R>[/offtop]
R>
Немного не так.
DLL используется моим софтом, то есть у меня exe файл, который подключает эту библиотеку. Соответственно *.h не доступен не для кого кроме меня. Внутри DLL зашит именно хитрый процессинг — мое ноухау, и желание чтобывзяв эту DLL, им не имея *.h никто не сог с ней работать. Собсвенно вопрос в том, насолько сложного эту DLL забзать если интерфес к ней некому кроме меня не доступен.
Здравствуйте, napalmxp, Вы писали: N>DLL используется моим софтом, то есть у меня exe файл, который подключает эту библиотеку. Соответственно *.h не доступен не для кого кроме меня. Внутри DLL зашит именно хитрый процессинг — мое ноухау, и желание чтобывзяв эту DLL, им не имея *.h никто не сог с ней работать. Собсвенно вопрос в том, насолько сложного эту DLL забзать если интерфес к ней некому кроме меня не доступен.
Отладчик + Ida — страшная сила!
Гораздо сложнее расковыривать это всё будет, если твой код будет не в отдельной dll-ке, а влинкован внутрь exe-шника.
А так есть точки входа, то которых можно плясать.
Весь вопрос, на кого ты ориентируешься, создавая эту систему защиты.
Если прогу можно запустить — можно ее сломать (с) ORC
Нафиг твоя дллка никому не сдалась, но самая надежная защита в данном случае это сокрытие семантики.
Экспортируй из своей DLL 2 функции — Create(ClassID) Destroy(ClassID) а во всех классах интерфейс сделай аля COM, о недостатках такого подхода говорить не буду — это и так ясно
Здравствуйте, napalmxp, Вы писали:
N>DLL используется моим софтом, то есть у меня exe файл, который подключает эту библиотеку. Соответственно *.h не доступен не для кого кроме меня. Внутри DLL зашит именно хитрый процессинг — мое ноухау, и желание чтобывзяв эту DLL, им не имея *.h никто не сог с ней работать. Собсвенно вопрос в том, насолько сложного эту DLL забзать если интерфес к ней некому кроме меня не доступен.
Если у тебя там какое-то ноу-хау и ты не хочешь, что бы его узнали, то даже не думай давать кому-либо своё ноу-хау как в виде софтваре, так и в виде хардваре. Считай от того, как ты это дал кому-либо, до того, как это лежит в интернете, в лучшем случае неделя
Всё вот это "не давать хидер" — это полная фигня для кракера с дебугером.
Подумай, почему уже нет ни одного алгоритма шифрования, основанного на закрытом алгоритме.
Тогда единственный вариант для тебя — реализовать это в виде веб-сервиса, развернуть его на своей территории, приставить к нему охранника. И реализовать работу системы через обращения к этому веб-сервису.