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)