Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: какие вы знаете модели лицензирования своей проги Добавлено: 21.06.06 17:20  

Автор вопроса:  student-uni
Я решил сделать так

Юзер жмёт меню "Зарегистрироваться"
Прога посылает мне по емейл его Название фирмы или имя,
Имя компьютера, МАК адрес сетевухи, число пользователей.

Я эти четыре параметра склеиваю в одну текстовую строку,
например с разделителем знаком "?" между параметрами
шифрую каким нибудь шифрованием и получаю ключ типа

ЁКЛМН%оапврлкг534ыв длоув

Шлю ему этот ключ.

Он его вводит в окошко.

Прога сохраняет его допустим в реестре.
И прога имеет алгоритм дешифрации.
Она каждый раз при старте читает ключ из реестра,
если ключа там нет - пишет что версия не зарегистрирована.
Если ключ там есть - проверяет тот ли это компьютер по
названию и Мак адресу.
Если не тот - пишет что не зарегистрирована.
Если тот - пишет в Инфо для кого она зарегистрирована.

Вопрос
Оптимален ли такой подход в плане общего процесса ?
/достоинства недостатки/
Как бы вы сделали лицензирование ?

Спасибо

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 21.06.06 18:01
В НЕТ предусмотрен свой процесс лицензирования, достаточно устойчивый.. Там используется файл лицензии, с ключами, шифрованием и т.д.. для этого есть специальные классы..
К сожалению, не могу рассказать более подробно, т.к. никогда не делал этого, но достаточно часто встречал в инете инфу по этому поводу...

Ответить

Номер ответа: 2
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #2
Добавлено: 21.06.06 23:27
Вообще метод не плохой, но я делал это немного проще - читал серийный номер винчестера.

Код для VB6:
___________________
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Public Function ProgramID() As String
GetVolumeInformation "C:\", VName, 255, Serial, 0, 0, FSName, 255
...
дальше крутим и вертим переменную Serial и получаем из неё строку ProgramID, которую юзер посылает нам.
...
ProgramID=...
End Sub
________________

Ответить

Номер ответа: 3
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #3 Добавлено: 21.06.06 23:55
+1 к винту надёжнее...

хотя кому надо - дальше понятно...

СовЭт:
Берём пробегаемся по паролям юзверя, шифруем, эти карляки предлагаем отправить по мылу. На основе тех карляк дать серийник к проги :)

Это пример как делать ненужно

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 22.06.06 02:09
читал серийный номер винчестера

мне тоже как то понадобился номер HDD.. к сожалению стандартных возможностей я не нашел во FW.. поэтому пришлось прибегнуть к API..
Держи то, что у меня получилось.. может пригодится..

Imports System.Text
Imports System.Runtime.InteropServices

Public Class Win32

#Region " API Declare "

    <;DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function GetVolumeInformation(ByVal drive As String, _
                                             ByVal volumeName As StringBuilder, _
                                             ByVal volumeNameBufLen As Integer, _
                                     <Out()> ByRef volSerialNumber As Integer, _
                                     <Out()> ByRef maxFileNameLen As Integer, _
                                     <Out()> ByRef fileSystemFlags As Integer, _
                                             ByVal fileSystemName As StringBuilder, _
                                             ByVal fileSystemNameBufLen As Integer) As Boolean
    End Function

#End Region

    Public Shared ReadOnly Property DriveSerialNumber(ByVal drive As String) As Integer
        Get

            Dim volumeName As New StringBuilder(256)
            Dim volSerialNumber As Integer
            Dim maxFileNameLen As Integer
            Dim fileSystemFlags As Integer
            Dim fileSystemName As New StringBuilder(256)

            Dim result As Boolean = GetVolumeInformation(drive, volumeName, 256, volSerialNumber, _
                                                       maxFileNameLen, fileSystemFlags, fileSystemName, 256)

            If (result) Then
                Return volSerialNumber
            Else
                Return 0
            End If

        End Get
    End Property

End Class

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim serialNumber As Int32 = Win32.DriveSerialNumber("C:\";)

        MessageBox.Show("Serial Number: " & serialNumber, "VolumeSerialNumber", _
                            MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub

End Class

Как пользоваться этим в .NET я тоже показал..

Ответить

Номер ответа: 5
Автор ответа:
 Sergey



ICQ: 283551900 

Вопросов: 1
Ответов: 74
 Профиль | | #5 Добавлено: 22.06.06 18:05
:) А если винт поменяет?

А если перехватить вызов GetVolumeInformation и вернуть что нужно?

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 22.06.06 18:50
:) А если винт поменяет?
А если перехватить вызов GetVolumeInformation и вернуть что нужно?


А если бы у бабушки были яйца, то она была бы дедушкой!!!
С таким же успехом можно на любую поставленную задачу найти 1000 и 1 причину, по которой делать это не имеет смысла...
Если использовать фамилию и е-mail, то скажешь..
А если ОНА фамилию поменяет?
А если мыло изменится?

Ответить

Номер ответа: 7
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #7 Добавлено: 22.06.06 22:46
Друзья мои, речь не о том чтоб защитить от взлома на 99,9%
Речь о том, чтобы создать стандартное лицензирование присущее всем нормальным программам. Меня интересует, является ли приведенный мной механизм "через ж..." или он более менее похож на то как это делается в коммерческих продуктах.

Мысль про встроенное лицензирование во фреймворке мне например не была известна. По каким словам искать то ?

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 22.06.06 22:51
System.ComponentModel.License
System.ComponentModel.LicenseManager
System.ComponentModel.LicenseProvider

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 23.06.06 19:18
student-uni
если что стоящее накопаешь по этой теме.. дай знать..
уж больно тема интересная...

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 23.06.06 20:25
Разумней, имхо, привязываться к серийнику винды, так нормальным пользователям, заплатившим за винду, будет проще.

Ответить

Номер ответа: 11
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 01.07.06 03:12
Забываешь о корпоративных пользователях :)

А вообще способ лицензирования очень зависит от специфики приложения.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам