AV-SOFT
AVLock SIMPLE
Introducción
Que es AVLock SIMPLE?
Como adquirir AVLock SIMPLE?
Nuevo en v5.1
Usando AVLock SIMPLE
Como instalar AVLock SIMPLE?
Conceptos Básicos
Configuración
Usuarios e Instancias
Esquemas de protección
Ejemplos
Nuevo Estilo
Ejemplo 1
Ejemplo 2
Ejemplo 3
Ejemplo 4
Ejemplo 5
Request Key
UserData Based
Ejemplos PayPal IPN
Propiedades
Métodos
El Online License Manager (OLM)
Como's
La utilidad Configurator
La utilidad RegMonitor
La Utilidad KeyGen
La Utilidad CodeCheck
La Utilidad KeyCheck
Información adicional
Acuerdo de licencia
Historia de versiones_2

Conceptos Básicos

Top  Previous  Next

 

Items

Cómo AVLock protege su software

Las propiedades InstallCode, InstallCodeSources, etc.

Las claves de registración (Keys)

Significado de cada uno de los campos de una clave

La utilidad KeyCheck

El proceso de registración

Iniciar el periodo de prueba (Trial) con el OLM Básico

Iniciar el periodo de prueba (Trial) con el OLM Avanzado

Extender el periodo de prueba (Trial)

Cómo Registrar la Aplicación utilizando una Clave de Registración (Key)

Cómo Registrar la Aplicación utilizando el OLM

Cómo Rentar la Aplicación por Mes, Año, Etc.

Cómo Borrar los Datos de Registración

Los métodos WriteAppData y WriteKeyData

Los métodos ReadAppData y GetKeyData

Que es una clave genérica?

 

 

COMO AVLOCK PROTEGE SU SOFT?

 

Que es lo que desearíamos que hiciera un sistema de licenciamiento?

 

Una de las primeras cosas que cualquiera desearía de un sistema de licenciamiento es que no permita que  su producto de soft "La aplicación", se ejecute libremente en todos los computadores. Desearíamos tener un mecanismo para evitar que un usuario no autorizado utilice nuestro soft. Una de las formas más utilizadas para lograrlo es ligando la aplicación a alguna información especial del usuario o del computador donde ésta deberá ejecutarse.

 

Por ejemplo, podríamos pensar en ligar nuestro soft a alguna característica especial del hardware del computador donde se ejecutará la aplicación que sea diferente de cualquier otro computador, de esa manera podríamos obtener un número de serie totalmente distinto para cada computador.

 

AVLock calcula  un código especial llamado InstallCode para cada instalación de aplicación protegida con AVLock. El InstallCode puede estar calculado en base a características del hardware o en base a los datos del usuario y Ud. define esto en la propiedad InstallCodeSources.

 

Veamos brevemente y en forma muy resumida los pasos que sigue AVLock para manejar esto cuando se ejecuta la aplicación:

 

1. Se calcula en tiempo de ejecución el valor de la propiedad InstallCode en base al hardware o de los datos del usuario.

2. Se compara este valor con el InstallCode guardado junto a los datos de registración que normalmente se encuentran en un fichero de extensión *.avr en la misma carpeta de la aplicación.

3. Si coinciden los valores de ambos InstallCode se considera que la aplicación está registrada (licenciada) y se autoriza la ejecución. En caso contrario si no coinciden o no existe el fichero *.avr, se considera que la aplicación no está registrada y no se permite la ejecución.

 

Aquí aparece un nuevo elemento, "Los datos de registración". Me imagino que lo primero que estará pensando es que el fichero *.avr con los datos de registración no debería estar tan expuesto, y en lugar de estar ahí en la misma carpeta del programa donde cualquiera puede intentar modificarlo o borrarlo con la intención de burlar nuestro mecanismo de seguridad, sería conveniente tal vez ubicarlo en otro lugar más seguro y oculto de la vista de los hackers o usuarios inescrupulosos.

 

Personalmente creo que la seguridad no se basa en ocultar datos. Los hackers son muy hábiles para encontrar cosas ocultas. La seguridad debe basarse en principios más sólidos. Tenga en cuenta que el fichero *.avr, a pesar de ser un fichero de texto plano, se encuentra fuertemente encriptado. Si alguien modifica o borra este fichero, lo único que logrará es que la aplicación deje de funcionar.

 

Tal vez le queden dudas respecto a lo que acabo de decir. Bien, le voy a hacer un desafío. Tome un ejemplo que no utilice el método MakeTrial() y trate de romper la protección de AVLock manipulando el fichero *.avr. Bórrelo, modifíquelo, copielo de una computadora a otra, etc. y si lo logra yo lo voy a premiar dándole gratis la versión para desarrollador del producto incluyendo todo el código fuente.

 

Veamos una muestra del fichero de registración:

 

Nombre del fichero: EYPMKNUC.avr

 

Contenido del fichero:

 

0=E4136D422D8E489928EE46904821F9BCB2E92CF51E58C04255E6386121F000C4B51C967C6F176399F9A0B644691A8BC21AC211948DB0B409BF784EA3CD139073CCCB5C9BDDEEE7F2D040E149AAE33CA0

 

ld=NA2413WMZ5PE72LA8

 

ad=8A71087BAFF0F0DB10A7A56851DD47A1E3D9DEE79B316E0096E3792277C65F86F7ED26A3CC17F82C97B0888020D7E0A261F618D6FE1AFEA36B922B1521626AAFD3B3D1F306E5F170910ADDE4829AEB2D

 

