ACTIVEX: Qué es y como protegerlo
Qué es un ACTIVEX?
A grandes rasgos, Activex es una tecnología de desarrollo creada por Microsoft, la cual consiste en guardar el código binario en un formato tal que programas ajenos al creador del mismo puedan reconocer, permitiendo llamar con una interfase similar la misma función desde dos entornos diferentes: EJEMPLO ; Una rutina Activex desarrollada
en Visual Basic puede usarse desde FOXPRO, o una rutina creada en DELPHI puede llamarse desde VB.
El principal beneficio de Activex es encapsular de una manera efectiva, procesos, objetos, o clases, creando un modo simple de reutilizar los conocimientos de otros lenguajes, de manera transparente al usuario.
ACTIVEX es el nombre genérico que se le da a cualquier componente de Software que cumple con estos parámetros. Puede encontrase mayor información en el Sitio de Microsoft.
El logotipo por el que se reconoce activex es el siguiente:
Desde el punto de vista de un programador tradicional en TP, Activex es una unidad reutilizable en otros lenguajes, misma que mantiene su parte de IMPLEMENTATION e INTERFACE.
Para un programador de C++, ACTIVEX es el nombre de un nuevo tipo de clase que soporta encapsulamiento, funciones de tipo friend o public, metodos constructores de objetos, así como llamadas a punteros (de manera relativa)
Un programador avezado de Clipper, puede ver en ACTIVEX un nuevo nombre para el puente que permite enlazar C, MASM, TASM a un manejador de bases de datos, sólo que ACTIVEX no requiere ajustar el código a cláusulas CLIPPER FUNCTION o llamadas a RETL y similares.
En resumen, si un código compila con un lenguaje ACTIVEX, puede enlazarse con cualquier otro lenguaje que permita integrar objetos ACTIVEX
Qué es un objeto ACTIVEX??
Un objeto ACTIVEX es un archivo, que tiene una interfase determinada que puede obtenerse por procedimientos standard.
Suele ser de tres tipos:
| Tipo | Características | Extensión |
| InProcess | Se ejecutan dentro del área de proceso del programa que los llama. Por su naturaleza y extensión, son los más faciles de ocultar. | *.DLL |
| OutProcess | Se ejecutan en un área diferente de memoria, y suelen tener una finalidad en si mismos. Ejemplo, WORD y EXCEL versiones Office 97. Por su naturaleza, son los primeros que busca un usuario promedio | *.EXE |
| Control | Su finalidad solo es aparente a un programador, y son procesos que no pueden ejecutarse a menos que se incluyan en un programa que instruya sobre las formas de proceso. Son los más faciles de copiar, porque rara vez requieren instalación | *.OCX |
Como sé cual es el mejor tipo para usar en mis programas?
Esta es una pregunta difícil de responder. Los controles *.OCX suelen ser mas fáciles de utilizar que los *.DLL o *.EXE, pero si se quiere una rutina que no se localice facilmente por fuerzas externas, es mejor un *.DLL. Si cotidianamente se usa un programa ya establecido en el público blanco, suele ser mejor volver ACTIVEX un programa normal.
Para situaciones standard, sugiero usar controles *.OCX porque evitan tener que crear clases innecesarias y/o confusas.
Que incovenientes tiene usar ACTIVEX?
Por facilidad de uso para el usuario o programador, ninguno. Excepto que un programador experimentado puede facilmente usar un programa hecho por otros, aunque esa no haya sido la intención del programador original.
Como evitar que otro programador use mi código
La manera mas sencilla es usando una propiedad o variable de control.
Supongamos que nuestra variable de control se llama "KEY". Esta es una menera de implementarla en VB:
'Codigo EN VB 5.0
'Dentro de un objeto ACTIVEX creamos una variable llamada KEY, y en
'el proceso en que se asigna su valor, proceso LET, cambiamos una
'variable local, PRIVATE KEYVALUE as boolean, a verdadero si el valor es
'igual a otro predefinido, ejemplo:
'CODIGO DENTRO DE ACTIVEX
private keyvalue as boolean
' el valor predefinido es false
Public Property Let KEY(ByVal New_key As String)
keyvalue = (New_key="VALOR PREDEFINIDO")
PropertyChanged "key"
End Property
Public Function FuncProtected(valor1 as integer, valor2 as integer) as integer
if keyvalue=true then
funcprotected=valor1 * valor2
else
msgbox "ERROR: Objeto ACTIVEX presente en proyecto no autorizado"
end
endif
end function
'CODIGO DENTRO DE FORM1, con un command button y el control anterior
private sub command1_Click()
with mycontrol
.Key="VALOR PREDEFINIDO"
msgbox call (.funcprotected(2,2)) ' regresará 4
end with
end sub
Obviamente "valor predefinido" es un valor muy obvio, puede ser un número o una cadena encriptada. El objetivo es que sin esa cadena, el control sea inútil. Debemos recordar que un programador con experiencia buscará con un editor Hexadecimal, por lo que la contraseña preferentemente no debe de estar en texto plano, o no debe reconocerse como tal.
Otra manera es haciendo que el sistema no funcione si no se da una condición, ejemplo:
'CODIGO DENTRO DE ACTIVEX
private function keyvalue as boolean
keyvalue=direxist("F:\APPS\NOMINA")
End function
Public Function FuncProtected(valor1 as integer, valor2 as integer) as integer
if keyvalue =true then ' si existe el directorio "F:\APPS\NOMINA"
funcprotected=valor1 * valor2
else
msgbox "ERROR: Objeto ACTIVEX presente en proyecto no autorizado"
end
endif
end function
Obviamente si se quiere usar en un lugar que no tengan esa ruta, el sistema no funcionará. Y si se quiere vender o licenciar un control ACTIVEX?
Primero, echarle un ojo a la página sobre seguridad
Segundo, decidir donde guardar la cifra
Alfonso Orozco- Diciembre 1998 ICQ 41907900
|