Сложность
От: napalmxp  
Дата: 03.12.06 22:45
Оценка:
Возник такой вопрос.
разрабатывается библиотека для использования в своем продукте в виде DLL использующую класс,протопип таков:

class IBase;
class IBaseEvents
{
public:
    IBase *Parent;
    IBaseEvents() {}
    virtual ~IBaseEvents() {}

    // эта функция нам сигналит
    virtual void Out() = 0;
};

class IBase
{
protected:
    IBaseEvents *m_pEvents;
public:
    IBase();
    virtual void AttachEvents(IBaseEvents*obj);
    virtual void DetachEvents();
    ~IBase();
        //функция выполняющая работу
    void Process(BYTE* pData,DWORD dwSize); 
};



наружу из DLL торчат 2 функции:
IBase* APIENTRY CreateIBase();
void APIENTRY DeleteIBase(IBase* obj);

соответcnвенно использование :


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 файла с описанием интерфейса? Возможно ли это? Интересует прежде всего с целью защиты своего кода.
Re: Сложность
От: remark Россия http://www.1024cores.net/
Дата: 03.12.06 23:13
Оценка: +1
Здравствуйте, napalmxp, Вы писали:

N>вопрос:

N>насколько сложно будет использовать эту DLL не имея *.h файла с описанием интерфейса? Возможно ли это? Интересует прежде всего с целью защиты своего кода.

Ну что-то же ты должен рассказать об интерфейсе тем, кто будет использовать твою библиотеку... Ты, конечно, можешь им интерфейс на словах объяснить... А они сами h файл напишут... Но смысл? Проще сразу дать h файл.

Тем более, что так ты ничего не защитишь.

[offtop]
Да, вообще, это какой-то старый предрассудок. Исходный код не представляет такой ценности, как многие думают. В большинстве программ (скорее всего и в твоей, хотя я, конечно, это не утверждаю) нет никаких мега-инновационных супер-секретных алгоритмов, да вообще ничего такого, что имеет смысл скрывать. Просто программа.
[/offtop]


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Сложность
От: Tonal- Россия www.promsoft.ru
Дата: 04.12.06 05:50
Оценка:
Я примерно таким же образом экспортировал интерфейсы из DLL-ки на mingw в прогу на CBuilder-е.
Работает.
Только надо очень осторожно с соглашениями о вызовах -, параметрами, возвращаемыми значениями.
Разобраться с выравниванием структур.
Давить все исключения на выходе.
И смириться с тем, что отладка несколько затрудняется.

Ну и как правильно сказал remark, усилия потраченные на "защиту своего кода" очень редко окупаются.
Лучше потратить их на более чёткиое составление договора.
Re[2]: Сложность
От: napalmxp  
Дата: 04.12.06 07:54
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, napalmxp, Вы писали:


R>Ну что-то же ты должен рассказать об интерфейсе тем, кто будет использовать твою библиотеку... Ты, конечно, можешь им интерфейс на словах объяснить... А они сами h файл напишут... Но смысл? Проще сразу дать h файл.


R>Тем более, что так ты ничего не защитишь.


R>[offtop]

R>Да, вообще, это какой-то старый предрассудок. Исходный код не представляет такой ценности, как многие думают. В большинстве программ (скорее всего и в твоей, хотя я, конечно, это не утверждаю) нет никаких мега-инновационных супер-секретных алгоритмов, да вообще ничего такого, что имеет смысл скрывать. Просто программа.
R>[/offtop]

R>


Немного не так.
DLL используется моим софтом, то есть у меня exe файл, который подключает эту библиотеку. Соответственно *.h не доступен не для кого кроме меня. Внутри DLL зашит именно хитрый процессинг — мое ноухау, и желание чтобывзяв эту DLL, им не имея *.h никто не сог с ней работать. Собсвенно вопрос в том, насолько сложного эту DLL забзать если интерфес к ней некому кроме меня не доступен.
Re[3]: Сложность
От: Tonal- Россия www.promsoft.ru
Дата: 04.12.06 08:21
Оценка:
Здравствуйте, napalmxp, Вы писали:
N>DLL используется моим софтом, то есть у меня exe файл, который подключает эту библиотеку. Соответственно *.h не доступен не для кого кроме меня. Внутри DLL зашит именно хитрый процессинг — мое ноухау, и желание чтобывзяв эту DLL, им не имея *.h никто не сог с ней работать. Собсвенно вопрос в том, насолько сложного эту DLL забзать если интерфес к ней некому кроме меня не доступен.

Отладчик + Ida — страшная сила!
Гораздо сложнее расковыривать это всё будет, если твой код будет не в отдельной dll-ке, а влинкован внутрь exe-шника.
А так есть точки входа, то которых можно плясать.
Весь вопрос, на кого ты ориентируешься, создавая эту систему защиты.

Но в данном форуме это по моему оффтопик.
Re: Сложность
От: rm822 Россия  
Дата: 04.12.06 10:22
Оценка:
Здравствуйте, napalmxp, Вы писали:

Если прогу можно запустить — можно ее сломать (с) ORC
Нафиг твоя дллка никому не сдалась, но самая надежная защита в данном случае это сокрытие семантики.
Экспортируй из своей DLL 2 функции — Create(ClassID) Destroy(ClassID) а во всех классах интерфейс сделай аля COM, о недостатках такого подхода говорить не буду — это и так ясно
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Сложность
От: remark Россия http://www.1024cores.net/
Дата: 04.12.06 18:11
Оценка: :)
Здравствуйте, napalmxp, Вы писали:

N>DLL используется моим софтом, то есть у меня exe файл, который подключает эту библиотеку. Соответственно *.h не доступен не для кого кроме меня. Внутри DLL зашит именно хитрый процессинг — мое ноухау, и желание чтобывзяв эту DLL, им не имея *.h никто не сог с ней работать. Собсвенно вопрос в том, насолько сложного эту DLL забзать если интерфес к ней некому кроме меня не доступен.


Если у тебя там какое-то ноу-хау и ты не хочешь, что бы его узнали, то даже не думай давать кому-либо своё ноу-хау как в виде софтваре, так и в виде хардваре. Считай от того, как ты это дал кому-либо, до того, как это лежит в интернете, в лучшем случае неделя

Всё вот это "не давать хидер" — это полная фигня для кракера с дебугером.
Подумай, почему уже нет ни одного алгоритма шифрования, основанного на закрытом алгоритме.

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


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.