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

Propiedades

Top  Previous  Next

Todas las propiedades en AVLock SIMPLE v5.x son del tipo PUBLICAS (de tiempo de ejecución). No posee propiedades de tiempo de diseño.

 

Items

Propiedades de configuración

Propiedades relativas al InstallCode

Propiedades para datos del usuario

Propiedades de estado

Valores por defecto

 

 

PROPIEDADES DE CONFIGURACION

 

   property AppID: word read FAppID write FAppID;

   property AppName: string read FAppName write FAppName;

   property AppVersion: string read FAppVersion write FAppVersion;

   property EncryptionKey: AnsiString read FEncryptionKey write FEncryptionKey;

   property EncryptionKey2: AnsiString read FEncryptionKey2 write FEncryptionKey2;

   property InstancesCtrl: Boolean read FInstancesCtrl write FInstancesCtrl;

   property OlmPath: string read FOlmPath write FOlmPath;

   property OlmAdvScript: string read FOlmAdvScript write FOlmAdvScript;

   property OlmBasicScript: string read FOlmBasicScript write FOlmBasicScript;

   property RegFilePath: string read FRegFilePath write FRegFilePath;

   property RegFolder: string read FRegFolder write FRegFolder;

   property RegPath: TRegPath read FRegPath write FRegPath;

   property TimeHost: string read FTimeHost write FTimeHost;

   property WebHost: string read FWebHost write FWebHost;

 

   var

      InternetPort: word = Internet_DEFAULT_HTTP_PORT;

      InternetFlag: dword = Internet_FLAG_RELOAD;

 

AppID: tipo word. Valor numérico utilizado para identificar la aplicación. El valor por defecto es 12345 pero Ud. debe cambiarlo, ingresando uno distinto para cada aplicación. Si Ud. tiene dos aplicaciones utilizando el mismo AppID, ambas intentarán guardar los datos de registración en el mismo lugar provocando la consiguiente perdida de estos datos. En base a este número se calcula el nombre de los ficheros *.avr y *.avc, el primero *.avr para guardar los datos de registración (el DataFile) y el fichero *.avc que maneja el número de instancias permitidas para la aplicación. El AppID junto con el AppName son utilizados como valores clave para acceder a los datos de registración en la base de datos remota a través del panel de control del Online License Manager (OLM). La seguridad está basada principalmente en este número por lo que deberá mantenerlo en secreto como si fuera una contraseña.

AppName: tipo string. Nombre que Ud. le asigna a la aplicación, debe ser distinto para  cada aplicación y es utilizado junto con el AppID para acceder a los datos de registración en la base de datos remota del Online License Manager (OLM).

AppVersion: tipo string. Versión de la aplicación.

 

EncryptionKey: Valor string usado como clave del algoritmo de encriptación con el que se encriptan los datos de registración. Este valor no debe ser publicado y en lo posible mantenido en secreto.

 

EncryptionKey2: Valor string usado como clave de encriptación para la transferencia de información con el OLM permitiendo así una comunicación segura con el sitio web. Esta misma clave también debe asignarse en el script genkeys3lib.php que forma parte del OLM, por omisión esta clave es 'xyz321' pero es conveniente que la cambie poniendo el mismo código en ambos lugares, en esta propiedad del componente y en el script php. Igual que en el caso anterior no divulgue este código.

 

InstancesCtrl: tipo Boolean. Debe ser True si Ud. desea limitar la cantidad de instancias simultaneas de la aplicación. Al crear una clave de registración con la utilidad KeyGen o RegMonitor o desde el OLM Ud. establece la cantidad de instancias permitidas.

OLMPath: tipo string  (Default '/olm5'). Permite especificar el path dentro de su servidor web donde tiene instalado el OLM.

OLMAdvScript: tipo string  (Default 'advancedolm.php'). Permite especificar el nombre de fichero del script dentro del OLM para manejar las funcionalidades avanzadas a través de los siguientes métodos: OnlineRegisterKey(), OnlineStartTrial(), OnlineExtendTrial(),  OnlineGetKeyA(), OnlineMovePrimary1(), OnlineMovePrimary2(), OnlineMoveSecondary1(), OnlineMoveSecondary2(), OnlineRestorePrimary(), OnlineRestoreSecondary(), OnlineSynch(), OnlineRenew(), OnLineStartSecondary(), OnlineRemoveReg(), OnlineGetRegData(), OnlineSaveUserData(), Synchronize().

OLMBasicScript: tipo string  (Default 'basicolm.php'). Permite especificar el nombre de fichero del script dentro del OLM que maneja la funcionalidad básica asociada con el método OnlineGetKeyB().

