InicioLinuxBurlar el trial de un programa.

Burlar el trial de un programa.

Linux10/28/2010
Hola comunidad! Realmente, lo que voy a contarles a continuación, es algo que es preferible no hacer, ya que no se lleva muy bien con las motivaciones éticas del movimiento del software libre. Ya avisados, paso a explicar:

El tema es el siguiente: me he visto obligado a utilizar cierto software comercial, cuya licencia de uso cuesta unos u$s 300. Lamentablemente no cuento con el dinero suficiente como para adquirirlo, por lo que me he visto en la necesidad de utilizarlo de forma ilegal. Una forma de hacer esto, era descargar la versión trial para Windows, con 14 días de prueba, y utilizar un pequeño programa llamado cracklock, para 'hacerle creer' al programa que la fecha sigue siendo la del día que lo instalé. Lamentablemente (lamentablemente?), utilizar Windows no es una opción; no tengo demasiadas dificultades en crear una Virtual Box con XP, pero el tema es que no quiero.

* A los que no les interese la programación, pueden saltarse hasta el próximo asterisco.


Ahora bien, cómo hago para utilizar el programa en mi GNU/Linux (en este caso en Ubuntu)? Emulando cracklock con wine? Pues no, la verdad que no me resultaba muy práctico instalar el cracklock y el otro programa con wine, ya que el programita este que necesito tiene versión nativa para nuestro sistema. Entonces, un programador conocido mío me propone la idea de que escribamos un programa como el cracklock. Para eso, sería necesario crear un thread (un hilo de ejecución o proceso ligero), lanzar la aplicación dentro de ese thread y cambiar la fecha dentro del mismo. O al menos eso pensábamos, ya que la solución (aunque provisoria) terminó siendo distinta. Empecé a escribir el código en python, que es el lenguaje que más conozco, y primero salió lo siguiente:

# Es preciso recordar que, a diferencia de otros lenguajes de programación, en los que los bloques de código se determinan encerrándolos entre llaves y la indentación no es más que una opción para que el código sea limpio, en Python estamos obligados a ser claros con el código y la forma de determinar los bloques es mediante la indentación de los mismos (es lo que me encanta de Python y debería despertar simpatía entre todos los que amamos el software libre). Lamentablemente, Taringa hace que eso no se pueda apreciar acá, pues elimina todos los espacios en blanco, por lo que vamos a convenir en una cosa: cuando a la línea de código no le pongo nada delante, es porque no lleva ningún espacio adelante; cuando le antepongo un (1), es porque lleva una tabulación delante; cuando pongo un (2), lleva dos tabulaciones y sigue de esa forma.
## Importo los módulos que me serán necesarios. Threading sirve para crear threads, naturalmente, y el módulo os lo utilizaré para llamar a la aplicación.

import threading, os

## El módulo threading contiene una clase Thread que debemos extender para crear nuestros propios hilos de ejecución, yo lo hice de la siguiente forma:

classMiThread(threading.Thread):
   """Viajando a traves del tiempo"""
    def __init__(self, apl):
        threading.Thread.__init__(self)
        self.apl = apl

# El método run contiene el código que queremos que ejecute el thread, en este caso:

    def run(self):
        print "Lanzando", self.apl
        os.system('sudo date --set "2010-10-27 21:30"') # Con esta línea cambio la fecha del sistema a la del mismo día que lo instalé, puede ser cualquier fecha anterior a que finalice el período de prueba; obviamente variará para cada caso.
        os.system(self.apl) # Con esta otra lanzo la aplicación que luego paso como parámetro al instanciar la clase.


# Ahora creo una instancia de la clase que acabo de definir y llamo a su método start:

aplicacion = MiThread('ruta de la aplicacion entre comillas')

aplicacion.start()


Y el código estaba listo y funcionando perfectamente, solo que con algunos errores y varias líneas de más. En primer lugar, cambiaba la fecha completa del sistema, como era previsible, aunque luego de reiniciar, el sistema volvía a tomar la fecha actual. Para eso, agregué una línea al método run, que quedó de esta forma:


    def run(self):
        print "Lanzando", self.apl
        os.system('sudo date --set "2010-10-27 21:30"')
        os.system(self.apl)
        os.system('sudo ntpdate ntp.ubuntu.com') # Esto hace que la fecha vuelva a la normalidad, luego de que la aplicación que llamó el thread terminara su ejecución. No utilizo [b]sudo hwclock -s[/b], que toma la fecha del BIOS, porque suele no ser correcta para el lugar donde nos encontramos. Si no es tu caso, usa hwclock -s! O modifica hwclock con la fecha correcta.


El otro error, es que el mismo thread estaba de más, ya que yo modificaba la hora del sistema completo, por lo que era indiferente lanzar la aplicación dentro del thread o independientemente de éste, por lo que crear uno se volvía superfluo, y el código finalmente quedó así:

import os

def lanzar(apl):
    print "Lanzando", apl
    os.system('sudo date --set "2010-10-27 21:30"')
    os.system(apl)
    os.system('sudo ntpdate ntp.ubuntu.com')

lanzar('ruta de la aplicacion entre comillas')


--------------------------------------------------------------------------------------------------------------------------------------------------------


Ahora bien, es práctico utilizar este código de Python, teniendo en cuenta que podría lograrse lo mismo en bash o con un par de alias en la línea de comandos? Es posible, sin embargo yo lo dejé así y pienso seguir investigando para lograr concretar la idea original, necesito descubrir como hacerle creer sólo a un programa que la fecha es distinta de la de hoy, sin cambiar la fecha completa del sistema. En palabras de la persona que me ayudó y me lo propuso:

dijo:tenes que lograr interferir las llamadas al API del OS que haga la aplicación para que lea la fecha que vos queres que lea[/quote]

Si alguien quiere colaborar con ideas en este sentido, es bienvenido.

* Bueno, si quieren burlar el trial de un programa (seguramente no funcione para todos los programas), a la manera que comento acá, deben hacer lo siguiente:

Abren un editor de texto sin formato (el gedit, por ejemplo) y escriben las siguientes líneas (sí, lo recorté aún más):

#!/usr/bin/python

import os

os.system('sudo date --set "2010-10-27 21:30"') # Acá tengan en cuenta que deben poner una fecha anterior a que finalice el período de prueba.
os.system('ruta del programa') # Si la aplicación se encuentra dentro de alguno de los directorios que contiene la variable $PATH, no es necesario indicar la ruta completa.
os.system('sudo ntpdate ntp.ubuntu.com')


Ahora guardamos el archivo con el nombre que queramos, pero con la extensión ".py", por ejemplo: backtopast.py. Le damos permisos de ejecución (en Ubuntu se puede haciendo click derecho en el archivo, Propiedades, Permisos y marcamos la casilla "permitir ejecutar el archivo como un programa", o algo así) abriendo una terminal y situándonos en el directorio donde está el archivo:

:~$ cd /home/tuusuario/carpetadondeestaelarchivo
:~/carpetadondeestaelarchivo$ chmod +x backtopast.py


Y luego lo ejecutamos así:

:~/carpetadondeestaelarchivo$ ./backtopast.py

O haciendo doble click en el archivo y eligiendo la opción "ejecutar en un terminal".

Unite al canal IRC de la comunidad de gnu/linuxeros de T!:

Datos archivados del Taringa! original
102puntos
3,128visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
6visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

D
Usuario
Puntos0
Posts26
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.