Современные решения

для защиты Windows приложений

и восстановления исходного кода

Visual Basic 6.0 - O ActiveX DLL


Re: O ActiveX DLL

From: "Sergey Merzlikin" <sm [@] smsoft.ru>


>

> > Разумеется, повторную загрузку библиотеки так не предотвратить, но,

> > наверное, автору вопроса нужно не это, а чтобы повторно загруженная

> > библиотека не выполняла полезную функцию, а это можно легко

организовать.
>

> Ага, Sergey, а как конкретно это сделать?

> Вообще, я тут подумал, меня вполне устроит запрет за любое(!)

> использование DLL в лок. сети. А в пределах одного компа -- без

ограничений.
> Пускай подсоединение по сети произойдет, но DLL должна это отловить и

выдать
> MsgBox с сообщением.

> Как это сделать?

>


В таком случае при установке Dll на компьютер программой установки можно его
имя в зашифрованном виде записать в реестр, а потом из библиотеки сравнивать
с полученным по GetComputerName.
Если допустить возможность копирования Dll на другой компьютер без
применения программы установки, тогда можно просто анализировать App.Path:
если он начинается с "\\" или буквы сетевого диска (последнее можно
проверить по GetDriveType), значит, клиент - чужой.
Теперь о том, как сделать так, чтобы с другого компьютера нельзя было
использовать библиотеку. Предположим, она устроена так: в ней есть только
один MultiUse объект, назовем его Application, который создает другие
объекты (Public NotCreatable), и раздает на них ссылки клиентам. В
Class_Initialize объекта Application можно произвести проверку и, в
зависимости от результатов, либо создать вторичные объекты, либо выдать
ошибку (Err.Raise). Если клиент проигнорирует ошибку, он просто получит
Nothing при обращении к свойствам объекта Application, возвращающим ссылки
на другие объекты. Если объектная модель устроена иначе, можно встроить
проверку во все жизненно важные свойства и методы всех MultiUse-объектов, а
после отрицательного результата проверки - Err.Raise + Exit
Property/Function/Sub.


--
Сергей Мерзликин
http://www.smsoft.ru/ru/
* Origin: Talk.Mail.Ru (2:5020/400)

Re: O ActiveX DLL

Hello, Sergey!
You wrote to <Sergei Ho>to Sergei Ho on 14 Aug 04 17:29:35:


SM> В таком случае при установке Dll на компьютер программой установки

SM> можно его имя в зашифрованном виде записать в реестр, а потом из

SM> библиотеки сравнивать с полученным по GetComputerName.

Разве GetComputerName и RegQueryValueEx будут выполняться не на одной и той
же машине? По-моему, так вообще не получится.

SM> Если допустить возможность копирования Dll на другой компьютер без

SM> применения программы установки, тогда можно просто анализировать

App.Path:
SM> если он начинается с "\\" или буквы сетевого диска (последнее можно

SM> проверить по GetDriveType), значит, клиент - чужой.

Тоже плохо. Человек может юзать прогу с собственного расшаренного диска.
* Origin: ...With Thing One and Thing Two? (2:5080/1003.16)

Re: O ActiveX DLL

From: "Sergey Merzlikin" <sm [@] smsoft.ru>


> SM> В таком случае при установке Dll на компьютер программой

установки
> SM> можно его имя в зашифрованном виде записать в реестр, а потом из

> SM> библиотеки сравнивать с полученным по GetComputerName.

> Разве GetComputerName и RegQueryValueEx будут выполняться не на одной и

той
> же машине? По-моему, так вообще не получится.


Hа одной и той же. А в чем проблема? Где Dll устанавливали инсталлятором,
все OK, на других компьютерах в реестре такой записи нет, и имя компьютера
будет сравниваться с пустым местом, что даст отрицательный результат. А если
кто-то умный перенесет запись реестра на свой компьютер, то результат будет
тоже отрицательным, поскольку имя не совпадет.

>

