| |
¿Para qué guardar la cifra?
Sencillamente porque si no lo guardamos, no podemos comprobar el equipo.
El objetivo de esta página es bloquear la copia ilegal de programas hechos por uno, pero sin encriptar la información capturada por los usuarios, porque los datos son sagrados =), y porque si se encriptan los datos de usuarios que capturaron usuarios "no autorizados", estamos cayendo en la situación del virus "AIDS", de discos de 5.25, en otras palabras, según las leyes de varios países se estaría haciendo algo ilegal.
Está compuesta por las secciones:
| Sección |
Consiste en |
| Tipos de Software |
Analizar los tipos de software y qué tipo de anticopia suele usarse |
| Problemas de anticopia tradicional |
Analiza los problemas que enfrenta en la actualidad, la anticopia tradicional |
| Requisitos de un sistema anticopia moderno |
Características que se esperan de un sistema anticopia funcional |
| Cuando debe usarse un sistema anticopia |
Situaciones en que puede ser necesario un sistema anticopia |
| Construcción de una cifra de verificación |
Pasos necesarios para crear una cifra que identifique el equipo |
| Sistemas de encriptado |
Revisión sencilla a procesos de encriptado, su fundamento y desventajas |
| Ejemplos: |
Códigos VB5.0 y CLIPPER 5.x de encriptado por valor de referencia |
| Consideraciones |
Consideraciones sobre controles Activex |
| Donde guardar la cifra? |
Problemas sobre el guardado de la cifra |
TIPOS DE SOFTWARE
Antes que nada, debemos dejar claro que la necesidad de un programa anticopia depende del riesgo que tenemos de que ese programa se copie, y de un factor muy sencillo, que tipo de software es:
| TIPOS DE SOFTWARE |
Dominio Público (public domain )
Programas que cualquiera puede usar o modificar |
Normalmente se sacan copias a diestra y siniestra, pero son pocos los que valen la pena y que son reconocibles.
No es necesaria protección anticopia |
Freeware
Programas que cualquiera puede usar, pero no modificar, y que siguen siendo propiedad del autor aunque no cobre.
Ejemplo: Internet Explorer 4.0 |
En algunos casos la licencia se condiciona a tener otro producto (w 95 por ejemplo). No es habitual la protección anticopia |
Shareware
Programas que no deben modificarse , y que suelen tener tiempo de expiración o solamente traen activada una parte de sus funciones
Ejemplo, Winzip
|
Supuestamente debe pagarse una cantidad para usarlo despues del periodo de prueba. Muchos preferimos borrarlos del disco duro.
No es habitual la protección anticopia, pero algunos programas detectan si ya venció el período de prueba, y se niegan a funcionar a pesar de que se reinstalen, volviendo a funcionar hasta que se reinstala Windows, o se recibe la versión completa del fabricante |
Software Comercial
Programas que no deben copiarse excepto un backup, elaborados por compañías medianas o grandes.
Ejemplo Sistemas WinX |
Algunas empresas acostumbran usar
- números de serie ( que por lo general se encuentran buscando "SERIALZ" en internet).
- Protección con disco clave: En desuso, solo funciona si se tiene acceso a la PC,
- "Candados" o dongles, que deben estar conectados por lo general al puerto paralelo
- Activación en Internet
|
Desarrollos internos
Programas hechos en una empresa por una persona a sueldo, para el uso o venta de la misma
Ejemplo: Los programadores de Winzip, o los programas que hace una persona con sueldo en nómina (no por honorarios ). |
Este es un punto delicado: Si no estipula otra cosa el contrato, la empresa es propietaria del código fuente, y si se usa protección anticopia ( para que no se lo lleve la competencia ), debe la empresa poder autorizarlo en todo el hardware que le venga en gana |
Desarrollos Externos
Los programas hechos para una empresa o persona por un empleado externo
Ejemplo, si te contratan para hacer un programa para una pizzeria, para farmacias, etc |
La protección anticopia queda limitada por lo que mencione el contrato, si el contrato no menciona nada, no hay limitaciones. Sin embargo, creo que un programador responsable debe dejar el código necesario para evitar que la empresa pierda su dinero si lo atropellan. Esto protege a la empresa de precios excesivos por cambios, además. |
Si, dije que todo esto es un factor muy sencillo, porque la distribución de ejecutables tradicional, no considera los siguiente:
PROBLEMAS DE ANTICOPIA TRADICIONAL
- Por internet, está en chino hacer protecciones por hardware (candados o dongles)
- Tampoco pueden usarse discos clave en distribuciones por internet
- Un programador experimentado usa librerías o controles ActiveX, que deben poder usarse en otros proyectos, siempre y cuando esté autorizado
- Supongamos que en tu empresa o negocio hay otro programador, el tiene acceso a las máquinas que usan tu programa, pero no quieres que el incorpore esa rutina que tanto te costó. Normalmente solo copia el control y ya, porque en tu maquina esta autorizado.
- El uso de los archivos .LIC, tipo Visual Basic, son relativamente seguros, pero complicados, y cualquier persona con paciencia o capacitación de MicroSoft Training o similares puede quitarla entre diez y treinta minutos, si no se quedó dormido en clase =)
- La protección en disquetes anticopia, tiene el problema que debe escribirse constantemente en el disco (para evitar que saquen copia del disquete clave), y aunque se puede y funciona, es un relajo para mantener el esquema aunque tengas tu código documentado.
- La protección que se guarda en sectores dañados de disquetes, está condenada a desaparecer, porque los supercopiadores se siguen distribuyendo.
- Las protecciones por Checksum (suma del equipo) por lo general dan el mismo valor en dos máquinas si estas son iguales, lo que no debería ser.
- Una persona puede copiar fácilmente un CD ROM, o copiar el CD a un disco duro con FAKECD u otro emulador, o peor aun, puede llegar a ser muy popular el archivo que desprotege el programa para que solo funcione en CD (Por ejemplo, el mejor juego de todos DIABLO y HELLFIRE)
- La copia del registro de windows es bastante fácil, entonces esto es un inconveniente para las protecciones en el registro.
Por todo lo anterior, llegamos a la conclusión de los siguientes:
REQUISITOS DE UN SISTEMA ANTICOPIA MODERNO
- No depender de hardware
- Poder enviar por mail actualizaciones o claves.
- Detectar si el equipo ha sufrido cambios ( ej , actualización de disco duro ) y bloquearse hasta que se vuelva a a autorizar ( En México RAMSAL era un ejemplo )
- No depender de discos clave ( ni siquiera CD )
- Que no funcione en dos máquinas iguales solo copiando la instalación de una en otra.
- No debe funcionar si alguien copia de una máquina a otra el registro de Windows
- Si es una librería o Control ActiveX, no debe depender de un archivo *.lic, porque la protección puede removerse relativamente fácil.
- Si es librería o ACTIVEX, debemos evitar que funcione en programas ajenos, preferentemente debe bloquearse en desarrollo ( mientras el copiador programa ), y seguramente no debe funcionar para nada si lo incluyen.
- El programa "enemigo" que usa nuestra librería o Activex, no debe funcionar en una máquina que tenga autorización para usar ese control de manera legítima.
- No debe borrar información, y en algunos paises no debe ni autodestruirse ( ejemplo, PIM Time & Chaos )
- La clave que proporcionemos debe ser válida para una sola fecha o rango de fechas ( si pasamos una clave para equis maquina, la misma clave no debe funcionar mañana, o despues de una semana si lo distribuimos por internet)
Resumiendo:
CUANDO DEBE USARSE UN SISTEMA ANTICOPIA
Debes proteger un software solo si tienes el derecho legal para hacerlo, y quieres evitar uno o mas de los siguientes casos:
- Otro programador de la empresa quiere usar software que tu hiciste
- El señor de la farmacia quiere ponerle su programa también a la otra sucursal, pero sin pagarte.
- Quieres evitar que el programa funcione incluso si se roban la computadora ( horror de horrores!!!! )
- Quieres evitar que alguien copie un programa del trabajo para usarlo en su casa o en la competencia.
- Que alguien vea información confidencial (que se autoencripte, pero solo debes hacerlo si tienes un respaldo de los datos)
- Quieres estar enterado de en cuantas máquinas esta tu programa (ejemplo, lo autorizas en una empresa de una sola máquina, y cuando regresas ya tienen 5 PC con tu programa=( )
- Llevar control de cambios no autorizados de Pc (Que alguien le meta sus uñitas y desaparezca memoria, o que envien la Pc a la farmacia del yerno)
- Cuando tienes un programa comercial que no deseas que se copie ( es común mandar una dirección o teléfono para activación)
- Si necesitas que el programa reaccione diferente según el lugar donde estes (ejemplo: Los modulos que estoy depurando de un programa del trabajo, solo se activan en el ejecutable, si es mi computadora portátil o es la máquina principal de mi casa) Complicandolo solo funciona si tengo el código en equis directorio, e introduzco de manera adecuada la contraseña después de presionar F3 con mi clave de red y de programa)
CONSTRUCCION DE UNA CIFRA DE VERIFICACION
Hay varios enfoques para evitar las copias, pero el mas habitual, facil de comprender, explicar y razonablemente seguro, consiste en guardar en algun lugar de la Pc o de la red una cifra de verificación:
| Verificaciones que habitualmente son partes de la cifra |
|
FECHA Y/O HORA |
SOFTWARE |
HARDWARE |
|
Del directorio c:/windows
Del directorio c:/dos
Del directorio f:/public ( para redes Netware)
Del directorio donde se instaló el ejecutable ( no sirve para librerias o controles activex) |
Fecha, hora y tamaño del command.com
Versión del sistema operativo
Volumen (label) del disco duro(s)
Cambio de cadena dentro del ejecutable (complicado de mantener en un sistema en red, y depende de la versión de compilador)
E-Mail de la persona que usa el software
Nombre de usuario registrado de windows u otro componente (EXCEL, WORD, ETC) |
Tamaño del disco duro
Número de serie del disco duro
Memoria instalada en el sistema
Cadena con unidades disponibles ej: ("CDEFGH")
Tarjeta de video (marca)
Secciones de rom (Ej: Marca de motherboard)
Checksum de una parte de la rom
Fecha BIOS
|
| Verificaciones adicionales que suelen plantear problemas |
|---|
|
Fecha y hora del autoexec.bat/config.sys |
Puede crear demasiadas falsas alarmas |
|
Tipo de disco duro según BIOS |
Algunas pc identifican lectura con virus |
|
Checksum de valores int 21 según ram o Bios |
En equipos con W95, puede cambiar según Maquinas virtuales en ejecución |
|
Tamaño Disco duro: |
Puede hacerse una partición sin problemas y/o copiarla con GHOST de Norton.
Si el disco es mayor a 2.1 gb, el programa debe estar preparado para manejar FAT32. Sigue siendo una cifra segura, pero puede causar uno que otro problema. Es posible desactivar esta parte de la cifra si no se tiene fat 32 |
|
Numeros de serie |
No son una cifra. El mismo valor sirve en dos máquinas |
Antes de ver como vamos a guardar nuestra cifra de verificación, llamada valorPC de aquí en adelante, debemos decidir como vamos a crearla, o que componentes debe tener. Es recomendable que esté formada de tres a cuatro valores, para dar una seguridad razonable:
Ejemplos de valorPC:
//Este ejemplo está en Clipper, pero es fáclimente portable:
LOCAL valorpc:= FechayhoraDirectorioWindows+Cadenadrivesvalidos
If sistemaoperativo>7.0 /* es fat32 */
Valorpc =valorpc +TamañoDiscoDuro
Else
Valorpc= valorpc+etiquetavolumen
Endif
Valorpc:=valorpc+FechaBios
Es facil notar que puede ser muy problemático tronar esta clave. Para hacerla mas complicada, a ValorPc lo podemos formar con partes str(numero), o convertir todo a numeros.
Otra complicación segura,y fácil, es alterar el orden y/o la clave original:
Ejemplo:
Si valorPc vale ="ABCDEF89"
Puede: Invertirse = "98FEDCBA"
Implantarse carácter aleatorio en lugares prestablecidos = "98FEKDCJBHA4"
Y Mutilarse: ="8FEHA4CB"
Trasponerse:= "A4CB8FEH"
Implantar un carácter nulo en los extremos, preferentemente igual="AA4CB8FEHH"
Este ultimo paso provoca que el despistado que trate de tronar la clave, piense que está encriptada, si tiene experiencia piense que está invertida, pero al dar dos caracteres iguales de ambos lados damos la impresión de haber usado el método de trasposición en el encriptado, y probará dos veces: (ver métodos de encriptado mas adelante )
Hasta el momento está la parte sencilla de la clave: =)
El Paso siguiente es la transformación de dos vias: (dos alteraciones consecutivas por algoritmos diferentes), y estas pueden variar, o repetirse. Lo importante es que para volver a obtener el valor almacenado,deben deshacerse en el orden original
| Paso 0 | "AA4CB8FEHH" | Valor inicial de las permutaciones |
| Paso 1 | "BB5DC9GFII" | 1: Encriptado Cesar (Nunca usar como única protección)!! |
| Paso 2 | "66665368675771707373" | "Encriptado Base ASCII" |
| Paso 3 | "37370717757686356666" | Método hebreo o volver a invertir |
| Paso 4 | "3IFGM5LV356666" | "Encriptado numérico parcial" |
El valorPc Original ="ABCDEF89" se convierte en la cadena guardada= "3IOGM5LV356666"
Suponiendo que alguien haya seguido todo este rollo, verán que si alguien despues de horas logró obtener "ABCDEF89", nunca sabrá que alterar para dar el valor correcto =)
Sin embargo, si se tiene acceso a un sistema de CRC32 o CRC16, puede hacerse algo mejor:
Suponiendo que CRC32("3IOGM5LV356666") sea "ACEF22E1", podemos guardar "ACEF22E1" en el lugar que hayamos decidido, y sencillamente, no hay poder en la tierra que en menos de un mes con una CRAY, pueda traducir el sistema de protección. Por otra parte, por lo general un hacker con experiencia no suele dedicar mas de dos o tres dias a tronar ningún programa, aunque sea la octava maravilla del mundo.
La única desventaja es la demora en realizar la verificación, pero esta no pasa de dos segundos, y puede ponerse un mensaje:
Mens:=Showmensaje("Verificando sistema")
If .not. equipook()
Alert("Imposible verificación de sistema")
Quit // terminar programa
Endif
Quitamensaje(mens)
Algunos se preguntarán, porqué no uso un encriptado tradicional, y porque no explico los algoritmos de "Encriptado base ascii" o "Encriptado numérico parcial".
Usar encriptado habría hecho mas dificil de seguir la explicación
No usé un encriptado tradicional, porque puede ser muy problemático guardar valores ascii mayores a 128 en lenguajes basados en Windows ( sale del ámbito de la página ), pero abajo viene una sección de "Sistemas de encriptado" si quieres encriptar.
Encriptado Numérico Parcial: Es un pseudo algoritmo fácil de desarrollar por cualquier programador con experiencia. Sugiero evitar convertir los numeros, los caracteres ascii 26, retroceso,27, espacio y 127. (No pedir mayores detalles por favor )
SISTEMAS DE ENCRIPTADO
Esta parte solo tratará las técnicas básicas de encriptado, ignorando completamente los sistemas de llave pública, de referencia cruzada (ejemplo: Clave ="palabra seis de la hoja ocho del manual"), de valores cambiantes (diferente según la hora), de libro de claves (con protocolos diferentes según fecha y hora), y todo aquello que, por lo general, tenga por objetivo encriptar con compresión (ejemplo: Pkzip produce archivos encriptados), o todos aquellos basados en los standares RSA o LUCIFER.
| Técnicas de obstrucción ( para dificultar el desencriptado ) |
|---|
| Nombre técnica |
Bases Teóricas |
Ejemplo |
|
Técnica de valores nulos |
Si se sabe el largo de un mensaje es mas fácil desencriptarlo, por lo que podemos insertar caracteres aleatorios en lugares que se ignorarán al descifrar el mensaje |
ORIGINAL = "HOLA MUNDO"
CESAR = "IPMB NVÑEP"
CESARNULO= "IPXMB XNVXÑEP"
|
|
Repetición: |
Consiste en insertar una cadena determinada, que se encuentra en la cadena, pero que podemos ignorar por posición |
CESAR ="IPMB NVÑEP"
CESAR REPE="IPMBIP NVIPÑEIPP"
|
|
Técnica Segmentada |
Es mas facil encontrarle sentido a algo que tiene espacios, porque se sabe cuanto mide la palabra, por cuestiones prácticas de encriptado, suele manejarse un solo bloque. |
CESAR =IPMB NVÑEP"
CESAR SEGM=IP MB NV Ñ EP"
|
| Técnicas Consagradas ( Técnicas mas usuales, con sus inconvenientes ) |
|---|
| Nombre técnica |
Bases Teóricas |
Desventajas |
|
Técnica César o transposición simple |
Julio César usaba este sistema, consiste en aumentar una letra al mensaje, donde A se vuelve B, C=D, etc |
Se puede tronar con mucha facilidad:
Solo hay 255 posibilidades ascii, por muy salado que esté uno, al 255 se descifra |
|
Transposición compuesta o doble por valor: |
El valor depende de la posición de encriptado: Con valor de 10, "AA" se convierte en "KL" |
Si se tiene suficiente texto, casi seguramente se obtendrá una secuencia tipo "ABCDEFG", que representará espacios o lineas chr(196), por lo que se simplifica el cálculo. |
|
Transposición Letra fija o frase clave |
Consiste en substituir una letra por otra fija "ABCD" podría ser "EHZA" |
Con un análisis de frecuencia un buen aficionado puede encontrar la solución, porque siempre "E" será igual a "A" |
|
Suma de valor posicional de referencia |
Si el valor por referencia es "HOLA", sin esta referencia es imposible traducir el mensaje
Ver código de referencia |
Puede ser un poco lenta, y la seguridad de la clave es inversamente proporcional al largo de la referencia (Veinte es el largo máximo de referencia que suelo manejar). Es razonablemente segura, pero puede resultar impráctica para caracteres ascii mayores a 128. NO SE RECOMIENDA ANIDARLA POR LIMITACIONES DE WINDOWS, pero puede usarse en dos pasos si no hay caracteres mayores a ascii 128 |
|
Sistema Hebreo |
Los hebreos leen de derecha a izquierda, consiste en trasponer el orden de la cadena: Ejemplo: "ABCD"= "DCBA" |
Es un poco obvia, Por lo que no debe usarse sola, su sencillez es invaluable como parte de cifras realmente fuertes |
|
Sistema Ascii |
Consiste en cambiar las apariciones de un carácter por su valor ascii , ejemplo : "ABCD" ="65666768" |
Trasposición de letra fija, mas resistente a los análisis de frecuencia, pero relativamente sencillo de descifrar |
|
Sistema XOR |
Consiste en aplicar un XOR a nivel de bits a un valor |
Suena complicado, pero no necesita entenderse para tronarlo. Con un programita en pascal se transforma, incluso sin entender que es un XOR lógico. |
|
Sistema Binario |
Consiste en convertir un valor numérico a base binaria |
Dificil de implantar en caracteres, y el largo de una cadena puede crecer de forma impresionante =) |
|
Sistema Hexadecimal |
Consiste en convertir una cadena a su equivalente Hexadecimal |
Parecida al sistema binario, pero el largo de las claves es manejable. Es necesario que las representaciones de largo uno, queden de dos, por lo que el largo del mensaje encriptado es siempre igual a mensajeoriginal*2 |
|
Sistema derivado de comprobación matemática |
Consiste en Convertir un numero base equis a otra base, multiplicando el resultado por un numero , haciendo la operación en base actual, y guardar el resultado de esta operación |
Impráctico para cadenas de caracteres, complicado de implantar. |
Para fines generales, es suficiente utilizar las técnicas por código de referencia, o de transposicion compuesta. Sin embargo , pueden hacerse mejoras como funcionar sobre una cadena invertida de referencia. Por regla general, un nivel de cuatro a ocho encriptados en la misma o diferente técnica, da un nivel de seguridad mas que razonzable, y de 20 a 30 una seguridad casi imposible de romper.
No debe subestimarse el poder de CRC, ya que el mensaje encriptado realmente no se encuentra ahí, pero no debe usarse cuando lo que queremos es obtener el mensaje original, no solo verificarlo.
Código de referencia: "Suma de valor posicional de referencia"
| Ejemplo en Clipper 5.x |
|
las lineas que empiezan con && deben ir al final de la anterior
LOCAL mensaje:="HOLA MUNDO"
LOCAL referencia:="HOLA"+DTOC(DATE()) // obligamos a que se use una fecha
// determinada, la clave de hoy puede
// no servir mañana
? cryptclue(mensaje,referencia)
? decryptclue(cryptclue(mensaje,referencia),referencia)
function cryptclue(mensaje,referencia)
local nuevo:=""
Local csh
FOR csh=1 to len(mensaje)
Nuevo:=nuevo+chr(asc(substr(mensaje,csh,1))+
&& asc(substr(referencia,mod(csh,len(referencia)),1)))
Next
return nuevo
function decryptclue(mensaje,referencia)
local anter:=""
Local csh
for csh=1 to len(mensaje)
anter:=anter+chr(asc(substr(MENSAJE,csh,1)) -
&&asc(substr(referencia,mod(csh,len(referencia)),1)))
next
return anter |
| Ejemplo en VBASIC 5.0 |
|
las lineas que empiezan con && deben ir al final de la anterior
Paso 1: Crear Un form con 2 command buttons y dos textbox |
|
Paso 2: Pegar el siguiente código:
Option Explicit
Function cryptclue(mensaje As String, referencia As String) As String
Do Until Len(mensaje) < Len(referencia)
referencia = referencia & referencia
DoEvents
Loop
Dim nuevo As String
Dim paso1 As Integer
Dim paso2 As Integer
Dim csh As Integer
nuevo = ""
For csh = 1 To Len(mensaje)
paso1 = Asc(Mid$(mensaje, csh, 1))
paso2 = Asc(Mid$(referencia, csh, 1))
If (paso1 + paso2) > 255 Then paso2 = 0
nuevo = nuevo & Chr$(paso1 + paso2)
DoEvents
Next
cryptclue = nuevo
End Function
Function decryptclue(mensaje As String, referencia As String) As String
Dim anter As String
Dim paso1 As Integer
Dim paso2 As Integer
Do Until Len(mensaje) < Len(referencia)
referencia = referencia & referencia
DoEvents
Loop
Dim csh As Integer
For csh = 1 To Len(mensaje)
paso1 = Asc(Mid$(mensaje, csh, 1))
paso2 = Asc(Mid$(referencia, csh, 1))
Debug.Print paso1
Debug.Print paso2
If paso2 > paso1 Then paso2 = 0
anter = anter & Chr$(paso1 - paso2)
DoEvents
Next
Debug.Print anter
decryptclue = anter
End Function
Private Sub Command1_Click()
Text1 = cryptclue(Text1, Text2)
End Sub
Private Sub Command2_Click()
Text1 = decryptclue(Text1, Text2)
End Sub
Private Sub Form_Load()
Command1.Caption = "Encrypt"
Command2.Caption = "Decrypt"
Text1.Text = "Mensaje"
Text2.Text = "Referencia"
End Sub
|
CONSIDERACIONES SOBRE CONTROLES ACTIVEX
Qué es 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.
Para ver mas detalles sobre Activex y protección vs Copia, da un clic aquí
DONDE GUARDAR LA CIFRA?
Busca la información aquí
|