[Autor] Doddy Hackman
-- == Indice == --
0x00 : Presentacion
0x01 : Que es Python
0x02 : Tipos basicos
0x03 : Uso de print
0x04 : Tipos de condiciones
0x05 : Colecciones
0x06 : Manejo de errores
0x07 : Variables argumentales
0x08 : Concatenacion
0x09 : Comentarios
0x10 : Entradas de teclado
0x11 : Manejo de split
0x12 : Funciones
0x13 : Listar directorios y manejo de archivos
0x14 : Manejo de sockets
0x15 : Interactuar con webs y expresiones regulares
0x16 : Descarga de archivos
0x17 : Manejo de funciones
0x18 : Creacion de un keylogger
0x19 : Compresion de archivos
0x20 : Mostrar y ocultar archivos en Windows
0x21 : Manejo de threads
0x22 : Compilar script a exe
0x23 : Bibliografia
-- =========== --
0x00 : Presentacion
Hola , aca les traigo una guia para iniciarnos en python.
Cualquier sugerencia o error en la guia deben decirmelo para mejorar.
0x01 : Que es Python
Segun wiki python es
Python es un lenguaje de programación de alto nivel cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico, es fuertemente tipado y multiplataforma.
Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License,1 que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.
En lo personal considero que python es el lenguaje indicado para empezar a programar , tiene un gran poder en todos sentidos yes facil de aprender a usarlo.
Para cargar un script en python , tenemos que cargar la consola ms dos , usar cd para entrar al directorio donde esta el script y teclear el nombre del script , puede ser
algo asi
test.py
Y se carga...Para bajar python 2.5 puden ir al siguiente enlace
http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi
Aclaracion : si queremos crear un script py tenemos que hacerlo con bloc de notas cuando ya escribimos el codigo tenemos queir "guardar como" , donde dice nombre ponemos "script.py" y en tipo ponemos "todos los archivos"
0x02 : Tipos basicos
Los tipos basicos en python son los siguientes :
-- == Numeros == --
Los numeros pueden ser enteros,de coma flotante y complejos
Un ejemplo de cada uno serian :
entero = 4
coma = 12.50
complejos = 8 + 4j
-- == Cadenas de texto == --Las cadenas son solo texto puesto entre comillas simples o dobles.
Podemos declararlas con comillas dobles de la siguiente manera
nombre = "hola"
O con comillas simplesnombre = 'hola'
-- == Booleanos == --Las variables de tipo booleano solo pueden tener dos valores , los cuales son "True" o "False"
Estas valores son importantes para las condiciones y los bucles
Un ejemplo de como usar esta variable seria
acccion = True
accionmala = False
Aclaracion : cuando se declara una variable primero se pone el nombre de la variable para despuesponer un = , despues del igual va a valor correspondiente a la variable.
0x03 : Uso de print
Ok , ahora vamos a conocer a print,esta hermosa funcion que nos ayudara a mostrar texto en pantalla
Podemos mostrar el text entre comillas dobles o simples
Un ejemplo de como usar print en texto normal seria asi :
Con comillas dobles
print "hola"
Comillas simplesprint 'hola'
Como ven mostramos el texto que esta entre comillas , nunca debemos dejar una comilla sin cerrarde lo contrario el codigo dara error.
Tambien podemos mostrar el contenido de las variables usando print de la siguiente forma
Usando una coma
Con comillas dobles
valor = "mundo"
print "hola ",valor, " asqueroso"
Con comillas simplesvalor = "mundo"
print 'hola ',valor,' asqueroso'
Usando un masCon comillas dobles
valor = "mundo"
print "hola "+valor+" asqueroso"
Con comillas simplesvalor = "mundo"
print 'hola '+valor+' asqueroso'
0x04 : Tipos de condiciones
Bien los tipos de condiciones usados en python son los siguientes :
-- == if-elif-else == --
Clasico en cualquier lenguaje de programacion
if "test"=="test":
print "bien"
Tambien podemos usar if para verificar que tal cosa no sea asi simplemente poniendo un not al lado de la condicion de la siguientemanera
if not "test"=="test":
print "bien"
O podemos hacer asi para verificar que test no sea igual a testif "test"!="test":
print "no es"
Como ven controlamos que test sea igual a test , despues usamos : para marcar la condicion , si el if funciona se deja un espacio que indica que lo que el if hara si funcionaSi no dejamos ese espacio el codigo dara error con razon , si queremos usar un else con el if podemos hacer asi
if "test"=="test":
print "bien"
else:
print "mal"
Como ven coordinamos los espacios entre el if y el else , else sirve para realizar una funcion por si el if no da positivoTambien podemos usar elif para tener varias condiciones de la siguiente manera
if "test"=="te":
print "bien"
elif "test"=="tes":
print "bien"
elif "test"=="test":
print "al fin"
else:
print "nada encontrado"
-- == for == --
Bien , ahora veremos como funciona for , esta funcion sirve para ayudarnos a realizar una tarea por la veces
que queramos
Podemos usar for para realizar un conteo del uno al diez de la siguiente forma
for number in range(1,10):
print number
Com ven usamos for para llamar a la funcion , despues ponemos el valor number que nos ayudar a declarar el resultado del rango 1 al 10
Despues ponemos in range para aclarar el rango que vamos a usar , el rango va encerrado entre parantesis , siempre tenemos
que cerrarlo de lo contrario dara error.
Despues ponemos un : para cerrar la condicion , despues de el : dejamos un espacio para poder indicar que hara el script cuando el
for comienze a hacer lo suyo.
-- == while == --
Bien , ahora llegamos a la funcion que nos ayuda a realizar bucles , while sirve para que se ejecuta una cosa mientras el valor
aclarado en el while sea positivo
Un ejemplo seria controlando que 1 sea igual a 1
while 1==1:
print "hola"
Como ven un maldito bucle infinito0x05 : Colecciones
Bien , ahora pasamos a los tipos de colecciones , los tipos de colecciones que tiene python
son los siguientes :
-- == Listas == --
Para crear una lista podemos hacer asi
listas = ["tengo","tengo","hola"]
Como ven primero ponemos el nombre de la lista , despues ponemos un igual para marcar los valores de la lista , los cuales deben estar encerrados entre corchetes , nombrados por comillas simples o dobles separados
por una coma
Si queremos abrir una lista podemos usar for de la siguiente forma
for list in lista:
print list
Como ven usamos for para abrir una lista e ir mostrando los valores de la lista con la variable listPara borrar repetidos en una lista podemos hacer esto
listas = ["tengo","tengo","hola"]
limpia = []
for fa in listas:
if fa not in limpia:
limpia.append(fa)
print limpia
Como ven tenemos la lista "listas" con el contenido repetido varias veces , paro eso se crea una listanueva , la cual abre la lista "listas" para añadir dichos valores a la nueva lista llamada "limpia" , entonces si dicho valor
ya existe en la lista limpia se lo ignora quedando asi una nueva lista "limpia"
Aclaracion : append se encarga de agregar valores a la lista
O asi
listas = ["tengo","tengo","hola"]
limpia = set(listas)
for l in limpia:
print l
Como ven , tenemos la misma lista con los valores repetidos entonces lo que hacemos es usar
la funcion set() con la lista "listas" , entonces el resultado de dicha funcion se almacena en una
nueva lista con el valor de "limpia"
Finalmente mostramos los valores de la lista limpia con un for.
Para agregar mas valores a lista podemos hacer asi
listas = ["tengo","tengo","hola"]
listas.append("hola")
print listas
Como ven usamos append en la la lista en la que queremos agregar el valor "hola"Para mostrar el primer valor de una lista podemos hacer asi
listas = ["tengo","tengo","hola"]
print listas[0] #primer valor
print listas[1] #segundo
print listas[2] # y tercero
Para calcular la cantidad de valor usamos len() de la siguiente forma
listas = ["tengo","tengo","hola"]
cantidad = len(listas)
print cantidad
Como ven usamos len() para calcular la cantidad de valores en la lista "listas" , entonces el resultado de dicha funcion se guarda en la variable cantidad , la cual imprimimos por pantalla
despues de calcular.
Para editar cierto valor
listas = ["tengo","tengo","hola"]
listas[0] = "nada"
print listas
Como ven modifique el primer valor de la lista "listas" para que sea "nada" en vez de "tengo", despues de dicha tarea usamos print para mostrar la lista "listas" por pantalla.
-- == Tuplas == --
Todo lo que dicho sobre las listas es igual con las tuplas , la unica diferencia entre las dos
es que las tuplas usan () en vez [] en los valores , un ejemplo seria este
lista = ("tengo","tengo","nada")
Ademas los valores de las tuplas no cambian , en vez las listas si permiten modificar sus valores,Otra cosa es que las tuplas son mas livianas y con ellas podemos ahorrar algo de memoria.
Para concluir las tuplas no permiten agregar valores con append a diferencia de las listas
-- == Diccionarios == --
Bien los diccionarios en python se caracterizan por tener una clave y un valor , un ejemplo de
declarar un diccionario seria.
dicc ={"a":"b","c":"d"}
Como ven tenemos claves y valors relacionadas de la siguiente maneraa = b
c = c
Muy simple quizas este comentario estuvo de mas , si queremos abrir un diccionario y mostrarsus valores podemos hacer de la siguiente manera
dicc ={"a":"b","c":"d"}
for k in dicc.keys():
print k+":"+dicc[k]
Como ven tenemos el diccionario llamado "dicc" con sus claves y valores encerrados con {} , cada clave y valor vanseparados por una coma , la relacion entre una clave y un valor se hacen con un :
Despues usamos un for para abrir el diccionario , donde usamos la variable k para mostrar por pantalla la clave y el valor
correspondiente.
0x06 : Manejo de errores
Bien , llegamos a un apartado interesante de python , el manejo de errores , muchas veces podemos tener un error donde aparece
en pantalla y pumm termina el script , en python no puede pasar eso , si es que usamos a try y except.
Un ejemplo de como usarlo seria asi
try:
sdsdsd
except:
print "error"
Como ven escribimos cualquier cosa y solo aparecio error , nada de errores raros........Otra cosa es que debemos coordinar los espacios entre try y except de lo contrario habra un orrendo
error , si alguna vez estamos haciendo un bucle o algo asi podemos usar pass para que el error pase de alto de la siguiente
manera
while 1:
try:
print "soy inmortal"
ddssd
except:
pass
Como ven tenemos un bucle infinito y protegido contra errores raros , eso si usamos varias veces control+c el bucle se rompepero bueno
Tambien podemos rescatar errores cuando cargamos un archivo de la siguiente forma
try:
lineas = open("no existo.txt", "r").readlines()
except:
print "error"
Como ven si el archivo no existe solo muestra error con el print que pusimos0x07 : Variables argumentales
En python tambien tenemos variables argumentales para poder usarlas tenemos que llamar al modulo sys de la siguiente manera
import sys
Como ven , con import podemos llamar a cualquier modulo existente con solo poner el nombre Para poder usar argumentos tenemos que poner valores despues del nombre del script un ejemplo
seria asi
import sys
print sys.argv[0] #ruta de script
print sys.argv[1] #argumento uno
print sys.argv[2] #argumento dos
Si lo cargamos de la siguiente formascript.py hola chau
Nos muestra lo siguienteC:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warfactory I
II\manuales>test.py hola chau
C:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warfactory I
II\manuales\test.py
hola
chau
Como ven , sys.argv[0] represente el script cargado , a partir de 1 en adelante son los argumentosque usamos.
0x08 : Concatenacion
Para concatenar variables normales podemos hacer lo siguiente
hola = "hola"
chau = "chau"
fin = hola+" "+chau
print fin
Como ven primero creamos dos cadenas de texto una llamada hola y otro chau , las dos con el mismo nombre y valor de cada una.Nuestra idea era unir las dos en un sola llamada fin , entonces lo que hacemos es usar + para unirlas , despues del mas ponemos la
otra variable , como ven tambien le agregue un espacio entre las dos variables para que no se
mostraran pegadas
Finalmente usamos print para mostrar la variable final.
0x09 : Comentarios
Bien , los cometarios como en todos los lenguajes se usan para dejar notas sobre el codigo o sobre
cualquier cosa , aunque se usa frecuentemente para dejar notas explicativas sobre alguna linea de codigo
Para usar comentarios en python tenemos que usar # de la siguiente forma
#hola
Como ven despues del # se considera como comentario en todo la linea , tambien hay que aclarar si cometemos el error de ponerun comentario sin darnos cuenta en mitad del codigo puede dar un resultado odioso
Un ejemplo seria
for #ran in range(1,10):
print ran
Que nos da como resultado File "C:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warf
actory III\manuales\test.py", line 1
for #ran in range(1,10):
^
SyntaxError: invalid syntax
Si usamos un try y except con un pass no deberia haber ningun problema pero esto es solo un ejemplo de poneren cualquier lugar un comentario.
0x10 : Entradas de teclado
Si queremos hacer un formulario o menu en python podemos usar raw_input() o input()
Para dar un ejemplo vamos a hacer el tipico menu de la edad y el nombre .
-- == raw_input() == --
print "nombre : "
nombre = raw_input()
print "edad : "
edad = raw_input()
print nombre
print edad
-- == input() == --print "nombre : "
nombre = raw_input()
print "edad : "
edad = input()
print nombre
print edad
La unica diferencia entre los dos es que input() da error cuando lo ingresado no es de valornumerico
0x11 : Manejo de split
Para usar split tenemos que importar el modulo re de la siguiente manera
import re
Poniendo de ejemplo la siguiente cadena de textotexto = "hola mundo soy 123 chau"
Poniendo de ejemplo si lo que queremos es partir la cadena para guardar en una variabletodo lo que esta antes de "soy" podemos hacer esto
import re
texto = "hola mundo soy 123 chau"
te = re.split("soy",texto)
print te[0]
print te[1]
Como ven el resultado es el siguientehola mundo
123 chau
Podemos hacer miles de cosas pero solo estoy enseñando lo basico0x12 : Funciones
Bueno , al fin llegue a la parte funciones , si lo queremos es crear una funcion que haga alguna cosa o simplemente
reducir codigo con una tarea repetitiva , tendremos que usar las famosas funciones
Para crear una simple tenemos que hacer lo siguiente
def simple():
print "hola"
Como ven creamos una funcion llamada simple , la cual si es ejecutada nos imprime en pantalla holaEntonces si queremos que esa funcion se ejecute tenemos que hacer lo siguiente.
def simple():
print "hola"
simple()
Como ven ponemos el nombre de la funcion con () , de esa forma llamamos a la funcion creada.Aclaracion : Antes de llamar una funcion esta tiene que estar antes de la llamada , como se muestra arriba, de lo contrario
habra un error
Entonces si lo queremos es mandar dos cadenas de texto a la funcion para que nos retone las dos podemos
hacer lo siguiente
def simple(a,b):
return a,b
a,b = simple("a","b")
print a
print b
Como ven mandamos dos cadenas de texto encerrada entre parentesis , donde la funcion las captura con las variables a y bEntonces la funcion retona las dos cadenas de texto donde las recibimos con los nombre de variable a y b
Despues de recibir las variables las mostramos por pantalla
Mostrando esto
a
b
0x13 : Listar directorios y manejo de archivosBien primero empecemos por el manejo de directorios
Para cargar un directorio y mostrar los archivos en una lista podemos hacer esto
import glob
dir = "C:/xampp/"
files = glob.glob(dir+"*")
for file in files:
print file
Como ven el modulo encargado de listar el directorio es glob al cual importamos al inicio del codigodespues declaramos una cadena de texto con la ruta del directorio a cargar , entonces usamos glob para tener los archivos del
directorio , el * sirve para que liste todos los archivos , despues con la lista retonada con el nombre files , usamos for para
leerla y mostrar todos los archivos por pantalla.
Para verificar la existencia de un directorio podemos usar el modulo os de la siguiente manera
if os.path.isdir("c:/xampp/"):
print "el vive"
De esa forma si el directorio existe se mostrara en pantalla "el vive"Si queremos borrar un directorio podemos usar el modulo os de la siguiente forma
os.rmdir("c:/test/")
Con eso borrariamos un directorioSi queremos mover o renombrar un archivo o un directorio podemos uar el modulo shutil de la
siguiente forma
Con un directorio
import shutil
shutil.move("c:/test/","c:/tes")
Con un archivoimport shutil
shutil.move("file.txt","nada.txt")
Si queremos copiar un archivo o directorio podemos hacer lo mismo con el modulo shutil
Con un directorio
import shutil
shutil.copy("c:/test/","c:/tes")
Con un archivoimport shutil
shutil.copy("c:/test/","c:/tes")
Bien si lo que queremos es leer un archivo y mostrar su contenido en una lista podemos haceresto
lineas = open("no existo.txt", "r").readlines()
COmo ven si el archivo existe podremos guardar todos las lineas del archivo abierto y guardarlasen una lista llamada lineas
Si lo que queremos es verificar la existencia de un archivo podemos hacer lo siguiente
if os.path.isfile("c:/leer.txt"):
print "bien"
Si el archivo existe el script mostrara en pantalla "bien"Si lo que queremos es borrar un archivo solo tenemos que hacer esto con el modulo os
import os
os.unlink("c:/jo.txt")
Finalmente si queremos abrir un archivo y mostrar su contenido podemos hacer lo siguientelineas = open("test.py","r").readlines()
for linea in lineas:
print linea
Como ven guardamos en una lista llamada lineas todo el contenido leido en el archivo "test.py" claro lo pueden cambiar pero es solo un ejemplo ,entonces despues abrimos la lista y mostramos linea por linea en pantalla.
0x14 : Manejo de sockets
Bien , ahora vamos a hablar de sockets , para poder usarlos debemos llamar a la libreria socket de la siguiente
forma
import socket
Entonces imaginemos que queremos mandar una peticion GET a un servidor HTTP mediante sockets para finalmente mostrar el resultadoque no dio la pagina por nuestra peticion GET , lo podriamos hacer asi
import socket
sock = socket.socket()
sock.connect(("localhost",80))
sock.send("GET / HTTP/1.0"+"\r\n")
codex = sock.recv(9999)
print "\n"+codex
Como podemos ver primero creamos el objeto que tiene el modulo socket para poder usar sus funciones conel nombre sock , entonces usamos connect para poder conectarnos al servidor HTTP , primer ponemos el host y
despues el puerto , despues usamos send para enviar la peticicion , despues usamos recv para capturar la
respuesta con el nombre de codex
Finalmente mostramos por pantalla el valor de la variable codex
Ahora veamos como crear un server usando sockets en python
Un ejemplo de un server seria el siguiente
import socket,re,os
slave = socket.socket()
slave.bind(("",666))
slave.listen(999)
a,b = slave.accept()
while True:
rex = a.recv(20)
if re.findall("getso",rex):
z = os.name
a.send(z)
Es una porcion de codigo de un pequeño troyano que habia hecho en python , pero vamos a analizarla parte mas importante del codigo que es el proceso de crear la conexion.
Entonces para empezar creamos el objeto para poder usar las funciones del modulo socket con el
nombre de slave , entonces usamos bind para que nuestra propia computadora abra una conexion en el
puerto 666 , con listen() podemos capturar hacer que la conexion se mantenga.
La parte importante es slave.accept() que es donde se usa para que entren clientes al servidor
socket donde a es el cliente , entonces creamos un bucle infinito usando while , en la parte
del bucle podemos capturar todo el contenido que nos envia el cliente con recv , el contenido
se guarda como una cadena de texto llamada rex , despues usamos el modulo re para poder examinar el
contenido que nos envio el cliente , en la parte de re.findall se intenta confirmar que si en el
texto que nos envio el cliente hay algo como "getso" , si ese patron existe en el la variable
rex usamos el modulo os para enviar el nombre de nuestro sistema operativo con el nombre de una
cadena de texto llamada z , finalmente enviamos el contenido de la cadena de texto usando send
0x15 : Interactuar con webs y expresiones regulares
Bien , ahora es vamos a interactuar con webs , para poder hacer esto tenemos que llamar
al modulo urllib2 con import de la siguiente forma
import urllib2
Entonces para poder realizar una peticion GET tenemos que hacer lo siguienteimport urllib2
nave = urllib2.build_opener()
nave.add_header = [('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5')]
code = nave.open("http://127.0.0.1/sql.php").read()
print code
Bien , entonces comencemos a analizar el codigo , primero importamos el modulo necesario paraesto , despues creamos el objeto para poder usar las funciones del modulo usando la variable
nave , entonces usamos la funcion add_header para poner el navegador que estamos usando , despues
usamos open() y read() para leer el contenido de la pagina y guardar el resultado de la misma
en una cadena de texto llamada code
Finalmente mostramos por pantalla el codigo.
Si lo queremos es usar una peticion POST tenemos que hacer lo siguiente
import urllib2
nave = urllib2.build_opener()
nave.add_header = [('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5')]
code = nave.open("http://127.0.0.1/post.php","te=probando&ok1=ok").read()
print code
El mismo procedimiento lo unico que cambia es que como segundo parametro en la funcion open usamos
los datos necesarios (inputs) para poder realizar el procedimiento con el metodo POST de la pagina.
Si quieren entender mejor el codigo del formulario este
<form action='' method=POST>
<input type=text name=te value=probando>
<input type=submit name=ok1 value=okr>
</form>
Recuerden que para ordenar los datos para el formulario primero debe ir el name y despues el value tanto de cajas de texto comoel boton.
Se me estaba olvidando como usar expresiones regualares en python , para poder usarlas tenemos que
llamar al modulo re de la siguiente forma
import re
Entonces si tenemos la siguiente cadena de texto como muestra el ejemplotexto = "Hola soy 123 chau"
Si lo que queremos es sacar solo el 123 tenemos que hacer lo siguienteimport re
texto = "Hola soy 123 chau"
if (re.findall("Hola soy (.*?) chau",texto)):
nombre = re.findall("Hola soy (.*?) chau",texto)
print nombre[0]
Como ven uso (.*?) en findall con referencia a la cadena de texto para capturar lo que sea que halla en ese espacio , despues muestro el resultadocon nombre[0] , claro que si no lo encuentra no imprimira nada.
0x16 : Descarga de archivos
Esto es simple , primero debemos importar el modulo necesario de la siguiente manera
import urllib
[code2=python]
Despues usamos la funcion urlretrieve que trae el modulo importado para bajar el archivo con el nombre que queramos ponerle
urllib.urlretrieve("http://localhost/t.jp","foto.jpg")
Como ven solo son dos parametros , el primero es la url del archivo a bajar y despues elnombre que llevara cuando este bajado.
Tambien hay un tercer argumento que es para mostrar el estado del archivo cuando se esta bajando un ejemplo de como usarlo es
asi
import urllib
def proxar(a,b,c):
cantidad = a * b
print cantidad
urllib.urlretrieve("http://localhost/t.jp","foto.jpg",reporthook=proxar)
Como ven le agregamos el tercer argumento al que hace referencia a una funcion llamada proxar , claro puede llevar cualquier nombre , despues en esa funcion calculamos el bloque a * b para
despues guardar su contenido en una cadena de texto , la cual la mostramos por pantalla.
0x17 : Manejo de funciones
Bien , me estaba olvidando de explicar como usar funciones en python , para poder crear una funcion en python tenemos que usar def , un ejemplo seria
asi
def usar(variable):
print variable
usar("hola")
Como ven usamos def para despues poner el nombre de la funcion a usar , entre parentesis ponemos el nombre de la variable que estamos recibiendo para despues de cerrar los parentesis
poner el tipico : que hace referencia a que comenzo la funcion , despues de eso dejamos un espacio para poner lo que esa funcion hara.
Como ven usamos el nombre "hola" en usar() para poner el texto que le mandamos a la funcion.
Tambien podemos poner mas variables como en el siguiente ejemplo
def usar(variable,dos):
print variable
print dos
usar("hola","chau")
Como ven es lo mismo solo se le agregue otro texto a la funcion usar , y para mostrar el valor usamos la cadena de texto dosEso si tambien podemos retornar valores en la funciones como muestra el siguiente ejemplo
def usar(h):
return h
re = usar("hola")
print re
Como primero ponemos la funcion donde podemos ver que usamos la variable h que vendria a ser lo que recibimos , para despues volver a mandarla como respuesta usando return , tambien
podemos mandar varios valores como en el siguiente ejemplo
def usar(h,i):
return h,i
re,dos = usar("hola","chau")
print re
print dos
Como ven solo agregamos otra cadena de texto a la funcion usar , lo unico nuevo seria que separamos por coma las cadenas de texto que estamos por recibir despues del parentesis
, tambien vemos como separamos los valores por coma cuando estamos usando return.
0x18 : Creacion de un keylogger
Bien , para poder hacer un keylogger en python vamos a necesitar los modulos pyHook y pythoncom
Los pueden bajar de aca
http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/pyHook-1.5.1.win32-py2.5.exe/download?use_mirror=ufpr
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20215/pywin32-215.win32-py2.5.exe/download
El segundo es pywin que trae pythoncom entre otros que resultan muy utiles.Una vez que los tengan instalado lo que tenemos que hacer primero en el script es importar los modulos
descargados de la siguiente manera
import pyHook,pythoncom
Cabe destacar que estos modulos facilitan mucho el trabajo en la creacion de un keylogger , podemos usar las api de windows para hacerlo
pero estos modulos simplifican mucho el trabajo.
def toma(frase):
print frase.Key
nave = pyHook.HookManager()
nave.KeyDown = toma
nave.HookKeyboard()
pythoncom.PumpMessages()
Como ven primero ponemos la funcion donde se mandara el valor para poder ver la tecla pulsada con el nombre de frase.Despues vemos como usamos el modulo pyhook para poder usar sus funciones a traves de la variable nave.
Como ven cuando usamos keydown marcamos el nombre de la funcion que usara para capturar el valor de la tecla pulsada
0x19 : Compresion de archivos
Bien , ahora vamos a hablar sobre como comprimir archivos , para empezar tenemos que importar
el modulo necesario el cual es
import zipfile
Una vez importado tenemos que hacer lo siguiente para poder continuar con lo que queremos hacerzipa = zipfile.ZipFile("probando.zip","w",zipfile.ZIP_DEFLATED)
Como ven creamos el archivo probando.zip con la variable zipa , la cual nos va ayudar a agregar archivos de la siguiente formazipa.write("C:/leer.txt")
Como ven agregamos el archivo leer.txt a al archivo comprimido , podemos agregar todos los que queramos , pero si ponemos mal la ruta delarchivo que queremos comprimir vamos a arruinar el script.
Finalmente cuando terminemos de usar el archivo comprimido debemos hacer lo siguiente
zipa.close()
0x20 : Mostrar y ocultar archivos en Windows
Bien , ahora veremos como esconder archivos en Windows , para empezar necesitamos importar dos modulos necesarios
import win32api,win32con
Los podemos bajar de aca (pywin)http://sourceforge.net/projects/pywin32/files/pywin32/Build%20215/pywin32-215.win32-py2.5.exe/download
Entonces hagamos de cuenta de que tenemos un archivo llamado c:/leer.txt y lo que queremos esconder , entonces tendriamos que hacer esto
win32api.SetFileAttributes("c:/leer.txt",win32con.FILE_ATTRIBUTE_HIDDEN)
Si lo probamos con un archivo en serio veremos que el archivo no esta , pero que pasa si qureremos ponerle el atributo normal para que el archivo no se siga escondiendo mas , entonces tenemos que hacer lo siguiente
win32api.SetFileAttributes("c:/leer.txt",win32con.FILE_ATTRIBUTE_NORMAL)
0x21 : Manejo de threads Bien , no conozco mucho sobre threads , pero me siempre me ha surgido el caso de tener dos cosas o funciones activas al mismo tiempo , eso es lo que voy
a tratar de enseñar.
Para empezar tenemos que importar el modulo necesario de la siguiente manera
import threading
Entonces imaginemos que necesitamos dos funciones las cuales una muestre hola y la otra chau usando print.Entonces hariamos algo asi
def uno():
while 1:
print "hola"
def probardos():
while 1:
print "chau"
t1 = threading.Thread(target=uno)
t1.start()
t2 = threading.Thread(target=probardos)
t2.start()
Como podemos ver usamos dos funciones , una llamada uno y la otra probardos , entonces usamos las variables t1 y t2 para poder usar las funciones de thread , tambien podemos ver que en target ponemos el nombre de la funcion a usar en thread , tambien podemos ver que en el contenido de cada funcion usamos while para poder mostrar
enternamente un print al mismo tiempo que el otro.
Eso si , siempre tenemos que usar start() de lo contrario la funcion nunca empezarara con su trabajo
0x22 : Compilar script a exe
Para poder compilar scripts en python a exe necesitamos bajar py2exe , lo podemos bajar de aca
http://sourceforge.net/projects/py2exe/files/py2exe/0.6.5/py2exe-0.6.5.win32-py2.5.exe/download
Entonces una vez que lo tengamos instalado tenemos que crear un archivo llamado setup.py con el siguiente contenidofrom distutils.core import setup
import py2exe
setup(console=["test.py"])
Como ven importamos dos modulos uno llamado setup y el otro py2exe , despues usamos una funcion llamada setup , la cual tiene un argumento llamado console , como vemos tenemosentre comillas un archivo llamado test.py ese es el script de ejemplo que pretendo compilar a exe , eso si , si quieren compilar el suyo tienen que poner el verdadero nombre
Entonces para compilar el script tenemos que cargar una consola msdos , despues usen cd para ir al directorio donde estan los dos scripts (setup.py y test.py) , para finalmente ejecutar lo siguiente
setup.py py2exe
Como ven usamos un argumento llamado py2exe el cual es obligatorio para compilar el script , en mi caso me dio el siguiente resultadoMicrosoft Windows [Versión 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
C:\Users\Usuario>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 3CB0-02D7
Directorio de C:\Users\Usuario
17/07/2011 06:11 a.m. <DIR> .
17/07/2011 06:11 a.m. <DIR> ..
15/07/2011 11:20 p.m. <DIR> .idlerc
19/04/2011 11:16 a.m. <DIR> Contacts
18/04/2011 08:34 p.m. <DIR> Desktop
19/04/2011 11:16 a.m. <DIR> Links
19/04/2011 11:16 a.m. <DIR> Saved Games
19/04/2011 11:16 a.m. <DIR> Searches
17/07/2011 06:11 a.m. <DIR> test
0 archivos 0 bytes
9 dirs 141.737.705.472 bytes libres
C:\Users\Usuario>cd test
C:\Users\Usuario\test>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 3CB0-02D7
Directorio de C:\Users\Usuario\test
17/07/2011 06:11 a.m. <DIR> .
17/07/2011 06:11 a.m. <DIR> ..
17/07/2011 06:05 a.m. 92 setup.py
17/07/2011 05:58 a.m. 208 test.py
2 archivos 300 bytes
2 dirs 141.737.705.472 bytes libres
C:\Users\Usuario\test>setup.py py2exe
running py2exe
creating C:\Users\Usuario\test\build
creating C:\Users\Usuario\test\build\bdist.win32
creating C:\Users\Usuario\test\build\bdist.win32\winexe
creating C:\Users\Usuario\test\build\bdist.win32\winexe\collect-2.5
creating C:\Users\Usuario\test\build\bdist.win32\winexe\bundle-2.5
creating C:\Users\Usuario\test\build\bdist.win32\winexe\temp
creating C:\Users\Usuario\test\dist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'unicodedata'
creating python loader for extension 'bz2'
*** finding dlls needed ***
*** create binaries ***
*** byte compile python files ***
byte-compiling C:\Python25\lib\StringIO.py to StringIO.pyc
byte-compiling C:\Python25\lib\UserDict.py to UserDict.pyc
byte-compiling C:\Python25\lib\__future__.py to __future__.pyc
byte-compiling C:\Python25\lib\_strptime.py to _strptime.pyc
byte-compiling C:\Python25\lib\_threading_local.py to _threading_local.pyc
byte-compiling C:\Python25\lib\atexit.py to atexit.pyc
byte-compiling C:\Python25\lib\base64.py to base64.pyc
byte-compiling C:\Python25\lib\calendar.py to calendar.pyc
byte-compiling C:\Python25\lib\codecs.py to codecs.pyc
byte-compiling C:\Python25\lib\copy.py to copy.pyc
byte-compiling C:\Python25\lib\copy_reg.py to copy_reg.pyc
byte-compiling C:\Python25\lib\dummy_thread.py to dummy_thread.pyc
byte-compiling C:\Python25\lib\encodings\__init__.py to encodings\__init__.pyc
creating C:\Users\Usuario\test\build\bdist.win32\winexe\collect-2.5\encodings
byte-compiling C:\Python25\lib\encodings\aliases.py to encodings\aliases.pyc
byte-compiling C:\Python25\lib\encodings\ascii.py to encodings\ascii.pyc
byte-compiling C:\Python25\lib\encodings\base64_codec.py to encodings\base64_cod
ec.pyc
byte-compiling C:\Python25\lib\encodings\big5.py to encodings\big5.pyc
byte-compiling C:\Python25\lib\encodings\big5hkscs.py to encodings\big5hkscs.pyc
byte-compiling C:\Python25\lib\encodings\bz2_codec.py to encodings\bz2_codec.pyc
byte-compiling C:\Python25\lib\encodings\charmap.py to encodings\charmap.pyc
byte-compiling C:\Python25\lib\encodings\cp037.py to encodings\cp037.pyc
byte-compiling C:\Python25\lib\encodings\cp1006.py to encodings\cp1006.pyc
byte-compiling C:\Python25\lib\encodings\cp1026.py to encodings\cp1026.pyc
byte-compiling C:\Python25\lib\encodings\cp1140.py to encodings\cp1140.pyc
byte-compiling C:\Python25\lib\encodings\cp1250.py to encodings\cp1250.pyc
byte-compiling C:\Python25\lib\encodings\cp1251.py to encodings\cp1251.pyc
byte-compiling C:\Python25\lib\encodings\cp1252.py to encodings\cp1252.pyc
byte-compiling C:\Python25\lib\encodings\cp1253.py to encodings\cp1253.pyc
byte-compiling C:\Python25\lib\encodings\cp1254.py to encodings\cp1254.pyc
byte-compiling C:\Python25\lib\encodings\cp1255.py to encodings\cp1255.pyc
byte-compiling C:\Python25\lib\encodings\cp1256.py to encodings\cp1256.pyc
byte-compiling C:\Python25\lib\encodings\cp1257.py to encodings\cp1257.pyc
byte-compiling C:\Python25\lib\encodings\cp1258.py to encodings\cp1258.pyc
byte-compiling C:\Python25\lib\encodings\cp424.py to encodings\cp424.pyc
byte-compiling C:\Python25\lib\encodings\cp437.py to encodings\cp437.pyc
byte-compiling C:\Python25\lib\encodings\cp500.py to encodings\cp500.pyc
byte-compiling C:\Python25\lib\encodings\cp737.py to encodings\cp737.pyc
byte-compiling C:\Python25\lib\encodings\cp775.py to encodings\cp775.pyc
byte-compiling C:\Python25\lib\encodings\cp850.py to encodings\cp850.pyc
byte-compiling C:\Python25\lib\encodings\cp852.py to encodings\cp852.pyc
byte-compiling C:\Python25\lib\encodings\cp855.py to encodings\cp855.pyc
byte-compiling C:\Python25\lib\encodings\cp856.py to encodings\cp856.pyc
byte-compiling C:\Python25\lib\encodings\cp857.py to encodings\cp857.pyc
byte-compiling C:\Python25\lib\encodings\cp860.py to encodings\cp860.pyc
byte-compiling C:\Python25\lib\encodings\cp861.py to encodings\cp861.pyc
byte-compiling C:\Python25\lib\encodings\cp862.py to encodings\cp862.pyc
byte-compiling C:\Python25\lib\encodings\cp863.py to encodings\cp863.pyc
byte-compiling C:\Python25\lib\encodings\cp864.py to encodings\cp864.pyc
byte-compiling C:\Python25\lib\encodings\cp865.py to encodings\cp865.pyc
byte-compiling C:\Python25\lib\encodings\cp866.py to encodings\cp866.pyc
byte-compiling C:\Python25\lib\encodings\cp869.py to encodings\cp869.pyc
byte-compiling C:\Python25\lib\encodings\cp874.py to encodings\cp874.pyc
byte-compiling C:\Python25\lib\encodings\cp875.py to encodings\cp875.pyc
byte-compiling C:\Python25\lib\encodings\cp932.py to encodings\cp932.pyc
byte-compiling C:\Python25\lib\encodings\cp949.py to encodings\cp949.pyc
byte-compiling C:\Python25\lib\encodings\cp950.py to encodings\cp950.pyc
byte-compiling C:\Python25\lib\encodings\euc_jis_2004.py to encodings\euc_jis_20
04.pyc
byte-compiling C:\Python25\lib\encodings\euc_jisx0213.py to encodings\euc_jisx02
13.pyc
byte-compiling C:\Python25\lib\encodings\euc_jp.py to encodings\euc_jp.pyc
byte-compiling C:\Python25\lib\encodings\euc_kr.py to encodings\euc_kr.pyc
byte-compiling C:\Python25\lib\encodings\gb18030.py to encodings\gb18030.pyc
byte-compiling C:\Python25\lib\encodings\gb2312.py to encodings\gb2312.pyc
byte-compiling C:\Python25\lib\encodings\gbk.py to encodings\gbk.pyc
byte-compiling C:\Python25\lib\encodings\hex_codec.py to encodings\hex_codec.pyc
byte-compiling C:\Python25\lib\encodings\hp_roman8.py to encodings\hp_roman8.pyc
byte-compiling C:\Python25\lib\encodings\hz.py to encodings\hz.pyc
byte-compiling C:\Python25\lib\encodings\idna.py to encodings\idna.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp.py to encodings\iso2022_jp.p
yc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_1.py to encodings\iso2022_jp
_1.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_2.py to encodings\iso2022_jp
_2.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_2004.py to encodings\iso2022
_jp_2004.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_3.py to encodings\iso2022_jp
_3.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_jp_ext.py to encodings\iso2022_
jp_ext.pyc
byte-compiling C:\Python25\lib\encodings\iso2022_kr.py to encodings\iso2022_kr.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_1.py to encodings\iso8859_1.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_10.py to encodings\iso8859_10.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_11.py to encodings\iso8859_11.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_13.py to encodings\iso8859_13.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_14.py to encodings\iso8859_14.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_15.py to encodings\iso8859_15.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_16.py to encodings\iso8859_16.p
yc
byte-compiling C:\Python25\lib\encodings\iso8859_2.py to encodings\iso8859_2.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_3.py to encodings\iso8859_3.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_4.py to encodings\iso8859_4.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_5.py to encodings\iso8859_5.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_6.py to encodings\iso8859_6.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_7.py to encodings\iso8859_7.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_8.py to encodings\iso8859_8.pyc
byte-compiling C:\Python25\lib\encodings\iso8859_9.py to encodings\iso8859_9.pyc
byte-compiling C:\Python25\lib\encodings\johab.py to encodings\johab.pyc
byte-compiling C:\Python25\lib\encodings\koi8_r.py to encodings\koi8_r.pyc
byte-compiling C:\Python25\lib\encodings\koi8_u.py to encodings\koi8_u.pyc
byte-compiling C:\Python25\lib\encodings\latin_1.py to encodings\latin_1.pyc
byte-compiling C:\Python25\lib\encodings\mac_arabic.py to encodings\mac_arabic.p
yc
byte-compiling C:\Python25\lib\encodings\mac_centeuro.py to encodings\mac_centeu
ro.pyc
byte-compiling C:\Python25\lib\encodings\mac_croatian.py to encodings\mac_croati
an.pyc
byte-compiling C:\Python25\lib\encodings\mac_cyrillic.py to encodings\mac_cyrill
ic.pyc
byte-compiling C:\Python25\lib\encodings\mac_farsi.py to encodings\mac_farsi.pyc
byte-compiling C:\Python25\lib\encodings\mac_greek.py to encodings\mac_greek.pyc
byte-compiling C:\Python25\lib\encodings\mac_iceland.py to encodings\mac_iceland
.pyc
byte-compiling C:\Python25\lib\encodings\mac_latin2.py to encodings\mac_latin2.p
yc
byte-compiling C:\Python25\lib\encodings\mac_roman.py to encodings\mac_roman.pyc
byte-compiling C:\Python25\lib\encodings\mac_romanian.py to encodings\mac_romani
an.pyc
byte-compiling C:\Python25\lib\encodings\mac_turkish.py to encodings\mac_turkish
.pyc
byte-compiling C:\Python25\lib\encodings\mbcs.py to encodings\mbcs.pyc
byte-compiling C:\Python25\lib\encodings\palmos.py to encodings\palmos.pyc
byte-compiling C:\Python25\lib\encodings\ptcp154.py to encodings\ptcp154.pyc
byte-compiling C:\Python25\lib\encodings\punycode.py to encodings\punycode.pyc
byte-compiling C:\Python25\lib\encodings\quopri_codec.py to encodings\quopri_cod
ec.pyc
byte-compiling C:\Python25\lib\encodings\raw_unicode_escape.py to encodings\raw_
unicode_escape.pyc
byte-compiling C:\Python25\lib\encodings\rot_13.py to encodings\rot_13.pyc
byte-compiling C:\Python25\lib\encodings\shift_jis.py to encodings\shift_jis.pyc
byte-compiling C:\Python25\lib\encodings\shift_jis_2004.py to encodings\shift_ji
s_2004.pyc
byte-compiling C:\Python25\lib\encodings\shift_jisx0213.py to encodings\shift_ji
sx0213.pyc
byte-compiling C:\Python25\lib\encodings\string_escape.py to encodings\string_es
cape.pyc
byte-compiling C:\Python25\lib\encodings\tis_620.py to encodings\tis_620.pyc
byte-compiling C:\Python25\lib\encodings\undefined.py to encodings\undefined.pyc
byte-compiling C:\Python25\lib\encodings\unicode_escape.py to encodings\unicode_
escape.pyc
byte-compiling C:\Python25\lib\encodings\unicode_internal.py to encodings\unicod
e_internal.pyc
byte-compiling C:\Python25\lib\encodings\utf_16.py to encodings\utf_16.pyc
byte-compiling C:\Python25\lib\encodings\utf_16_be.py to encodings\utf_16_be.pyc
byte-compiling C:\Python25\lib\encodings\utf_16_le.py to encodings\utf_16_le.pyc
byte-compiling C:\Python25\lib\encodings\utf_7.py to encodings\utf_7.pyc
byte-compiling C:\Python25\lib\encodings\utf_8.py to encodings\utf_8.pyc
byte-compiling C:\Python25\lib\encodings\utf_8_sig.py to encodings\utf_8_sig.pyc
byte-compiling C:\Python25\lib\encodings\uu_codec.py to encodings\uu_codec.pyc
byte-compiling C:\Python25\lib\encodings\zlib_codec.py to encodings\zlib_codec.p
yc
byte-compiling C:\Python25\lib\getopt.py to getopt.pyc
byte-compiling C:\Python25\lib\gettext.py to gettext.pyc
byte-compiling C:\Python25\lib\linecache.py to linecache.pyc
byte-compiling C:\Python25\lib\locale.py to locale.pyc
byte-compiling C:\Python25\lib\macpath.py to macpath.pyc
byte-compiling C:\Python25\lib\ntpath.py to ntpath.pyc
byte-compiling C:\Python25\lib\optparse.py to optparse.pyc
byte-compiling C:\Python25\lib\os.py to os.pyc
byte-compiling C:\Python25\lib\os2emxpath.py to os2emxpath.pyc
byte-compiling C:\Python25\lib\popen2.py to popen2.pyc
byte-compiling C:\Python25\lib\posixpath.py to posixpath.pyc
byte-compiling C:\Python25\lib\quopri.py to quopri.pyc
byte-compiling C:\Python25\lib\random.py to random.pyc
byte-compiling C:\Python25\lib\re.py to re.pyc
byte-compiling C:\Python25\lib\repr.py to repr.pyc
byte-compiling C:\Python25\lib\sre.py to sre.pyc
byte-compiling C:\Python25\lib\sre_compile.py to sre_compile.pyc
byte-compiling C:\Python25\lib\sre_constants.py to sre_constants.pyc
byte-compiling C:\Python25\lib\sre_parse.py to sre_parse.pyc
byte-compiling C:\Python25\lib\stat.py to stat.pyc
byte-compiling C:\Python25\lib\string.py to string.pyc
byte-compiling C:\Python25\lib\stringprep.py to stringprep.pyc
byte-compiling C:\Python25\lib\struct.py to struct.pyc
byte-compiling C:\Python25\lib\textwrap.py to textwrap.pyc
byte-compiling C:\Python25\lib\threading.py to threading.pyc
byte-compiling C:\Python25\lib\token.py to token.pyc
byte-compiling C:\Python25\lib\tokenize.py to tokenize.pyc
byte-compiling C:\Python25\lib\traceback.py to traceback.pyc
byte-compiling C:\Python25\lib\types.py to types.pyc
byte-compiling C:\Python25\lib\warnings.py to warnings.pyc
byte-compiling C:\Users\Usuario\test\build\bdist.win32\winexe\temp\bz2.py to bz2
.pyc
byte-compiling C:\Users\Usuario\test\build\bdist.win32\winexe\temp\unicodedata.p
y to unicodedata.pyc
*** copy extensions ***
copying C:\Python25\DLLs\bz2.pyd -> C:\Users\Usuario\test\dist
copying C:\Python25\DLLs\unicodedata.pyd -> C:\Users\Usuario\test\dist
*** copy dlls ***
copying C:\Windows\system32\MSVCR71.dll -> C:\Users\Usuario\test\dist
copying C:\Python25\w9xpopen.exe -> C:\Users\Usuario\test\dist
copying C:\Windows\system32\python25.dll -> C:\Users\Usuario\test\dist
setting sys.winver for 'C:\Users\Usuario\test\dist\python25.dll' to 'py2exe'
copying C:\Python25\lib\site-packages\py2exe\run.exe -> C:\Users\Usuario\test\di
st\test.exe
*** binary dependencies ***
Your executable(s) also depend on these dlls which are not included,
you may or may not need to distribute them.
Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.
ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll
USER32.dll - C:\Windows\system32\USER32.dll
SHELL32.dll - C:\Windows\system32\SHELL32.dll
KERNEL32.dll - C:\Windows\system32\KERNEL32.dll
C:\Users\Usuario\test>
Eso seria todo0x23 : Bibliografia
PDF Python para todos