Vemos aquí tres entradas; "0", "ld" y "ad". La primera "0" corresponde a la clave de registración. Para cada clave registrada de una aplicación existe aquí una entrada numérica entre 0 y 254 correspondiente al índice de la clave. Para la mayoría de los casos solo es necesario utilizar  una clave y habitualmente se utiliza el índice "0" como en este caso.

 

Que información se guarda dentro de estas entradas? y que contiene la entrada para la clave "0"? Vemos que se trata de strings en formato hexadecimal. Están fuertemente encriptados con el algoritmo Rijndael (AES). Podemos ver el contenido de este archivo mediante la utilidad DataCheck, abajo vemos una imagen de la misma:

 

datacheck01

 

Es necesario ingresar la clave de encriptación para poder acceder a estos datos. Después seleccionamos mediante el botón [...] el fichero de datos de registración que deseamos ver.

 

Tenemos aquí tres grupos de datos:

 

1. DATOS DE LA APLICACION

 

datacheck02

 

Checksum: Suma de chequeo para verificar la integridad de los datos.

 

OtherCode: (Corresponde a la propiedad OtherCode) Se puede utilizar para almacenar información adicional sobre el usuario como ser Documento de identidad, domicilio, etc.

 

UserName : Nombre del usuario (Corresponde a la propiedad UserName).

 

Company : Compañía (empresa) del usuario (Corresponde a la propiedad Company)

 

Email : Email del usuario (Corresponde a la propiedad Email.

 

Los datos del usuario se pueden seleccionar para que intervengan en la formación del Installcode, por ejemplo en la siguiente configuración:

 

InstallCodeSources := User_Data;

UserSources := [User_Name, User_Company, Email_Address,  Other_source];

 

Ver más detalles más adelante en Las Propiedades InstallCode, InstallcodeSources, etc.

 

AppName : Nombre de la aplicación (Corresponde a la propiedad AppName)

 

AppVersion : Versión de la aplicación (AppVersion)

 

InstallCode : (Corresponde a la propiedad Installcode). Es una copia del InstallCode local guardada junto con los datos de registración.

 

 

2. CLAVES

 

datacheck03

KEY : Clave de registración

MOVED : Es 'Y' cuando el módulo fue marcado para ser movido a otro computador y 'N' para una registración normal.

PRIMARY : Es 'Y' para una registracion Primaria y 'N' para una registración Secundaria.

INSTALLCODE PRIMARIO : En instalaciones Secundarias corresponde al Installcode de la registración primaria de la cual depende y en registraciones Primarias coincide con la propiedad Installcode local.

INSTALLCODE LOCAL : Corresponde a la propiedad Installcode local.

 

3. FECHA DEL SISTEMA

 

Nos permite ver cual ha sido el valor más alto que alguna vez haya alcanzado la fecha del sistema al estar ejecutándose la aplicación "Last date reached". Esto nos permite deducir que si esta fecha es mayor que la fecha actual del sistema significa que la fecha del sistema fue cambiada (retrasada) posiblemente para burlar el mecanismo de seguridad de AVLock y utilizar un periodo de prueba (trial) fuera de término.

 

Repasemos nuevamente los pasos que sigue AVLock para validar una clave de registración.

 

1. Al iniciar la ejecución se calcula el valor de la propiedad InstallCode en base al hardware o de los datos del usuario.

2. Se compara este valor con el InstallCode guardado junto a los datos de registración que normalmente se encuentran en un fichero de extensión *.avr en la misma carpeta de la aplicación.

3. Si coinciden los valores de ambos InstallCode se considera que la aplicación está registrada (licenciada) y se autoriza la ejecución. En caso contrario si no coinciden o no existe el fichero *.avr, se considera que la aplicación no está registrada y no se permite la ejecución.

 

En realidad la comparación no se hace en todos los casos sobre los InstallCode completos sino que en la clave (KEY) solo se guarda el codigo corto (CHECKSUM) que corresponde a la propiedad ICode. En el proceso de verificación de la registración se siguen los siguientes pasos:

 

a) Se extrae el CHECKSUM (ICode) de la clave (KEY) guardada en los datos de registración.

b) Se compara el Icode obtenido de la clave con el CHECKSUM del Installcode primario obtenido de los datos de registración. Estos deben coincidir.

c) Se compara el Installcode local obtenido de los datos de registración con el Installcode del computador  local calculado en tiempo de ejecución. También deben coincidir.

 

 

En instalaciones primarias todos los codigos cortos deben ser iguales, CC09 en el ejemplo de abajo:

 

regkey04

 

Para instalaciones con registración secundaria (vea el ejemplo 3), ICODE debe ser igual a CHECKSUM1 y CHECKSUM2 debe ser igual a CHECKSUM3. Como en la imagen de abajo:

 

regkey05

 

Al momento de realizarse la registración se concatenan la clave de registración con el InstallCode proveniente de la registración primaria y el Installcode proveniente de la computadora local. Luego se encripta fuertemente y se guarda con los datos de registración en el disco local.

 

regkey03

 

 

En la figura vemos las comparaciones que se efectúan, ambas son necesarias porque si no incluyéramos el InstallCode local un usuario podría copiar de un computador a otro estos datos y el nuevo computador quedaría registrado, la segunda comparación evita esto ya que en el nuevo computador el InstallCode cambia.

Para una registración primaria ambos InstallCode son idénticos y deben coincidir con el del computador. Además junto a los datos que se muestran arriba se guardan dos campos de un solo caracter cada uno que pueden ser 'Y' o 'N' representando valores booleanos, el primero "Moved" para indicar si la clave fue marcada para ser movida y el Segundo "Primary" para indicar si se trata de una registración primaria o secundaria. Vea también el método GetKeyData().

 