> SM> Если допустить возможность копирования Dll на другой компьютер без

> SM> применения программы установки, тогда можно просто анализировать

> App.Path:

> SM> если он начинается с "\\" или буквы сетевого диска (последнее можно

> SM> проверить по GetDriveType), значит, клиент - чужой.

> Тоже плохо. Человек может юзать прогу с собственного расшаренного диска.


А зачем ему это разрешать? В конце концов и этот случай можно детектировать,
и сделать исключение, но, по-моему, это лишнее.
--
* Origin: Talk.Mail.Ru (2:5020/400)

Re: O ActiveX DLL

From: "Sergei Ho" <calendarman [@] mtu-net.ru>


"Sergey Merzlikin" <sm [@] smsoft.ru> wrote in message news:cfm91c$kig$1 [@] host.talk.ru...


>> SM> Если допустить возможность копирования Dll на другой компьютер без

>> SM> применения программы установки, тогда можно просто анализировать

>> App.Path:

>> SM> если он начинается с "\\" или буквы сетевого диска (последнее можно

>> SM> проверить по GetDriveType), значит, клиент - чужой.

>> Тоже плохо. Человек может юзать прогу с собственного расшаренного диска.

>

> А зачем ему это разрешать? В конце концов и этот случай можно детектировать,

> и сделать исключение, но, по-моему, это лишнее.


Что-то я не понял. Т.е. GetDriveType возвращает DRIVE_REMOTE (= 4)
не только для чужих компов, но и для собственного расшаренного харда?
Как же тогда точно определить, что клиент цепляет DLL с физически ДРУГОГО компа?

Сергей.


* Origin: Demos online service (2:5020/400)

Re: O ActiveX DLL

Hello, Sergey!
You wrote to "A Skrobov" <A Skrobov [@] p16.f1003.n5080.z2.fidonet.org>to A

Skrobov on 15 Aug 04 03:01:39:

SM>>> В таком случае при установке Dll на компьютер программой

SM>>> установки можно его имя в зашифрованном виде записать в реестр, а

потом из
SM>>> библиотеки сравнивать с полученным по GetComputerName.

??>> Разве GetComputerName и RegQueryValueEx будут выполняться не на одной

??>> и той же машине? По-моему, так вообще не получится.

SM> Hа одной и той же. А в чем проблема? Где Dll устанавливали

SM> инсталлятором, все OK, на других компьютерах в реестре такой записи

SM> нет, и имя компьютера будет сравниваться с пустым местом, что даст

SM> отрицательный результат. А если кто-то умный перенесет запись реестра

SM> на свой компьютер, то результат будет тоже отрицательным, поскольку имя

SM> не совпадет.

А как предполагается предотсвратить установку на более чем один комп?
Паролем? ;-)
Имхо в принципе путь неправильный - Сергею нужно защитьу от многократного
использования, а ты предлагаешь по сути защиту от HСК.
Hе говоря уже о том, что имя компьютера может и поменяться.
* Origin: "You get out of this house!" said the fish in the pot. (2:5080/1003.16)

Re: O ActiveX DLL

From: "Sergei Ho" <calendarman [@] mtu-net.ru>


"A Skrobov" <A.Skrobov [@] p16.f1003.n5080.z2.fidonet.org> wrote in message news:2256856356 [@] p16.f1003.n5080.z2.ftn...


> Имхо в принципе путь неправильный - Сергею нужно защитьу от многократного

> использования, а ты предлагаешь по сути защиту от HСК.

> Hе говоря уже о том, что имя компьютера может и поменяться.


Hет мне нужно именно блокировать использование DLL с другого компа.
Я не понял, если GetDriveType возвращает DRIVE_REMOTE (= 4),
то можно быть уверенным, что диск физичекси с другого компа?

Сергей.


* Origin: Demos online service (2:5020/400)

Re: O ActiveX DLL

From: "Sergey Merzlikin" <sm [@] smsoft.ru>