RegFilePath : tipo string. El valor preestablecido es un string vacío '', esto da por resultado que el fichero que contiene los datos  de registración se ubique en la misma carpeta del fichero ejecutable de la aplicación. En Windows Vista las carpetas que estén bajo Archivos de programa no son escribibles, así que si Ud. desea que su aplicación sea compatible con Windows Vista deberá asignar un valor a ésta propiedad. Windows tiene preestablecidas ciertas carpetas especiales donde el usuario puede guardar información, y puede  utilizar la función SHGetSpecialFolderPath() para obtener la ubicación de estas carpetas para la versión corriente de Windows.

 

Abajo la función GetSpecialFolder() muestra como implementarlo.

 

function GetSpecialFolder(const CSIDL : integer) : string;

var RecPath : PAnsiChar;

begin

 RecPath := StrAlloc(MAX_PATH);

 try

   FillChar(RecPath^,MAX_PATH,0);

   if SHGetSpecialFolderPath(0,RecPath,CSIDL,false) then begin

     result := RecPath;

   end else result := '';

 finally

   StrDispose(RecPath);

 end;

end;

 

 

Por ejemplo utilice:  

    str := GetSpecialFolder(35);

 

Para Windows XP obtendría los siguientes resultados:

 

ROAMING_APPDATA = 26   C:\Documents and Settings\<current user>\Application Data

LOCAL_APPDATA     = 28   C:\Documents and Settings\<current user>\Local Settings\Application Data

COMMON_APPDATA = 35   C:\Documents and Settings\All Users\Application Data

 

RegFolder: (default: 'avlocks3') Aquí debe entrar el nombre para la carpeta donde se guardarán los archivos de datos de registración (*.avr  y *.avc). De esta manera la propiedad RegFilePath2 (el path finalmente aplicado) será asignado internamente de la siguiente manera:

  RegFilePath2 :=  RegFilePath + '\' + RegFolder;

RegPath (Default: CommonDocuments): Permite asignar una carpeta especial "Special Folder" de Windows seleccionando un valor de una lista de valores estándar (CommonDocuments, ProgramData, RoamingAppData, ExeDir, LocalAppData, Other), de esta manera la propiedad RegFilePath es asignada automáticamente con la carpeta especial apropiada para el valor elegido y la versión corriente de Windows:

 

 TRegPath = (CommonDocuments, ProgramData, RoamingAppData, LocalAppData, ExeDir, Other);

 

CommonDocuments:

XP:     C:\Documents and Settings\All Users\Documents

Vista:  C:\Users\Public\Documents

 

ProgramData:

XP:     C:\Documents and Settings\All Users\Application Data

Vista:  C:\ProgramData

 

RoamingAppData:

XP:     C:\Documents and Settings\<username>\Application Data

Vista:  C:\Users\<username>\AppData\Roaming

 

LocalAppData

XP:     C:\Documents and Settings\<username>\Local Settings\Application Data

Vista:  C:\Users\<username>\AppData\Local

 

ExeDir: Si elige esta opción la carpeta asignada será la misma donde se encuentre el ejecutable de su aplicación.

 

Other: Si Ud. elige esta opción también deberá proveer el valor que desea asignar a la propiedad RegFilePath al arrancar su aplicación y antes de utilizar alguna función del componente, por ejemplo dentro del fichero .dpr como se puede ver a continuación:

 

function GetSpecialFolder(const CSIDL : integer) : string;

var RecPath : PAnsiChar;

begin

 RecPath := StrAlloc(MAX_PATH);

 try

   FillChar(RecPath^,MAX_PATH,0);

   if SHGetSpecialFolderPath(0,RecPath,CSIDL,false) then begin

     result := RecPath;

   end else result := '';

 finally

   StrDispose(RecPath);

 end;

end;

 

begin

 Application.Initialize;

 Application.CreateForm(TMainForm, MainForm);

 with MainForm do

 Begin

   avlocks31.EncryptionKey := 'abc123';

   avlocks31.EncryptionKey2 := 'xyz321';

   avlocks31.AppID := 12343;  

   avlocks31.RegFilePath := GetSpecialFolder(12); //CSIDL_MYDOCUMENTS = 12 = 0x000c

 end;

 . . .

end;

 

 

TimeHost: tipo AnsiString. url del servidor de tiempo que permite manejar en línea la fecha y hora actuales. Valor por defecto: 'time-a.nist.gov'

WebHost: tipo AnsiString. El nombre de host del servidor a fin de acceder al Online License Manager consistente en un conjunto de scripts php a fin de manejar el ciclo completo de licenciamiento a saber, iniciar el periodo de prueba, extenderlo opcionalmente, comprar la aplicación y activarla y finalmente moverla a otro computador si fuera necesario. Por defecto esta propiedad viene con el valor 'www.valega.com'.