A continuación veremos con mayor detalle cada uno de estos elementos que forman parte del mecanismo de seguridad de AVLOCK.        

 

LAS PROPIEDADES:

- INSTALLCODE

- INSTALLCODESOURCES

- MACHINESOURCES

- USERSOURCES

 

En el componente tenemos definidos los siguientes tipos de datos:

 

TInstallCodesources = (Machine_Data, User_Data, Removable_Disk);

TMachineSources = set of (System_UUID, BaseBoard_SN, Reg_File, HD_PNPDeviceID, HD_SN, HD_Signature);

TUserSources = set of (User_Name, User_Company, Email_Address, Other_Source);

 

Cada uno de estos tipos de datos da lugar a una propiedad distinta del componente. Estas propiedades en conjunto permiten definir las fuentes que se utilizarán para calcular la propiedad InstallCode.

 

La propiedad InstallCode se utiliza para guardar un código que identifica una instalación de su soft en una computadora dada.

Cada vez que la aplicación se inicia, AVLock calcula el valor del InstallCode en base a las fuentes definidas en la propiedad InstallCodeSources.

Tiene un formato simple de 12 caracteres hexadecimales: XXXXXXXXXXXX

 

Ejemplo de InstallCode: BED1ABB4B189

 

Internamente está compuesto por tres campos: DATA-CODE, IC-SRC y CHECKSUM. El campo checksum se calcula como una suma de los dos anteriores y sirve para verificar su integridad.

 

El valor que se asigna al campo DATA-CODE se obtiene de varias fuentes que podemos clasificar en tres grupos:

 

1) MACHINE DATA: Son valores obtenidos del hardware del computador.

2) USER DATA: Son los datos del usuario, Nombre, Compañía, Email, etc.

3) REMOVABLE DISK: Serial obtenido desde el dispositivo removible donde se instaló la aplicación.

 

Usted debe optar por uno de estos tres grupos ya que sólo podrá utilizar uno de ellos. El grupo a utilizar se define en la propiedad InstallCodeSources. Abajo puede ver las tres configuraciones posibles

 

1)  InstallCodeSources := Machine_Data;

2)  InstallCodeSources := User_Data;

3)  InstallCodeSources := Removable_Disk;

 

Como vemos InstallCodeSources funciona como un switch que permite seleccionar el grupo de fuentes a utilizar. Cada uno de estos grupos tiene a su vez un conjunto de opciones que se pueden seleccionar. Las opciones para cada uno de los grupos son las siguientes:

 

MachineSources define las opciones para Machinne_Data. Puede tomar los siguientes valores:

System_UUID:  UUID (Universally Unique Identifier), es un número calculado por el servicio Windows WMI en base a varios parámetros del sistema que en principio debería ser distinto para cada computador.

BaseBoard_SN: Un numero extraido de los parámetros de la placa madre del sistema.

HD_PNPDeviceID, HD_SN y HD_Signature: Son valores numéricos obtenidos de los parámetros del disco rígido del sistema.

Reg_File: es un valor numérico obtenido del nombre del fichero *.avr que contiene los datos de registración incluyendo el camino de acceso al mismo, por ejemplo: c:\appfolder\L9G4682R.avr. De esta manera si incluimos esta opción el Installcode dependerá también de la ubicación que tenga la aplicación en su disco. Puede ser util cuando se quiere controlar la cantidad de instancias de la aplicación que el usuario puede ejecutar simultaneamente, si no se utiliza Reg_File el usuario puede copiar todos los ficheros de la carpeta de la aplicación a otra carpeta distinta y lograr asi duplicar la cantidad de instancias permitidas.

 

Después de definir el grupo a utilizar con InstallCodeSources, debemos definir las fuentes del mismo que se van a utilizar. Por ejemplo:

 

Para el grupo MACHINE DATA podríamos definir:

 

InstallCodeSources := Machine_Data;

MachineSources := [System_UUID, BaseBoard_SN];

 

Para el grupo USER DATA podríamos definir:

 

InstallCodeSources := User_Data;

UserSources := [User_Name, Email_Address];

 

Para REMOVABLE DISK no necesitamos definir un grupo de fuentes ya que ésta es una sola, asi que sólo definimos lo siguiente:

 

InstallCodeSources := Removable_Disk;

 

Abajo podemos ver un esquema de lo que estuvimos explicando:

installcod02

 

 

 

Note que IC_SRC es un campo de 1 byte que guarda la configuracion de las fuentes utilizadas para definirlo.

 

Viene al caso mencionar aquí la utilidad CodeCheck que nos permite ver los valores de los campos internos de un InstallCode dado.

 

codecheck

 

Vemos que este Installcode fue calculado con la siguiente configuración:

 

InstallCodeSources := Machine_Data;

MachineSources := [System_UUID, BaseBoard_SN];

 

El CHECKSUM es un número obtenido en base a la suma de todos los otros campos, que también se utiliza como un InstallCode corto, que corresponde a la propiedad ICode. Vea más información en Método GetIcode.

 

 

LAS CLAVES DE REGISTRACION (KEYS)

Las Claves son códigos con el formato siguiente: XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX, con una longitud total de 31 caracteres. Una clave de registración contiene internamente campos de datos para controlar la aplicación. Los campos incluidos dentro son los siguientes:

 

Campos de una clave de registración:

regkey01

 

Campo         long  tipo

------------- ----  -----

iCode           4   word

Days            4   word

