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:
# El método run contiene el código que queremos que ejecute el thread, en este caso:
# Ahora creo una instancia de la clase que acabo de definir y llamo a su método 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:
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í:
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):
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!:
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!: