Darakan
Activex : Que es y como protegerlo

NOTAS SOBRE ACTIVEX
 

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:
TipoCaracterísticasExtensión
InProcessSe 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
OutProcessSe 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
ControlSu 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

  • Tercero, Si todo lo demás falla,mandarme un Email
    Alfonso Orozco- Diciembre 1998
    ICQ 41907900
  • Derechos Reservados 1998 - 2007
    Sitio Alojado en Hostchess.com