Startdate       4   word

AppID           4   word

Values          3   hex string

Users           2   byte

Instances       2   byte

Index           2   byte

KeyType         1   nibble

Checksum        2   byte

             ----

Long. Total    28

 

Estos campos son concatenados en un solo string, que es fuertemente encriptado con el algoritmo Rijndael y agregándole los guiones para darle un formato más legible. El siguiente es un ejemplo de clave de registración terminada:

 

98RAWTV-9GP5KLK-T7RMRW9-AD305UQ

 

Significado de cada uno de los campos de una clave de registración

 

Days

Días autorizados para una clave de tipo trial o temporal. Si la clave es permanente toma el valor 65535

 

Users

Cantidad de usuarios que podrán compartir la clave de registración a través del OLM.

 

Instances

Cantidad de instancias de la aplicación que se permite ejecutar simultáneamente.

 

StartDate

Fecha de inicio del periodo autorizado para claves de tipo trial y temporal. Si la clave es permanente toma el valor 65535.

 

Index

El número de la clave. Número que identifica la clave dentro de los datos de registración. De tipo byte cuyo valor puede estar entre 0 y 254.

 

iCode

Es la suma de chequeo de la propiedad InstallCode proveniente del hard y otras fuentes. Es incluido para ser posteriormente comparado con el que proviene del computador donde se instala la aplicación para comprobar que la clave sea la apropiada para ese  computador.

 

AppID

número identificatorio de la aplicación.

 

Values

Consiste de tres nibbles (1.5 bytes). Este campo multipropósito fue agregado en la versión 3.0 y permite que Ud. con una sola clave controle muchas opciones en su aplicación, eliminando así la necesidad de utilizar varias claves para controlar su aplicación. En los ejemplos verá como se puede utilizar este campo de diversas maneras.  Vea la función decodevalues() que toma los tres nibbles y los convierte en un arreglo de booleans. Vea también en el procedimiento ShowRegData() como transformar este valor en un solo valor entero de 3 nibbles (0..4095) o tres valores enteros de 1 nibble (0..15) o 12 valores boolean.

 

KeyType

Tipo de Clave. Los siguientes son los valores posibles:

0=trial,  1=temporal,  2=permanent,  3=unregister,  4=unregisterall

Para claves genéricas sumar 5. Por ejemplo 5=trial-generica, 6=temporal-generica, etc.

 

CheckSum

Suma de chequeo de todos los campos previos. Sirve para verificar la clave de registración.

 

LA UTILIDAD KEYCHECK

También mencionaremos la utilidad KeyCheck, que permite ver los valores de los campos internos de una clave. Aquí, por razones de seguridad, antes de mostrar los datos se solicita que se ingrese la clave de encriptación.

 

keycheck01

 

 

EL PROCESO DE REGISTRACION

 

El proceso de registración de una aplicación consiste en la creación del fichero *.avr normalmente en la misma carpeta de la aplicación conteniendo los datos de registración que ya vimos al comienzo de esa sección. Dentro de los datos de registración está la Clave (Key) que contiene la información del tipo de registración (Trial, Temporal y Permanente) y el periodo de tiempo autorizado para el caso de las claves trial y temporal. En la mayoría de los casos lo primero que se hace es iniciar un periodo trial y normalmente desearíamos que esto se realice en forma automática la primera vez que se ejecute la aplicación. Después, tal vez se desee tener la posibilidad de extender algunos días el periodo trial y finalmente cuando el usuario efectúa el pago poder registrar la aplicación con una clave apropiada. Veamos en detalle cada uno de estos pasos:

 

INICIAR EL PERIODO DE PRUEBA (TRIAL)

 

Métodos fuera de línea  (dos opciones):

 

(1) En forma automática la primera vez que se ejecuta la aplicación utilizando el método MakeTrial(). Por ejemplo en el siguiente llamado al método:

 

MakeTrial(0,2,1,date,30,'000');

 

Solicitamos la generación de un periodo de prueba de 30 días para el index 0 con un máximo de 2 usuarios concurrentes y solo una instancia permitida, comenzando con la fecha actual del sistema y un campo Values = '000'. Este método solo se llama la primera vez que se ejecuta el programa, cuando todavía no existen datos de registración, cuando GetKeyData() devuelve un estado (Status = Unregistered).

 

El problema con este método es que el usuario puede descubrir donde se guardan los datos de registración y borrarlos, haciendo que el estado sea nuevamente Unregistered reiniciando así un nuevo periodo de prueba.

 

(2) No iniciar el periodo de prueba en forma automática y pedir al usuario que solicite una clave de registración para iniciarlo en forma manual. Esto significa que antes que el usuario complete este trámite la aplicación va a permanecer en estado Unregistered y aquí Ud. decide que hacer en su programa en este periodo a) no permitir la ejecución de la aplicación y b) permitir la ejecución en modalidad restringida. Creo que esta última es la mejor opción. Vea los esquemas de protección B,C,E y F.

 

Este método es más seguro que el de la opción 1 ya que si el usuario borra los datos de registración la aplicación volverá a su estado original Unregistered.

 

Métodos en línea (tres opciones):

 

Para esta modalidad utilizaremos el Online License Manager (OLM), para la opción 1) con la versión básica y en la opción 2) utilizando la versión avanzada. Para cualquiera de las dos opciones la operación es totalmente transparente al usuario y este no necesitará manipular claves de registración para lograrlo. En la opción 3) se utiliza el método OnlineRequestKey() a través del cual el usuario solicita una clave de registración la que se le enviará a través de una dirección de email que éste provee.

 