> >> Тоже плохо. Человек может юзать прогу с собственного

расшаренного диска.
> >

> > А зачем ему это разрешать? В конце концов и этот случай можно

детектировать,
> > и сделать исключение, но, по-моему, это лишнее.

>

> Что-то я не понял. Т.е. GetDriveType возвращает DRIVE_REMOTE (= 4)

> не только для чужих компов, но и для собственного расшаренного харда?

> Как же тогда точно определить, что клиент цепляет DLL с физически ДРУГОГО

компа?

Если расшарить каталог, содержащий Dll или один из его предков, а затем на
том же компьютере подключить его как сетевой диск (в Win9x это сделать не
получится), то для этого диска GetDriveType возвратит DRIVE_REMOTE.
Естественно, для буквы самого HDD тип не изменится. Если такой извращенный
способ доступа к своему HDD предполагается использовать, специально для него
можно немного усложнить процедуру проверки, и достичь желаемого результата
(WNetGetConnection вместо GetDriveType + сравнение начала возвращенного
сетевого пути с результатом GetComputerName).
--
* Origin: Talk.Mail.Ru (2:5020/400)

Re: O ActiveX DLL

From: "Sergey Merzlikin" <sm [@] smsoft.ru>


> А как предполагается предотсвратить установку на более чем один

комп?
> Паролем? ;-)


Можно и так.

> Имхо в принципе путь неправильный - Сергею нужно защитьу от многократного

> использования, а ты предлагаешь по сути защиту от HСК.


Я предложил несколько вариантов. Этот предполагал, что программу установки
запускает только лично он сам. Кстати, от чего он защищается, мне так до
коца и не ясно. Если это защита от превышения технических возможностей самой
Dll, можно попробовать поискать решение, снимающее это ограничение.

> Hе говоря уже о том, что имя компьютера может и поменяться.


Переустановить. Любая защита предполагает некоторый элемент неудобства.

--
* Origin: Talk.Mail.Ru (2:5020/400)

Re: O ActiveX DLL

From: "Sergei Ho" <calendarman [@] mtu-net.ru>


From: "Sergey Merzlikin" <sm [@] smsoft.ru>

Newsgroups: fido7.ru.visual.basic
Sent: Sunday, August 15, 2004 3:15 PM
Subject: Re: O ActiveX DLL


>> >> Тоже плохо. Человек может юзать прогу с собственного

> расшаренного диска.

>> >

>> > А зачем ему это разрешать? В конце концов и этот случай можно

> детектировать,

>> > и сделать исключение, но, по-моему, это лишнее.

>>

>> Что-то я не понял. Т.е. GetDriveType возвращает DRIVE_REMOTE (= 4)

>> не только для чужих компов, но и для собственного расшаренного харда?

>> Как же тогда точно определить, что клиент цепляет DLL с физически ДРУГОГО

> компа?

>

> Если расшарить каталог, содержащий Dll или один из его предков, а затем на

> том же компьютере подключить его как сетевой диск (в Win9x это сделать не

> получится), то для этого диска GetDriveType возвратит DRIVE_REMOTE.

> Естественно, для буквы самого HDD тип не изменится. Если такой извращенный

> способ доступа к своему HDD предполагается использовать, специально для него

> можно немного усложнить процедуру проверки, и достичь желаемого результата

> (WNetGetConnection вместо GetDriveType + сравнение начала возвращенного

> сетевого пути с результатом GetComputerName).


Я понял, спасибо.
Думаю, такое использование папки на своем компе -- это извращение
и его можно в расчет не брать. Hе могу придумать разумного довода,
чтобы так юзать диск.

Сергей.


* Origin: Demos online service (2:5020/400)

Obfuscate для VBA Word

From: "Sergei Ho" <calendarman [@] mtu-net.ru>


Кто-нибудь может посоветовать Obfuscate для VBA кода в Word?

Сергей


* Origin: Demos online service (2:5020/400)