InternetPort : tipo word. Definida como variable (no propiedad). Es usado como parámetro al llamar la función InternetConnect(). se debe utilizar una de las constantes predefinidas en la unidad WinInet.pas. El valor preestablecido es Internet_DEFAULT_HTTP_PORT que es el correcto si utiliza un sitio no seguro, pero si necesita acceder a un sitio seguro (HTTPS) utilice Internet_DEFAULT_HTTPS_PORT. Por ejemplo:

  InternetPort := Internet_DEFAULT_HTTPS_PORT;

Para utilizarse debe añadir Wininet a la cláusula uses.

 

InternetFlag : tipo dword. Definida como variable (no propiedad). Es usado como parámetro al llamar la función HttpOpenRequest(). se debe utilizar una de las constantes predefinidas en la unidad WinInet.pas. El valor preestablecido es Internet_FLAG_RELOAD que es el correcto si utiliza un sitio no seguro, pero si necesita acceder a un sitio seguro (HTTPS) utilice una de las dos opciones siguientes:

 

   //Opción 1

   avlocks31.InternetFlag := Internet_FLAG_SECURE;

 

   //Opción 2

   avlocks31.InternetFlag := Internet_FLAG_SECURE

                    or Internet_FLAG_IGNORE_CERT_CN_INVALID

                    or Internet_FLAG_IGNORE_CERT_DATE_INVALID;

 

Para utilizarse debe añadir Wininet a la cláusula uses.

 

PROPIEDADES RELATIVAS AL INSTALLCODE

 

   property InstallCode: string read FInstallCode write FInstallCode;

   property icode: string read FICode write FICode;

   property InstallCodeSources: TInstallCodesources read FInstallCodeSources write FInstallCodeSources;

   property MachineSources: TMachineSources read FMachineSources write FMachineSources;

   property UserSources: TUserSources read FUserSources write FUserSources;

 

Installcode (tipo string): La propiedad InstallCode se utiliza para guardar un codigo 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: 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 solo 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.

 

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:

 

InstallCodeSources := Machine_Data;

MachineSources := [System_UUID, BaseBoard_SN];

 

Para el grupo USER DATA:

 

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 solo 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];

 

ICode (Checksum): tipo string. Toma un valor numérico hexadecimal de 4 digitos obtenido en base a la suma de todos los otros campos,  se utiliza como un InstallCode corto, es el valor que se incluye en las claves que corresponde a la propiedad ICode. Vea más información en Método GetIcode.

 

InstallCodeSources: tipo enumeración definido de la siguiente manera:

 

 TInstallCodesources = (Machine_Data, User_Data, Removable_Disk);

 

 el grupo de fuentes para definir la generación del InstallCode. Vea más detalles en la Propiedad InstallCode.

 

MachineSources: tipo set definido de la siguiente manera:

 

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

 

Permite definir las fuentes del grupo Machine_Data que serán utilizadas. Vea más detalles en la Propiedad InstallCode.

 

UserSources: tipo set definido de la siguiente manera:

 

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

 

Permite definir las fuentes del grupo User_Data que serán utilizadas. Vea más detalles en la Propiedad InstallCode.

 

PROPIEDADES DE DATOS DEL USUARIO

 

   property UserName: string read FUserName write FUserName;

   property company: string read FCompany write FCompany;

   property email: string read FEmail write FEmail;

   property OtherCode: string read FOtherCode write FOtherCode;

 

UserName: tipo string. Retiene el valor del nombre del usuario. Es guardado con los datos de registración junto a otros datos de la aplicación (Company, Email, etc.).

 

Company: tipo string. Retiene el valor de la empresa (Compañía) del usuario. Es guardado con los datos de registración junto a otros datos de la aplicación.

 

Email: tipo string. Retiene la dirección de correo electrónico del usuario. Es guardado con los datos de registración junto a otros datos de la aplicación.

 

OtherCode: tipo string. Campo adicional de datos del usuario. Puede utilizarse por ejemplo para el número de identificacion personal, domicilio, etc.

 

PROPIEDADES DE ESTADO

 

   property DateWarning: Boolean read FDateWarning write FDateWarning;

   property DateBacked: Boolean read FDateBacked write FDateBacked;

   property FirstTime: Boolean read FFirstTime write FFirstTime;

   property IsGuest: Boolean read FIsGuest write FIsGuest;

   property LastDate: TDate read FLastDate write FLastDate;

   property LastError: word read FLastError write FLastError;

   property Started: Boolean read FStarted write FStarted;

 

DateWarning: tipo Boolean. Toma el valor True si la diferencia de fechas entre LastDate y la fecha actual del computador es mayor de uno. También es True si  DateBacked es True.

 

DateBacked: tipo Boolean. Toma el valor True si el usuario atrasó la fecha del computador después de haber ejecutado la aplicación con una fecha posterior a la que tiene actualmente el computador. Es calculada comparando la fecha actual del computador con el valor de la propiedad LastDate que contiene la mayor fecha alcanzada alguna vez por la aplicación.

 