Iniciar el periodo de evaluación con el OLM básico:

 

Para el modo básico se utiliza el método OnlineGetKeyB(): Este método es seguro ya que si el usuario borra los datos de registración el periodo se reestablece al estado anterior ya que en el sitio web se guarda la clave con la que se registró la primera vez la que es utilizada para reestablecer nuevamente el periodo. Esto significa que si faltaban 5 días para expirar, al reestablecer los datos de registración seguirán faltando 5 días. Vea el ejemplo 1 y siguientes, según sea la configuración se utilizará el OLM Básico o el Avanzado.

 

Para el OLM Básico se utiliza el siguiente método:

 

AVLock.OnlineGetKeyB('000',0,0,30,1);

 

Los parámetros son:

'000' : Values.

0 : Kind (0=Trial).

0 : número de clave (index).

30 : días autorizados.

1 : instancias autorizadas.

 

 

Iniciar el periodo de evaluación  con el OLM avanzado:

 

Vea el ejemplo 1 y siguientes, de acuerdo a la configuración se utilizará el OLM Básico o el Avanzado con el botón [Start Trial]. Con el OLM avanzado se utiliza el método OnlineStartTrial().

 

OnlineStartTrial(0,2,1,30,'5AC');

 

Los parámetros son:

0 : número de clave (index).

2 : usuarios autorizados.

1 : instancias autorizadas.

30 : días autorizados.

'5AC' : Values.

 

 

Para el modo avanzado se utiliza el método OnlineStartTrial(), puede ver en los esquemas siguientes los pasos involucrados.

 

onlinestarttrial01

 

Otro esquema de OnlineStartTrial con más detalles:

 

startonlinetrial02

 

 

1. (en rojo). Se realiza un llamado al método OnlineStartTrial().

 

En el OLM se establecen valores por defecto para los valores del periodo trial que serán utilizados si como parámetros se pasan valores cero o vacíos:

 

$trialdays      = 30;

$extendays      = 15;

$trialusers     = 1;

$trialinstances = 1;

$trialvalues    = '000';

 

2. (en verde). El script advancedolm.php en el servidor genera una clave de registración para el índice enviado como parámetro y genera un nuevo registro en el OLM para manejar este índice y envía la clave calculada como respuesta al computador donde es guardada en las propiedades del componente y en los datos de registración. Si se hace este llamado estando ya iniciado el periodo trial, en lugar de crear un nuevo registro en el OLM se lee la clave desde el registro existente y se la retorna al computador, esto impide que el periodo trial pueda ser iniciado más de una vez.

 

Utilizando el Panel de Control del OLM podemos ver el registro generado por OnlineStartTrial(). Ingrese la url 'http://av-soft.com/olm5/s5cp.php, después se le solicitará el password, ingrese abc123, finalmente en search for coloque 12303 y para Into the field entre App ID. Verá un registro parecido al que se muestra abajo.

 

cp03

 

Además los métodos Synchronize() y OnlineFullSynchronize() inician un periodo trial si el registro en el OLM aún no existe, utilizando los valores por defecto del OLM para determinar la cantidad de días, usuarios, instancias y campo values.

 

 

Usando el metodo requestkey con el OLM avanzado:

 

El escenario es el siguiente:

 

1. La aplicación tendrá dos clases de funciones a) Libres para todo el mundo, y b) Solo para usuarios registrados.

2. Ud. alentará a sus usuarios a obtener una clave de tipo trial a fin de registrar la aplicación y tener acceso a las características especiales por el término de 30 días.

 

3. El formulario de registración tendrá campos para los datos del usuario; Nombre del usuario, Compañía y email y  un botón [Request Key]. Además otro campo para ingresar la clave recibida con un botón [Register].

 

4. Para solicitar la clave el usuario ingresa sus datos y hace click sobre el botón [Request Key].

 

5. El OLM (Online License Manager) dentro del sitio web recibe los datos del usuario y calcula la clave de registración apropiada y la envía a la cuenta de email que el usuario ingresó con sus datos. Esto asegurará que la dirección de email ingresada por el usuario sea una dirección suya real, de manera que Ud. podrá coleccionar estos datos pensando en una futura campaña de marketing.

 

6. El usuario recibe la clave via email y la ingresa en el campo correspondiente y pulsa la tecla [Register]. La clave se registrará iniciando así el periodo trial.

 

7. Finalmente cuando el usuario compró su producto, Ud. tiene dos opciones:

a) puede modificar el registro correspondiente del OLM para que se genere una nueva clave definitiva. El estado de registración se sincronizará mediante el método OnlineRenew() la siguiente vez que el usuario inicie la aplicación.

b) Puede calcular la clave utilizando la utilidad KeyGen y enviarla al usuario via email.  Vea el ejemplorequestkey.

 

EXTENDER EL PERIODO DE PRUEBA?

 

Método fuera de línea:

 

Debe enviarse al usuario una clave de tipo Trial para que éste la registre. La clave contendrá los datos de inicio del periodo y la cantidad de días autorizados.

 

Método en linea:

 

Vea el ejemplo 5, en la pestaña PrimaryRegistration y botón "Extend Trial".

 

starttrial03

 

Aquí se utiliza el conjunto avanzado de scripts php para extender el período de evaluación. Se hace un llamado al método OnlineExtendTrial() con el script  'advancedolm.php' como vemos en la siguiente línea:

 

OnlineExtendTrial(0,1,1,15,'5AC');

 

Para que el usuario pueda extender su periodo trial antes Ud. debe autorizar la operación modificando el registro correspondiente asignando 'Y' al campo Éxtend'. Se puede hacer esto mediante el panel de control o desde el RegMonitor.

 

