Titulo

Visitas: 55326
La otra cara de la moneda: Hasp
Agosto
25
Si hace unos días hablaba de cómo se puede emular una llave electrónica Hasp, hoy voy a tratar el tema de cómo asegurar nuestras aplicaciones con una llave Hasp.

Me puse en contacto con las oficinas de Barcelona de Aladdin (SafeNet) para preguntar por las llaves electrónicas, como las gestionan y qué seguridad ofrecen.
Lo primero que saqué en claro:  es muy asequible.
Me imaginaba un coste demasiado alto, tanto como para hacer inviable la idea. Pero nada más lejos, es un producto cercano, elaborado, y fácil de implementar.
Tenemos diferentes modelos de llave, según necesidad del desarrollador:
  • Hasp HL Basic: Llave más básica, que permite una sola licencia por llave. Carece de memoria programable, por lo que solo nos sirve para un software en concreto, y una validación de si existe o no la llave.
  • Hasp HL Pro: Esta llave tiene memoria programable (112 bytes), lo que nos permite validar más de un programa con la misma llave, o partes de uno. Es decir, podríamos gestionar grupos de usuarios a través de la llave (El usuario básico solo pueda consultar, un usuario medio añadir pedidos, y un usuario con control total, por poner un ejemplo). Se pueden asegurar unas 38 aplicaciones/funciones con una misma llave.
  • Hasp HL Max: Versión superior, con mayor capacidad de memoria programable, pudiendo gestionar unas 233 licencias diferentes (sea software completo, o modulos de cada uno).
  • Hasp HL Time: Esta tiene la misma capacidad y función que la versión anterior, pero con un reloj interno añadido. Será útil cuando queramos controlar fecha y hora, sin depender de la del equipo (para evitar… modificaciones).
Existen otras llaves, por ejemplo para entornos de red. Teneis el listado completo aquí.

¿Cómo se gestiona una llave Hasp con nuestro proyecto? Es bien sencillo. Una vez compramos el producto (no voy a dar precio, aunque ya he dicho que es rentable, podeis  hacer una llamada y os atenderán gustosamente), se nos asignará un VendorId (diferente para cada desarrollador/empresa). Las llaves cliente que compremos  ya vendrán asignadas a ese VendorId.
Junto con las llaves cliente, tendremos una llave maestra, de la que extraemos el certificado que usaremos para validar nuestro soft.

Inicialmente tendremos dos maneras de gestionar la seguridad:

El primer método es automático, basta con seleccionar el ejecutable/librerías que queremos proteger, indicarle algún parámetro (frecuencia con la que tiene que verificar la llave, nivel de encriptación, FeatureId, que seria el númeo de licencia a utilizar) y nos lo hará automáticamente.

