Protección del software I
Protección de aplicaciones a 32 bits en Windows. Cómo proteger tu programa.
Para los programadores con poca experiencia en Ingeniería Inversa, Cracking etc... puede resultar muy difícil entender cómo se puede llegar a crackear nuestro propio software en unos minutos... en unos segundos. Siempre que alguien me ha pedido consejo(sobre protección del software, técnicas anti-Cracking), me he dado cuenta que el programador no tenía las ideas claras y al final me ha tenido que reenviar su propio software más de veinte veces y al final ha quedado satisfecho. ¿Qué quiero decir con esto? Pues que desde la misma programación, si tenemos claro lo que tenemos que hacer, podemos poner las cosas muy difíciles al cracker. Para esto no es necesario saber ingeniería inversa ni depurar tu aplicación con un debugger, pero sí saber cómo se piensa, cómo trabaja un cracker, qué busca y qué modifica en nuestra aplicación.
Lo primero y es la primera base para empezar, hay que entender en qué se convierte nuestro lenguaje fuente. ¿Qué ocurre cuando generamos un .exe .dll .ocx en Windows? Bueno, esto ya lo he explicado en un tutorial anterior, así que si no lo entiendes te invito a que lo leas antes:
Código máquina, lenguaje ensamblador, compilador
Como dije en elhacker cuando comencé este artículo, es necesario que los programadores conozcan algunas cosas:
- Ningún programa es incrackeable. Algunas protecciones pueden parecerlo pero no serlo.
- Existen protecciones muy fáciles, fáciles(muchísimas), difíciles y muy difíciles pero no imposibles.
- Muchos programadores noveles piensan que como el cracker no tiene el código fuente no es posible modificar el programa: se equivocan al 100%. Es una gran equivocación que yo también sufrí hace años y que muchos informáticos ignoran. Un cracker puede modificar tu aplicación como él desee y sin tener el código fuente. Éste último domina otro lenguaje: lenguaje ensamblador.
- Cualquier programa se puede desensamblar (esto lo he comentado en el enlace anterior) y si añadimos a este desensamblador el poder de un debugger(depurador) pues conseguimos un arma muy peligrosa contra todo software.
- Las personas que comienzan en el mundo de la ingeniería inversa son consideradas Newbies. No subestimes a ninguna persona Newbie, ni le insultes, piensatelo dos veces, no conviene en absoluto tener un enemigo de este tipo simplemente por despreciar su trabajo.
- Para saber cómo piensa un cracker es muy aconsejable ponerse en su lugar y depurar aplicaciones.
El programador cuando ha terminado su proyecto, y muchas veces no lo sabe, tiene que realizar un importante trabajo que más o menos es el siguiente:
- Intentar disminuir todo lo posible el tamaño de su aplicación. Esto se puede realizar con cualquier compresor para PE (Portable Ejecutable).
- Crear licencias para usuarios registrados.
- Crear un programa DEMO o con restricciones para que el usuario vea el funcionamiento, esto suele ser muy importante en programas poco conocidos.
- Crear un instalador. Para mi el mejor es y siempre ha sido Inno Setup, aunque en su licencia si el programa es de pago debes pagar al desarrollador de Inno Setup.
- Tener una página Web de referencia, emails de soporte, FAQ's (preguntas frecuentes) y para proyectos grandes es necesario un foro para la comunidad.
- Y finalmente proteger su aplicación para que no se usen licencias ilícitas.
Seguramente se te ocurran muchas más cosas pero éstas suelen ser las más comunes o las que me parecen más lógicas. Como puedes observar, este campo es muy amplio y podríamos hablar de este tema toda una vida entera, así que para esta introducción (parte I) vamos a centrarnos en la protección de software pero en sus generalidades ya que en un sólo artículo no se puede hablar de todo esto y en posteriores artículos iremos indagando y adentrarnos más y más en las protecciones que podemos implantar que son muchísimas.
Las dos formas de protección del software
Yo siempre (que no quiere decir que esté bien), he dividido la protección del software en dos partes:
- Protección del software desde la misma programación, desde el mismo código fuente.
- Protección del software utilizando Ingeniería Inversa. Esto se suele hacer con programas denominados packers.
Podríamos añadir una más y es la combinación de ambas, ya que determinados packers permiten interactuar desde el código fuente y desde el código ensamblador final.
- La protección desde el mismo código fuente la realiza el programador. El programador según su propia experiencia, conocimiento de Ingeniería Inversa, imaginación será el que ponga las dificultades al cracking de su software. Crear licencias, programa DEMO y protección puede ser una labor muy costosa en tiempo y pruebas, pero también existe muchísima información en la red.
- La protección utilizando Ingeniería Inversa es a partir de tu programa ya compilado, crear impedimentos al cracking. Esto se hace normalmente con programas protectores denominados: packers, empacadores. La utilización de estos programas son una gran ventaja ya que permiten crear licencias, crear programas DEMO o con restricciones, crear protección contra debuggers y/o desensambladores, comprimir tu aplicación, crear un sólo ejecutable sin tener dependencias y unas cuantas opciones que dependen del packer que estemos utilizando.
Al final de todo esto, como puedes observar, el camino que queda es largo y muchos programadores dejan la protección de su software a las empresas de packers. Veremos en la siguiente parte, las técnicas más conocidas de protección.