Desde el panel de control:

 

haga click sobre el icono Edit editicon del registro correspondiente y pasará al cuadro de edición. Allí seleccione lo siguiente:

 

editolm06

 

y haga click sobre el botón [Save Record]. Volverá a la pantalla anterior donde debe hacer click sobre [->Go] para refrescar los datos. Verá entonces que el campo Ext = 'Y', indicando que cuando se solicite la creación de una clave que extienda el periodo trial esto sea concedido.

 

Desde la utilidad RegMonitor:

 

Ingrese los valores corresponda para WebHost, Path, App ID, Encryption Key, InstallCode e Index y haga click sobre el botón [Go]. Entonces el registro se leerá desde el OLM y se rellenarán los campos con los valores correspondientes. Como se puede ver en la figura.  Seleccione "Allow to extend the trial period (Ext=Y)" y haga click sobre el botón [Save Data].

 

extendtrial04

 

y recibirá el mensaje:

 

regmon02

 

 

Finalmente avise al usuario que ya puede extender el período de evaluación.

 

 

COMO REGISTRAR LA APLICACION UTILIZANDO UNA CLAVE DE REGISTRACION?

 

Items relacionados:

Ejemplo 1: Registrar aplicación utilizando claves

Ejemplo 4: Renovar la registración primaria en PC1

 

keygen02

 

 

Los pasos a seguir con este método son los siguientes:

 

1. El usuario le envía el código de instalación (InstallCode)

   Ej: BED1ABB4B189

 

2. Utilizando el InstallCode recibido de su usuario Ud. calcula la Clave de Registración utilizando la utilidad KeyGen.

Allí introduce los campos necesarios además del Installcode recibido del usuario y configura la clave a generar, en el ejemplo generamos una clave para el índice 0 con un solo usuario autorizado, dos instancias autorizadas, la clave será de tipo temporaria por 95 días a partir del 25/12/2010 y el campo Values = 35C. La clave resultante es:8JUAEPY-583UN2P-19209XD-7QN0WXN. Puede guardarla a un archivo texto de extensión *.txt o *.avk utilizando el botón [Save to File].

 

3. Ud envía al usuario la clave de registración calculada. Para este ejemplo: 8JUAEPY-583UN2P-19209XD-7QN0WXN.

por ejemplo enviando el fichero texto generado adjunto a un email.

 

4. El usuario utiliza la clave recibida para registrar la aplicación. Para este paso tenemos dos opciones: En línea (ONLINE) y fuera de línea (OFFLINE). En los ejemplos se utilizan ambas opciones dependiendo de la configuración (BASIC_OLM/ADVANCED_OLM) y si hay conexión a Internet.  Para la registración en línea se usa OnlineRegisterKey() y para la registración local RegisterKey().

El usuario ingresa la clave desde el fichero texto enviado con el botón [Load from file] o copiandola manualmente y hace click sobre el botón [Register].

 

registerkey01

 

 

a) REGISTRACION ONLINE: La clave y demás datos de registración se guardan en la computadora local y también en la base de datos de la página web en el OLM. Se utiliza el método OnlineRegisterKey().

 

onlineregisterkey01

 

Otro esquema de OnlineRegisterKey() con más detalles:

 

RegisterKey02

 

El código utilizado en los ejemplos contemplan ambas posibilidades; la registración en línea con OnlineRegisterKey() y la registración local con RegisterKey() dependiendo de la configuración y si hay conexión a Internet. El código utilizado en el ejemplo 1 es el siguiente:

 

procedure TRegForm.BtnRegClick(Sender: TObject);

var s: string;

   err, n :integer;

   olm :boolean;

begin

 n:=testfields;

 if (n>0) then begin

   showmessage('Please fill out your user data then try again.');

   exit;

 end;

 olm:=False;

 s:='';

{$IFDEF ADVANCED_OLM}

   olm:= connected;

 {$ENDIF}

 if olm then begin

  //Save Uuser data into the OLM and locally

   Form1.AVLock.OnlineSaveUserData(edname.Text, edcompany.Text, edemail.Text, edother.Text,0);

  //register KEY into the OLM and locally

   s:=Form1.AVLock.OnlineRegisterKey(trim(EdKey.Text));

   if (s='50') then begin

     showmessage('Key registered successfully');

     GetRegStatus;

   end else showmessage('Process fail, error: '+s);

 end else begin

  //Save Uuser data locally    

   writedata;

  //register KEY locally

   err := Form1.AVLock.RegisterKey(trim(EdKey.Text));

   case err of

   0: s:= 'Key registered successfully';

   1: s:= 'Key Length mismatch';

   2: s:= 'Your system date is incorrect';

   3: s:= 'Key unregistered';

   4: s:= 'Key not valid';

   end;

   if (err=0) then GetRegStatus;

   if (s<>'') then showmessage(s);

 end;

end;

 

 

b) REGISTRACION OFFLINE: La clave y demás datos de registración se guardan solamente en la computadora local. El código utilizado es el mismo ya visto arriba, que admite ambas opciones. En este caso se utiliza el método RegisterKey().

 

 

COMO REGISTRAR LA APLICACION MEDIANTE EL OLM?

 

Items relacionados: Cómo utilizar el panel de control del OLM

 

Usando el conjunto avanzado de scripts php se puede registrar la aplicación en forma definitiva o temporaria utilizando el método OnlineRenew(), invocando el script advancedolm.php y especificando el número de índice. En el ejemplo 5 se implementa con el botón [Activate].

 