Otra manera, quizá más elegante, es a través de la API. Las utilidades que acompañan a la llave nos ofrecen un generador de código (para C#, VB, C y C++), con lo que solo tendremos que hacer copy/paste en el lugar que nosotros elijamos para validar la llamada.
Aunque también podemos hacerlo ‘a pelo’.

Dicho así, quizá no quede del todo claro, y parezca más complicado de lo que realmente es. Para ello existen manuales (en inglés, desde la propia web de aladdin) con diferentes lecciones, en las que comenzaremos con una protección automática, e iremos avanzando, pudiendo generar números de serie y demás.

Si alguno quiere proteger software, esta es una de las maneras más seguras de las que se dispone (aunque no infalible, claro está)

Lo mejor de todo esto, es que sabiendo como ‘burlar’ esta seguridad, podemos desarrollar métodos para evitarla (por ejemplo, buscando si existe el servicio de emulador Hasp, y deteniendo nuestra aplicación si este está activo).



PS Jailbreak: Vulnerada la seguridad de Ps3
Agosto
22
Como es noticia en estos últimos días, ya es posible cargar Copias de Seguridad en Ps3.

Atrás quedaron los años en los que había que desmontar nuestros aparatos para soldar un pequeño chip que nos permitiese la carga de código no firmado.



Como ocurre en X360, en la que solo hay que hacer una modificación del firmware del lector desde el Pc (via Sata), en Ps3 se trata de un dispositivo Jig Usb, es decir, un 'pendrive' (aunque realmente no lo es) conectado al puerto Usb que se encarga de poner nuestra consola en modo debug (modo prueba para desarrolladores, por llamarlo de alguna manera).
Este modo permite la ejecución de código sin firmar.

Y acompañando a este Usb, tenemos la aplicación 'Backup Manager', que permite volcar el contenido de un Blu-Ray a un disco duro (interno o externo, aunque en el caso de disco externo, tendra la restricción de 4gb Max. por archivo, cosas del formato Fat32) para jugar desde él, sin necesidad de tenerlo en el lector (aunque si será necesario tener un juego en el lector, no ha de ser al que se quiere jugar).

El proceso para poner en marcha este aparato es el siguiente:

  1. Comprobamos que no tenemos ningun disco en el lector. Apagamos la consola completamente (Con el interruptor posterior en las Fat, o quitando el cable de alimentación en las Slim).
  2. Conectamos el dispositivo Ps Jailbreak en el puerto Usb, sin tener ningún otro puerto Usb utilizado.
  3. Pulsamos el interruptor posterior (en las Fat) o conectamos el cable de corriente (Slim). Encendemos la Ps3 mediante el botón de Power, y acto seguido pulsamos el Eject (Deberemos oir 1 pitido de encendido, y los 3 posteriores del Eject). Si todo ha salido como debe, veremos que el Led verde del dispositivo Usb queda fijo.
  4. Introducimos  un disco externo o Pendrive (formato Fat32) con el fichero del 'Backup Manager' copiado (se obtiene desde la web oficial del Ps Jailbreak) en otro puerto usb, nos desplazamos al menú 'Juego', y entramos en 'Install Package files'.
  5. Una vez finalizada la instalación, tendremos esta aplicación como un juego normal.
  6. Ya podemos acceder a esta aplicación, y volver nuestro juego al disco que queramos.
Sobra decir que la instalación del 'Backup Manager' se realiza una sola vez.

Si quereis ver una review completa, con sus imagenes y detalles, podeis acceder a Elotrolado.


¿Y de donde sale todo esto? Mucho se ha especulado sobre esto. Unos dicen que ingenieria inversa, otros que un despiste del Servicio Técnico, Robado, comprado a Sony... Lo que está claro es que utilizan un dispositivo similar en el Servicio técnico para recuperar las consolas dañadas por software.

Como nota final, este pequeño gran dispositivo cuesta unos 100€, y se pondrá a la venta a finales de este mes.
Ya es posible reservarlos en tiendas como Chipspain.

Tambien decir que se está investigando la clonación de este dispositivo, para obtenerlo a menor precio, o fabricarlo en casa.




Método Extensible
Agosto
19
Según Msdn, "Los métodos de extensión permiten 'agregar' métodos a los tipos existentes sin necesidad de crear un nuevo tipo derivado y volver a compilar o sin necesidad de modificar el tipo original.Los métodos de extensión constituyen un tipo especial de método estático, pero se les llama como si se tratasen de métodos de instancia en el tipo extendido".

Es decir, si queremos crear un método que nos diga si un entero es igual a otro, con una tolerancia x (si el número 45 es igual a otro mas menos 4, es decir, que esté entre 41 y 49) podríamos crear una clase estática  'UtilidadesInt', y crear el método.
Por ejemplo:

    public static class UtilidadesInt
    {
        public static bool toleranceEquals(int valorOrg, int valorComp,int tolerancia)
        {
            return (valorOrg>=valorComp-tolerancia) && (valorOrg<=valorComp+tolerancia);  
        }
    }  

Para utilizar este método, deberíamos llamar a la clase, y método, tal que así:

int numero1=45;
int numero2=42;
bool resultado=UtilidadesInt.toleranceEquals(numero1,numero2,3);

Esto funciona, y no hay ningún problema. Pero no es cómodo. Por ello, podemos crear el método como extensible:

    public static class UtilidadesInt
    {
        public static bool toleranceEquals(this int valorOrg, int valorComp,int tolerancia)
        {
            return (valorOrg>=valorComp-tolerancia) && (valorOrg<=valorComp+tolerancia);  
        }
    }  

Lo único que cambia respecto a la clase anterior, es que tiene la palabra reservada 'this' antes del primer parámetro, para indicar que será extendida de la clase int.
Con esto conseguimos que la llamada a este método se reduzca a:

int numero1=45;
int numero2=42;
bool resultado=numero1.toleranceEquals(numero2,3);

Y evidentemente, intellisense estará ahí para indicarnos además de los métodos de la propia clase, los extensibles.


Podríamos llegar más alla, y declarar un método con el mismo nombre y distinto número de argumentos de un método ya existente (Del método 'Equals' por ejemplo).
Intellisense nos marcaría este método como polimorfismo, para poder utilizarlo (Aunque quizá no sea lo más recomendable).


Estos métodos extensibles no se agregan a la propia clase ya compilada (int en nuestro ejemplo), sino que solo lo asocian, para un trabajo más cómodo.

Como inconveniente a estos métodos, es posible que en un futuro framework, se añada un método a esa clase con el mismo nombre que nuestro método extensible.

Esto no generaría ningún error de compilación, pero en la ejecución, el método que se invocará sera el interno a esa clase,
dejando nuestro método extensible de lado, y obteniendo resultados inapropiados a lo que queremos.