Обсуждение программирования на Visual Basic в конференции ru.visual.basic
Re: O ActiveX DLL |
From: "Sergey Merzlikin" > > > Разумеется, повторную загрузку библиотеки так не предотвратить, но, > > наверное, автору вопроса нужно не это, а чтобы повторно загруженная > > библиотека не выполняла полезную функцию, а это можно легко организовать. > > Ага, 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. -- Сергей Мерзликин www.smsoft.ru/ru/ * Origin: Talk.Mail.Ru (2:5020/400) |
Re: O ActiveX DLL |
Hello, Sergey! You wrote to 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> В таком случае при установке 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" "Sergey Merzlikin" >> 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" 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" "A Skrobov" > Имхо в принципе путь неправильный - Сергею нужно защитьу от многократного > использования, а ты предлагаешь по сути защиту от HСК. > Hе говоря уже о том, что имя компьютера может и поменяться. Hет мне нужно именно блокировать использование DLL с другого компа. Я не понял, если GetDriveType возвращает DRIVE_REMOTE (= 4), то можно быть уверенным, что диск физичекси с другого компа? Сергей. * Origin: Demos online service (2:5020/400) |
Re: O ActiveX DLL |
From: "Sergey Merzlikin" > >> Тоже плохо. Человек может юзать прогу с собственного расшаренного диска. > > > > А зачем ему это разрешать? В конце концов и этот случай можно детектировать, > > и сделать исключение, но, по-моему, это лишнее. > > Что-то я не понял. Т.е. 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" > А как предполагается предотсвратить установку на более чем один комп? > Паролем? ;-) Можно и так. > Имхо в принципе путь неправильный - Сергею нужно защитьу от многократного > использования, а ты предлагаешь по сути защиту от HСК. Я предложил несколько вариантов. Этот предполагал, что программу установки запускает только лично он сам. Кстати, от чего он защищается, мне так до коца и не ясно. Если это защита от превышения технических возможностей самой Dll, можно попробовать поискать решение, снимающее это ограничение. > Hе говоря уже о том, что имя компьютера может и поменяться. Переустановить. Любая защита предполагает некоторый элемент неудобства. -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: O ActiveX DLL |
From: "Sergei Ho" From: "Sergey Merzlikin" 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" Кто-нибудь может посоветовать Obfuscate для VBA кода в Word? Сергей * Origin: Demos online service (2:5020/400) |