Solo se debe utilizar cuando existe el registro correspondiente en el OLM, creado anteriormente al iniciar el periodo trial.

Igual que para extender el periodo trial, para que el usuario pueda activar la registración debemos modificar el registro correspondiente en el OLM utilizando el panel de control o la utilidad RegMonitor.

 

Veamos primero como hacerlo con el Panel de Control del OLM. Ingrese la url 'http://av-soft.com/olm5/s5cp.php, después se le solicitará el password, ingrese abc123, finalmente en search for coloque 12341 y para Into the field entre App ID. Verá un registro parecido al que se muestra abajo.

 

cp03

 

DESCRIPCION DE LOS CAMPOS

 

DATOS IDENTIFICATORIOS

 

ID : Campo ID del registro

APPID : Propiedad AppID del componente.

APPNAME : Nombre de la aplicación.

SUM  : Suma de chequeo del InstallCode.

INSTALLCODE  : Installcode que identifica una instalación de la aplicación en un computador.

PRIMARY INSTALLCODE : InstallCode del computador primario. Coincide con el Installcode en una registración primaria.

M : (Index) número identificatorio de la clave (0..254)

USERNAME : Nombre del usuario.

COMPANY : Empresa (Compañía) del usuario.

EMAIL : Email del usuario.

OTHER: Datos adicionales del usuario.

 

DATOS A USAR PARA GENERAR UNA NUEVA CLAVE O CAMBIAR EL ESTADO DE REGISTRACION

 

DAYS : Días del periodo autorizado

USERS : Número de usuarios autorizados

INST : (Instances) Número máximo de instancias de la aplicación ejecutándose simultáneamente.

VAL : Se corresponde con el campo Values guardado en la clave de registración.

EXT : Se hace igual a 'Y' para autorizar al usuario a extender su periodo de evaluación (Trial).

PAID : (pagado) Se hace igual a 'Y' para autorizar al usuario a registrarse con una nueva clave después de haber realizado el pago.

MOV : (Moved) El registro ha sido marcado para ser movido a otro computador.

 

DATOS DE LA ULTIMA REGISTRACION VIGENTE

 

PR : (Primary) Pertenece a una registración primaria.

LASTKEY : Ultima clave registrada.

KIND : Tipo de clave (0=Trial, 1=Temporal, 2=Permanente)

KEYDATE : Fecha de la última clave registrada.

 

 

EDITAR LOS DATOS DEL OLM

 

Haciendo click sobre el icono Edit  ingresará al siguiente cuadro de edición:

 

editolm01

 

Para habilitar al OLM para que genere una nueva clave de registración debemos seleccionar la opción:

 

editolm05

 

e introducir los valores correspondientes en los campos Users, Instances y Values. Después especificar si la clave va a ser permanente o temporaria y en este último caso especificar la cantidad de días del periodo a autorizar.

 

editolm07

 

Finalmente hacer click en [Save Record], verá un mensaje como el siguiente:

 

editolm03

 

Abajo puede ver como quedaron los datos correspondientes que definen la creación de la nueva clave.

 

editolm08

 

Esto también se puede hacer utilizando el RegMonitor. Desde la pestaña [OLM Data] asigne los valores como se muestra en la figura de abajo y haga click sobre el botón [Save Data].

 

regmon07

 

En este ejemplo vimos como se habilita para registración una nueva clave mediante el panel de control del OLM 5.0. En este caso permitimos 3 usuarios y 2 instancias. En Values pusimos 025. Seleccionamos una clave temporaria y establecimos la cantidad de días en 365.

Una vez modificado el registro del OLM, informamos al usuario que ya puede activar la aplicación con los nuevos valores de registración. Entonces el usuario activa esta nueva registración presionando el botón [Activate]

 

regiserkey02

 

El código utilizado en el ejemplo 5 para este botón es el siguiente:

 

procedure TRegForm.BtnRenewalClick(Sender: TObject);

var s:string;

begin

 if not testfields(False) then exit; //test fields Username, Company, Email and Registration Key

 writeData; //Write Username, Company and Email to the Local Application data before to register

 s:=Form1.AVLock.OnlineRenew(0);//try to renew the key

 if (s='00') then showmessage('Renewal Applied') else showmessage(Form1.errormessage(s));

end;

 

En el OLM el script advancedolm.php calcula la clave según los datos del registro y devuelve la clave a la aplicación, la que finalmente efectúa la registración, obteniendo el mismo resultado que cuando la registración se hace ingresando la clave manualmente como vimos anteriormente.

 

 

COMO RENTAR LA APLICACION POR MES, AÑO, ETC?

 

Items relacionados:

Cómo registrar una aplicación utilizando una clave de registración?

Cómo registrar una aplicación utilizando el OLM?

 

Utilizando una de las opciones anteriores registre una clave temporaria por el periodo que desea rentar la aplicación.

 

COMO BORRAR LOS DATOS DE REGISTRACION?

 

Items relacionados.

Ejemplo 1: Borrar la registración existente

Métodos : Metodos de aplicación general y Métodos de acceso a Internet

 

Para borrar los datos locales de registración utilice los métodos EraseReg() y EraseKey() y para borrar los datos en el OLM además de los locales utilice OnlineRemoveKey() con el OLM básico y OnlineRemoveReg() con el OLM avanzado.

 

 

LOS METODOS WRITEAPPDATA() y WRITEKEYDATA()

 

El primero de estos, WriteAppData se utiliza en varios de los ejemplos para guardar los datos del usuario, pero el segundo WriteKeyData solo es utilizado internamente por el componente.

