Permite hacer multiples backups del programa protegido que corren solo en la computadora donde se registro el ejecutable. El usuario no tiene que pedir otra clave si reformate su disco rigido y reinstala el programa protegido !!! Nuevo ejemplo que demuestra el uso de niveles de seguridad. Nuevo!! Versiones incluidas para Delphi 3, Delphi 4 and Delphi 5 en este paquete, con instrucciones de instalación verdaderamente simples. Documentación completa en dos lenguajes: Inglés y Castellano. Compre en linea utilizando un formulario privado y seguro !! |
Que requiero para instalar el componente ?
Sistema operativo Windows 95 o Windows 98 instalado.
4 Mb de espacio disponible en el disco rígido.
Delphi 3 o Delphi 4 o Delphi 5 instalado..
Como instalar el componente ?
1) Descomprimir el paquete de instalación (Prot4Dph.zip) a algun
directorio,
por ejemplo a C:\Protect4Delphi\
2) Instalar el componente en la paleta.
Delphi 3:
Desde Delphi IDE,
menu -> Components -> Install Packages ->
'Add'
abrir \Bin\Delphi3\Protect4DelphiV30Demo.dpl
(o bien \Bin\Delphi3\Protect4DelphiV30Full.dpl)
El componente deberia ir a la paleta de componentes.
Delphi 4:
Desde Delphi IDE,
menu -> Components -> Install Packages ->
'Add'
abrir \Bin\Delphi4\Protect4DelphiV40Demo.bpl
(o bien \Bin\Delphi4\Protect4DelphiV40Full.bpl)
El componente deberia ir a la paleta de componentes.
Delphi 5:
Desde Delphi IDE,
menu -> Components -> Install Packages ->
'Add'
abrir \Bin\Delphi5\Protect4DelphiV50Demo.bpl
(o bien \Bin\Delphi5\Protect4DelphiV50Full.bpl)
El componente deberia ir a la paleta de componentes.
3) Agregar el path de instalacion al "Library Path" de Delphi.
Delphi 3:
Desde Delphi IDE ir a: Tools->Environment
options->Library.
Agregar a mano el directorio de instalacion
al path. Presionar el boton 'OK'.
Delphi 4 & Delphi 5:
Desde Delphi IDE hacer: Tools->Environment
options->Library.
Presionar el boton marcado con (...) del item
"Library Path:"
Escribir el path completo de instalacion y
presionar el boton 'Add'.
Contenido del paquete de instalación:
\Bin
KeyGenerator.exe
(Generador de claves)
\Bin\Delphi3
Protect4DelphiV30Demo.dpk
Protect4DelphiV30Demo.dpl
Protect4DelphiV30Demo.dcp
Protect4DelphiV30Demo.dcu
Protect4DelphiV30Demo.res
Protect4DelphiV30Demo.dof
\Bin\Delphi4
Protect4DelphiV40Demo.dpk
Protect4DelphiV40Demo.bpl
Protect4DelphiV40Demo.dcp
Protect4DelphiV40Demo.dcu
Protect4DelphiV40Demo.res
Protect4DelphiV40Demo.dof
\Bin\Delphi5
Protect4DelphiV50Demo.dpk
Protect4DelphiV50Demo.bpl
Protect4DelphiV50Demo.dcp
Protect4DelphiV50Demo.dcu
Protect4DelphiV50Demo.res
Protect4DelphiV50Demo.dof
- all versions include -
UProt4DelphiDefs.dcu
Prot4Delphi2.dcu
Prot4Delphi3.dcu
Prot4Delphi4.dcu
Prot4Delphi5.dcu
Prot4Delphi6.dcu
Prot4Delphi7.dcu
Prot4Delphi8Cipher.dcu
Prot4Delphi8KeySchedule.dcu
Prot4Delphi8SBoxes.dcu
Prot4Delphi8StaticTable.dcu
UProt4Delphi.dcu
UProt4DelphiDefs.dcu
UDefaultRegistration.pas
UDefaultRegistration.dfm
\Doc
Protect for Delphi (English).htm
(Hipertexto. Documentacion, Inglés)
Protect for Delphi (Spanish).htm
(Hipertexto. Documentacion, Español)
\Demos\Standard
Main.pas
Main.dfm
UDefaultRegistration.pas
UDefaultRegistration.dfm
Simple.dpr
Simple.res
\Demos\Custom
Main.pas
Main.dfm
Custom.dpr
Custom.res
MyID0010857.uid
\Demos\UnlockLevels
Main.pas
Main.dfm
Readme.txt
UnlockLevelsDemo.dpr
UnlockLevelsDemo.dof
UnlockLevelsDemo.cfg
UnlockLevelsDemo.res
Como proteger un ejecutable en pocos pasos?
Es muy sencillo, bastan los 3 pasos siguientes :
MiProyecto7345h |
OtroProyectoMio |
AnotherValidAppKey |
UnSoftwarePara247Perez |
agregar en el evento FormCreate:
TRegistrationForm.CheckAndShowIfNotReg(Prot4Delphi1);
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, UProt4Delphi;
type
TForm1 = class(TForm)
Prot4Delphi1: TProt4Delphi;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses UDefaultRegistration;
procedure TForm1.FormCreate(Sender: TObject);
begin
TRegistrationForm.CheckAndShowIfNotReg(Prot4Delphi1);
if not Prot4Delphi1.IsRegistered then Application.Terminate;
end;
end.
Como se distribuye el programa
protegido ?
El cuadro de dialogo tiene el siguiente aspecto:
(El resaltado en colores es solo indicativo.)
Este generador de claves luce así:
(El resaltado en colores es solo indicativo.)
El generador de claves requiere
La clave de registro (letras rojas) es la que debe enviarse al usuario
para validarlo.
Tanto el código de registro como la clave de registro estan
diseñadas para poder enviarse via dictado manual. Ambos 'codigos'
tienen 24 caracteres de largo (letras o simbolos). Esta extensión
permite que puedan enviarse casi de cualquier modo (Fax, e-mail, dictándolas
telefonicamente, etc.)
En cada posición del código puede figurar uno de 42 símbolos
diferentes.
Lo cual da una cantidad de 42^24 claves posibles, es decir un número
tan grande como:
mil millones de millones de millones de millones de millones
de millones
lo cual imposibilita prácticamente cualquier intento de adivinanza.
:)
Si todos los datos son correctos, el desarrollador envia la clave de registro al usuario para validarlo como usuario registrado.
Como debe utilizar el usuario
la clave de registro ?
El recuadro rojo indica donde debe tipear el usuario la clave de
registro que valida el software protegido. El botón marcado
con verde claro es el que sirve para indicar que se aceptan los datos ingresados.
Si la clave de registro se corresponde con el código de registro,
se logra la validación correcta del software, que a partir de ese
momento, se ejecutará normalmente.
Si la clave ingresada es incorrecta, el sistema de protección
mostrará el cuadro de diálogo de registración al iniciar
nuevamente el programa protegido.
Es posible
habilitar diferentes niveles de bloqueo mediante el uso de la sección
"Additional features" del generador de claves. Este puede generar diferentes
claves para cada grupo de opciones soportadas, como fue explicado anteriormente.
El componente exporta la lista de opciones soportadas mediante la propiedad SupportedCapabilities
Esta propiedad puede ser leida por el programa en tiempo de ejecución,
para poder tomar acciones específicas por cada opcion soportada/no
soportada.
He tenido problemas con
las instrucciones.
Donde puedo ver ejemplos
funcionando ?
Los ejemplos (que deberian compilar sin problemas) están en las carpetas:
\Demos\Standard (Directorio de ejemplo standard)
Simple.dpr
(Proyecto standard)
\Demos\Custom (Directorio de ejemplo
más complejo)
Custom.dpr
(Proyecto más complejo)
\Demos\UnlockLevels
UnlockLevelsDemo.dpr (Proyecto que demuestra
el uso de niveles de seguridad)
Para abrirlos: en Delphi hacer (menu) File -> Open -> (ir a la carpeta
donde se ha instalado el componente) -> (seleccionar uno de los directorios
indicados arriba) -> (seleccionar el archivo de proyecto) -> OK u Open.
Compilar y correr con F9
Cual
es el método de pago para obtener Protect for Delphi ?
Se ofrece soporte y futuras
actualizaciones ?
Los métodos de pago disponibles son tarjeta de crédito
o transferencia de dinero.
Existen dos opciones de registro:
1) Versión Full. (componente, generador de claves,
generador de IDs)
Funcionalidad total. Solo es necesaria
la registración del generador de claves y de IDs.
Se obtienen ofertas especiales
a muy bajo costo para futuras actualizaciones.
2) Nuevo !!!
Versión Full con codigo fuente. (componente,
generador de claves, generador de IDs, +Codigo
Fuente !!!)
Funcionalidad total. Incluye código
fuente !!!
Se obtienen dos meses de soporte técnico
gratuito, y actualizaciones gratuitas por un año.
Usted tiene dos opciones para registrar Protect for Delphi:
Via RegNet - The Registration Network usando cualquiera de estos metodos
https://secure.reg.net/product.asp?ID=7257
Regnet #: 7257
On the web - http://www.reg.net
By Phone - 1 800 WWW2REG (1 800 999-2734) or (661) 288-1827
By Fax - 1 (661) 288-1867
Via GetSoftware:
http://www.getsoftware.com/cgi/products.gs?vendor=346
http://www.getsoftware.com/cgi/products.gs?vendor=346
o directamente a la opcion 1)
http://www.getsoftware.com/cgi/verify.gs?cart=1554
http://www.getsoftware.com/cgi/verify.gs?cart=1554
Sección adicional:
>> Usted puede saltear esta parte. La explicacion del
funcionamiento interno provee una pauta de la confiabilidad del sistema,
pero no leer esta sección no debería impedir su uso <<
_ Identificador del primer disco rígido de la computadora
del usuario.
(Unico para cada dispositivo)
_ Fecha de primera ejecución del software en la computadora
del usuario.
(Según el seteo de fecha hora del usuario)
_ Identificador único de copia.
(Numero de copia que fue distribuida al usuario)
Para el usuario ninguna parte de esta información está
disponible ya que el código de registro se encuentra encriptado
con la clave de aplicación, que solo el desarrollador conoce.
Mediante el generador de claves, que es parte del sistema, se pueden
generar todas la Claves de Registro posibles. Por ejemplo, puede generarse
una clave de registro total, con todas las opciones habilitadas y sin fecha
de caducidad. Por supuesto, tambien son posibles claves mas restrictivas,
con un número fijo de dias de caducidad y solo algunas opciones
habilitadas.
El numero máximo de opciones soportadas es 32, pudiendo ser
habilitadas independientemente.
El generador de claves valida el Código de Registro enviado
por el usuario y muestra los datos asociados a él en caso de ser
válido.
Así, por ejemplo, es posible saber qué copia (identificada
con un numero) es la que está corriendo en la computadora del usuario
y generar una clave que habilite solo esa copia. (Para que esta opción
tenga validez, deberá distribuirse previamente con el software protegido
su identificador único de autenticidad. Ver “Generando identificadores
de autenticidad”)
Es posible saber, además, la fecha en que el programa protegido
se ejecutó por primera vez en la maquina del usuario.
Esto permite conocer la cantidad de dias de uso del programa en modo demostración,
en caso de contar con una licencia de esa clase.
Como se indicó anteriormente, el funcionamiento descripto
en la sección rápida es un comportamiento estandard, que
puede modificarse a voluntad.
Para ello hace falta modificar algunas propiedades del componente,
que permiten lograr la maxima flexibilidad de uso.
Para ver un ejemplo de otros comportamientos posibles, abra el proyecto:
\Demos\Custom\Custom.dpr con Delphi.
Se trata de un proyecto que no utiliza el diálogo de registro
estandard.
Métodos
Propiedades
IsRegistered: Puede consultarse en tiempo de ejecución para saber si el software está registrado.
CheckSecurityEachNSeconds: Numero de segundos para un checkeo de seguridad adicional. Si se especifica un numero de segundos mayor a cero, el componente checkea el estado de la registración cada N segundos, donde N es el número seteado.
MessageNotRegistered: Mensaje de software no registrado. Se encuentra encriptado internamente para no permitir su modificación.
MessageRegistered: Mensaje de software registrado. Se encuentra encriptado internamente para no permitir su modificación.
TrialDays: Dias de trial de la versión registrada.
SupportedCapabilities[Number : Integer]: Capacidades adicionales habilitadas por la clave de registro. Permite habilitar gradualmente y a distancia, diversas caracteristicas del software protegido. La clave de registro habilita/deshabilita aquellas caracteristicas que selecciona el desarrollador mediante el generador de claves.
HardExitProgramOnCheckSecurityFailure: Si esta setado a True y falla la seguridad en un chequeo adicional, el programa es abortado abruptamente.
HardExitWindowsOnCheckSecurityFailure: Si esta setado a True
y falla la seguridad en un chequeo adicional, windows es cerrado abruptamente.
(ATENCION!!! Este seteo de seguridad es muy extremo. Cualquier
aplicación abierta al momento del fallo de seguridad se cerrará
sin guardar los datos asociados. En equipos con apagado automatico, Windows
se apagará. UTILIZAR CON PRECAUCION)
UniqueIDShortFilename: Hasta cuatro letras mayúsculas
o números que indican el principio del nombre del archivo con extension
.UID, que identifica univocamente cada copia del programa ejecutable.
Ejemplo de valor correcto: MAPP
ATENCION!: Si se setea un valor no vacío para esta propiedad,
el programa protegido busca un identificador único de autenticidad
con el formato: MYIDNumero.UID en el mismo directorio desde donde corre
el ejecutable.
Si no lo encuentra, el programa ABORTA su ejecución.
Si lo encuentra y el archivo no está corrupto, el número
de identificación de copia se setea al valor que figura encriptado
ese archivo.
UniqueCopyIdentifier: Es el número de identificación
de la copia que se está ejecutando.
Generando identificadores
de autenticidad:
El primer usuario (A) ejecuta el programa en su computadora 1, esto
genera un codigo de registro que llamaremos A1.
Envía el codigo de registro y el pago por la registración
al desarrollador, éste confirma el pago, lo valida como correcto
y le envia la clave de registro ClaveParaA1.
Algo similar sucede con el usuario B:
El usuario B ejecuta el programa en su computadora 1, esto genera un
codigo de registro que llamaremos B1.
Envía el codigo de registro y el pago por la registración
al desarrollador, éste confirma el pago, lo valida como correcto
y le envia la clave de registro ClaveParaB1.
Hasta aqui no ha habido inconvenientes.
El proceso es diferente cuando se distribuyen copias en forma masiva(distribuidor):
El desarrollador envía al distribuidor una cantidad de copias
del programa protegido, para su posterior venta. Para fijar ideas, supongamos
que esta cantidad es de 1000 copias.
Supongamos que el distribuidor ha vendido 500 copias el primer día.
Ese día y los subsiguientes, el desarrollador recibe de los
usuarios compradores los pedidos de registro. Recordemos que cada pedido
de registro tiene un código de registro asociado, por lo que en
principio podrían validarse todos los usuarios sin problemas.
Sin embargo, si algún usuario no es honesto, podría instalar
el programa protegido en muchas computadoras y requerir todas las claves
de registro.
En este punto, si no se utilizan identificadores de autenticidad, el
desarrollador no tiene manera de distinguir si algún usuario está
requiriendo más claves de registro que las que tiene permitidas,
o bien si cada uno de los usuarios requirió su clave.
Por supuesto, el desarrollador sabe el número de copias que
fueron vendidas, pero no puede basar su control en ese único número,
ya que ese número total no dice como fueron repartidas las
claves entre los usuarios.
La situación que se espera obtener es que cada usuario pueda
pedir SU clave de registro y ninguna más. Si el control se hiciera
sobre el numero total de copias vendidas, puede suceder, por ejemplo, lo
siguiente:
La solución: Identificadores
de autenticidad
Si el programa se distribuye con un identificador de autenticidad,
el código de registro contiene la información del número
de copia del ejecutable. Esto permite discernir cual es la copia que se
está registrando.
La situacion problemática que se presentó antes queda
completamente salvada.
Veamos la misma situación anterior: Recordemos que se han distribuido
1000 copias, se han vendido 500 el primer dia.
Este generador requiere:
Una vez que se han ingresado todos estos datos, al oprimir el boton
'Generate Unique ID Files' se comienza la generación de los
identificadores, que son escritos al directorio seleccionado.
El boton stop sirve para detener el procesamiento.
En el ejemplo el intervalo va de 1 a 500, por lo que se generan 500
archivos con estos nombres: MYID1.uid, MYID2.uid, MYID3.uid, ..., MYID500.uid
Se debe distribuir uno de estos archivos con cada copia del programa
protegido.
DISCLAIMER y LEGALES Este software no tiene ninguna garantia de funcionamiento implícita o explicita por parte del autor. El uso de este software es bajo cuenta y riesgo de los usuarios. El siguiente paquete de distribuición puede ser copiado con propósitos de evaluación, mientras no sea modificado en ninguna de sus partes y sea distribuido como un conjunto. Bajo ninguna circunstancia es posible la venta de este software (o cualquiera de sus partes) sin el consentimiento escrito del autor. La presente nota se refiere unicamente a la version de demostración, por favor lea la sección de registro para obtener mas información sobre este punto. El uso de este software implica la aceptación de los puntos anteriores. Reinaldo Yañez Arrey se declara único propietario de los derechos de autor de este software. |
Notas adicionales:
IMPORTANTE: Limitaciones de la versión demo:
1) El paquete de instalación para la versión demo NO incluye el programa generador de identificadores únicos.
2) Los mensajes de 'registrado', 'no registrado' aparecen con el siguiente texto adicional que no puede removerse:
This program was copy protected using a Demo version of Protect for
Delphi
A protection of this kind is NOT ALLOWED for commercial use.
(C)opyright 2000, by Reinaldo Yañez.
e-mail: rya@labs.df.uba.ar, ryaayr@yahoo.com
3) En el entorno de Delphi, al abrir cualquier proyecto que contenga
un componente del tipo TProt4Delphi, aparecerá un mensaje con el
texto:
'Reminder: Prot4Delphi component is NOT registered.'
el mensaje se repite cada 30 segundos.
4) La property CheckSecurityEachNSeconds se ha desconectado.
La seguridad se verifica cada 60 segundos.
5) La property SupportedCapabilities retorna correctamente solo las
2 primeras características (Características Número
0 y Numero 1). Las demás se retornan como NO SOPORTADAS. En el generador
de claves sólo se puede utilizar estas 2 características.
(C)opyright 2000, Reinaldo Yañez Arrey.
Buenos Aires, Argentina.
rya@labs.df.uba.ar
ryaayr@yahoo.com
Acerca del autor:
Actualmente soy estudiante de ciencias fisicas de la UBA. Trabajo
para una empresa de programación que se dedica principalmente al
desarrollo de software de gestión y control. En el trabajo programo
principalmente en Delphi y C. Para mis proyectos, en Delphi, C, C++ y assembler.
Mi direccion fija de e-mail (por el momento :) es rya@labs.df.uba.ar
Con respecto al sistema que presento, hice hace varios años
una version para DOS que directamente encriptaba el codigo del ejecutable
(ya compilado).
Cuando me pasé al extraordinario Delphi (dicho sea de paso)
quedó pendiente el tema de la distribución de mis propios
programas. Ya no me era posible pasarlos sin algun temor. (Me gusta que
se respete el Copyright)
De esa necesidad propia surgió este componente que en el estado
actual es mas que robusto. El unico problema es que no tengo demasiado
tiempo para diseñar el driver para hacerlo funcionar en Windows
NT.
Pido disculpas por la documentación un tanto mal diseñada
(me doy cuenta un poco tarde), pero pronto comienzo a estudiar para los
finales de la facultad y no tengo tiempo de arreglarla. Espero que de todas
formas sea de ayuda.
Para los "especialistas": el componente utiliza encripción segura
de nivel industrial. El paquete de encripción es un block cipher
de 64 bits de datos y 384 bits maximos de clave. Tiene 128 Kbytes de S-BOXES
randomly generated. (Y si, no creo demasiado en las human-made S-BOXES
!!)
(C)opyright 2000, Reinaldo Yañez Arrey.
Buenos Aires, Argentina.
rya@labs.df.uba.ar
ryaayr@yahoo.com