FirstTime: tipo boolean, toma el valor True cuando es la primera vez que la aplicación se está ejecutando en el computador.

 

IsGuest: Propiedad booleana que toma el valor True cuando el usuario es un visitante "Guest". Utilizada internamente para omitir ciertas funcionalidades para este tipo de usuarios. Cuando el componente detecta un usuario visitante este opera de diferente manera que al tratarse de usuarios normales, el InstallCode no se calcula sino que es recuperado de los datos de registración guardados con anterioridad y se deniegan las operaciones de escritura y accesos al OLM.

 

LastDate: tipo date (fecha). El componente guarda el valor de esta propiedad en los datos de registración y es asignada con la fecha más alta en la que el ordenador haya estado alguna vez. Cuando el programa llama al método GetKeyData(), la fecha actual del sistema es comparada con el LastDate guardado en los datos de registración, si la fecha actual es mayor que LastDate, este es actualizado con el valor de la fecha actual, en caso contrario si la fecha actual es menor que LastDate las propiedades DateBacked y DateWarning son hechas igual a True. Para reestablecer este valor a False debe ejecutar el método OnlineCheckDate() que verifica la fecha del computador a través de Internet.

 

Solo se puede lograr removiendo los datos de registración con el método EraseReg() o borrando el fichero *.avr si solo está usando DataFile o utilizando el botón [Unregister App] de la utilidad RegMonitor.

 

LastError : type word: Retorna el código de error para la última operación y puede tomar los siguientes valores:

0: No error

1: Un usuario Visitante está corriendo una aplicación no inicializada

2: Operación no disponible para usuarios Visitantes

 

Ud. no necesita preocuparse por el valor que tome esta propiedad ya que internamente se toma la acción apropiada.

 

Started: tipo boolean, toma el valor true cuando ya se ha ejecutado el método start() que establece los valores iniciales de las propiedades del componente en tiempo de ejecución.

 

 

Valores por defecto de las propiedades

 

El componente inicializa sus propiedades con los siguientes valores:

 

Propiedades

Valores por omision

Detalle

InstallCodeSources

Machine_Data

Las opciones son: MachineData, User_Data and Removable_Disk

MachineSources

[System_UUID, BaseBoard_SN, Reg_File]

Las opciones son: [System_UUID, BaseBoard_SN, Reg_File, HD_PNPDeviceID, HD_SN, HD_Signature]

UserSources

[User_Name, User_Company, Email_Address];

Las opciones son: [User_Name, User_Company, Email_Address, Other_Source].

EncryptionKey

'abc123'

Clave de encriptación usada para las claves y demás datos de registración.

EncryptionKey2

'xyz321'

Clave de encriptación usada para encriptar los datos que se envían y reciben del sitio web.

AppID

12345

número identificador de la aplicación.

RemovableDisk

False

Hacer True para aplicaciones portables.

AppName

'MyApp'

Nombre de la aplicación.

AppVersion

'1.0.0'

Versión de la aplicación.

WebHost

'www.av-soft.com'

url del sitio web donde se instaló el OLM.

TimeHost

'time-a.nist.gov'

url del servidor de tiempo que permite manejar en linea la fecha y hora actuales.

InstancesCtrl

False

Si es True se controla el número de instancias ejecutadas simultáneamente.

RegPath

CommonDocuments

Ubicación dentro del disco local donde se guardan los datos de registración. Asigne (RegPath=Other) para poder especificar su propia ubicación.

RegFolder

'example1'

Nombre de la carpeta donde se guardarán los datos de registración. Asigne (RegPath=Other) y (RegFolder='') para que los datos de registración y de control de instancias se guarden en la carpeta de la aplicación. Esto es necesario para controlar las instancias dentro de una red. Vea el ejemplo 1.

OlmPath

'/olm5'

Ubicación dentro del hosting donde se instaló el OLM.

OlmBasicScript

'basicolm.php'

Nombre del script administrador de claves del OLM básico.

OlmAdvScript

'advancedolm.php'

Nombre del script administrador de claves del OLM avanzado.







Antes de utilizar el componente se deben asignar las propiedades de acuerdo a su propia configuración. Solo necesitará asignar aquellas que sean distintas a las que vienen asignadas por defecto, al menos debería asignar con valores distintos las siguientes propiedades: EncryptionKey, EncryptionKey2 y AppID, y si tiene instalado el OLM en su propio servidor también las propiedades WebHost, y OlmPath.

 

 

He tratado de hacer esta ayuda tan clara y completa como sea posible, sin embargo, puede haber algunas cuestiones no consideradas en esta documentación. Si le parece que he omitido algo, o encontró 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