writedata01


El método WriteAppData() toma los datos de registración de la aplicación desde las propiedades del componente AVLock SIMPLE y los escribe en el fichero de datos *.avr en el disco local.

 

El método WriteKeyData() toma como parámetro la clave de registración correspondiente a un módulo y la escribe junto a otros datos del componente en el fichero de datos .avr en el disco local.

 

Para mayor información vea arriba los apartados 1.LA APLICACION Y EL COMPONENTE y 2. LOS DATOS  DE REGISTRACION.

 

LOS METODOS READAPPDATA() y GETKEYDATA()

 

El primero ReadAppData() solo se utiliza internamente por el componente, pero el segundo, GetKeyData() es utilizado en todos los ejemplos.

readdata01

 

 

 

.

El método ReadAppData() lee los datos de registración de la aplicación desde el fichero de datos .avr en el disco local y los asigna a las propiedades del componente AVLock SIMPLE.

 

 

El método GetKeyData() lee los datos de registración de una clave contenidos en el fichero .avr del disco local y los asigna a una variable tipo TKeyData que consiste en un registro (record) cuyos campos se llenan con la información obtenida.

 

 

Veamos con mayor detalle estos campos. En el ejemplo consultamos sobre la clave de índice 0.

 

getkeydata01

 

 

Con AVLock SIMPLE podemos manejar hasta 254 claves distintas para la misma aplicación, aunque difícilmente lleguemos a necesitar tantas. Para empezar con una sola podemos controlar la aplicación iniciando un periodo de prueba (Trial) cuando ésta se ejecuta por primera vez y después cada vez que se inicia el programa utilizar GetKeyData() para consultar los datos de la clave y mostrar el mensaje adecuado y permitir que el usuario siga utilizando el programa o bloquearlo si el tiempo de uso ha expirado o se haya atrasado la fecha del sistema o la cantidad de instancias concurrentes haya superado el máximo permitido.

 

El campo Values puede ser muy util para simplificar la utilización de AVLock permitiendo controlar con una sola clave la aplicación principal y activar/desactivar varias opciones y funcionalidades en su aplicación. Puede ver como hacerlo en varios de los ejemplos. Ahora con esta nueva característica solo en raras ocasiones necesitará utilizar más de una clave en su aplicación.

 

En los ejemplos mencionados podrá ver estos datos con mayor detalle mediante el botón [Show Registration Data].

 

demo1_02


 

Aquí podemos ver los datos extraídos de la clave de registración, mediante el método GetKeyData() donde se pasa como parámetro de entrada el número de clave (Index) y como parámetro de salida una variable registro del tipo TKeyData que recibe los campos que se ven a la izquierda.

 

AVLock.GetKeyData(0,keydata);

 

Además de los campos ya descriptos anteriormente se obtienen otros valores relacionados, a saber:

 

Status: El estado de registración actual de la clave. Puede ser:

1) Unregistered: Significa que no existe ninguna clave registrada para este Index.

2) Moved: La clave correspondiente al Index dado fue marcado para ser movido a otro computador (no funcional).

3) Expired: Ha terminado el tiempo autorizado de la clave Trial o Temporal referenciada.

4) Registered: La clave está registrado y es funcional.

 

EndDate: Fecha en la que termina el periodo autorizado para claves Trial o Temporal.

 

Primary: Es True cuando se trata de una registración primaria. La primer registración que se hace para una clave en el OLM es la registración primaria, las siguientes que se hacen hasta completar el número de usuarios autorizados son secundarias.

 

DateBacked: Toma el mismo valor que la propiedad del mismo nombre. Es True si la fecha del sistema fue retrocedida a un punto anterior a la última vez que se ejecutó la aplicación. Ante esta situación Ud. debería suspender la ejecución del programa o ejecutar el método OnlineCheckDate() que compara la fecha del sistema con la obtenida desde Internet.

 

TooManyInstances: Es True cuando la cantidad de instancias de la aplicación superó el máximo de instancias establecido en el campo  Instances. Ante esta situación Ud. debería suspender la ejecución del programa.

 

Key: La clave de registración correspondiente al Index pasado como parámetro en el método GetKeyData().

 

Primary ICode:  Checksum del InstallCode de la registración primaria. Solo tiene sentido para registraciones secundarias.

Primary Installcode:  InstallCode de la registración primaria. Solo tiene sentido para registraciones secundarias. Este código y el del  punto anterior se guardan junto a la clave registrada para a fin de validar la registración comparandolo con el valor ICode (checksum) incluido en la clave. Vea en la figura de abajo en mayor detalle como se conforman los datos de una registración secundaria:

 

 

 

QUE ES UNA CLAVE GENERICA?

Normalmente una clave solo sirve para registrar la aplicación en el computador destino en el que el InstallCode coincide con el que introdujimos para calcular la clave, pero si se marca la casilla de chequeo "Generic Key" se generará una clave genérica que servirá para registrar la aplicación en cualquier computador, pero está limitado a la versión, si ésta se cambia, la clave ya no funcionará. Este tipo de clave puede ser útil cuando se necesita registrar usuarios en forma masiva pero en la generalidad de los casos no es recomendable por el riesgo que implica.

 

He tratado de que esta ayuda sea lo más clara y completa posible, sin embargo es posible que hayan quedado aspectos sin considerar. Si Ud. nota que falta algo o ha encontrado errores o tiene alguna idea que podría ser útil para mejorar esta ayuda, por favor hágamelo saber.

 

 


  Alcides Valega

Autor de AVLock SIMPLE