viernes, 5 de octubre de 2012

Paradoja de Zenón y la piedra

Curiosamente, hace tiempo, me planteé una duda la cual era un tanto extraña... Mi duda era:"Si los decimales son infinitos, es decir, entre 1,1 y 1,2 hay 1,11-1,12 y entre estos dos hay 1,111-1,112 y así infinitamente. Lógicamente si yo quiero recorrer una distancia de A hasta B, primero, tendré que recorrer la mitad de ese tramo, pero antes, tendré que recorrer la mitad de ese tramo, y antes, la mitad de ese tramo, así, infinitamente. Entonces quiere decir,¿nunca llegaré a B, empezaré a andar infinitamente?". Entonces ayer decidí plantear la duda a mi profesora de matemáticas y me explicó esto de la paradoja de Zenón, que casualmente se preguntó lo mismo que yo en el 490 a.C (creo que es esa fecha) y se descubrió que la suma de esas mitades daba la cantidad de 1. En fin me pareció interesante escribirlo aquí ya que hace mucho que no lo hago.

Saludos!

domingo, 5 de febrero de 2012

Manejo de archivos[Python]

Aquí va el primer miniartículo de la revista, como dice en el título manejo de archivos mediante la función open.

Bueno, la función open toma como parámetros el archivo a abrir y el modo, es decir, lectura, escritura, etc.

Sería así:

#!usr/bin/env python

open('archivo.txt', 'r')

Con este código se abriría al archivo 'archivo.txt' en modo de lectura.
Los parámetros son estos:
'r' - Modo lectura ('r'ead), si no existe el archivo nos salta una excepción IOError
'w' - Modo escritura ('w'rite), se abre el archivo para poder escribirlo, si no existe se crea. Además    
       sobreescribe las cosas en el archivo, es decir, las borra y escribe las nuevas.
'b' - Abre el archivo en modo binario ('b'inary)
'a' - Modo añadir('a'ppend), abre el archivo en modo w, es decir, modo escritura. Pero este en cambio no    
       sobreescribe sino que escribe las cosas al final del archivo.

Bien ahora veamos los métodos que tiene open para manejar archivos:
Métodos relacionados al parámetro 'r':
Método read:
 Su nombre lo indica todo...(leer :-p)

    abrir = open('archivo.txt', 'r') #abrimos el archivo en modo lectura
    leer = abrir.read() #leemos el archivo
    print leer #y mostramos por pantalla lo leído

Método readline:
Lee las líneas del archivo una por una:
    abrir = open('archivo.txt', 'r') #abrimos el archivo en modo lectura
    leer = abrir.readline() #leemos el archivo linea a linea
    print leer #y mostramos por pantalla lo leído

Método readlines:
Lee las líneas pero devuelve una lista con cada una de ellas es decir:
Tenemos un archivo.txt:
    hola
    adiós
    hasta luego

Y el código python:
    abrir = open('archivo.txt', 'r') #abrimos el archivo en modo lectura
    leer = abrir.readlines() #leemos el archivo
    print leer #y mostramos por pantalla lo leído

Python nos mostrará:
 ['hola\n', 'adiós\n', 'hasta luego']

Métodos relacionados al parámetro 'w' y 'a':
Nota*: El método write pierde la capacidad de sobreescribir(borrar lo escrito y escribir algo nuevo) cuando especificamos el parámetro 'a'.

Método write:
Escribe en el archivo tomando como parámetro una cadena y la sobreescribe.(Como explique antes si ponemos de parámetro 'a' pierde la capacidad de sobreescribirse)

Ejemplo:
 abrir = open('archivo.txt', 'w')
 escribir = abrir.write('bon dia')

Método writelines:
Escribe el archivo tomando como parámetro una cadena pero no la sobreescribe sino que la pone al lado:

abrir = open('archivo.txt', 'w')
escri = abrir.writelines('bon dia')

¿Qué pasa si quiero añadir un salto de línea?, pues añadimos \n.
abrir = open('archivo.txt', 'a')
escri = abrir.writelines('bon dia'+'\n')


Métodos relacionados con el parámetro 'b':

Se utiliza normalmente para el manejo de datos externos a tu ordenador, datos ftp, http, tcp/ip, etc.



En fin, esto es todo!

Un saludo a todos!!!








Revista...

Bien, a partir de ahora, haré miniartículos sobre funciones,métodos y eso....en python.
¿La idea?, que aprendan a manejar cualquier cosa con este lenguaje.
Espero que lo desfruten!!

Saludos!!

domingo, 29 de enero de 2012

Minitutorial recoger datos de cmd [Python]

En algunos exploits veréis que os dice en las instrucciones: 

 Modo de uso:  exploit.py <loquesea> <loquesea>

Y supongo que os habréis preguntado como hace python para recoger esos datos que tu introduces ahí.
Bien pues os lo explico que es muy facilito.
Existe una librería llamada sys para manejar con cosas del sistema de ahí viene su nombre(sys - system).
Una de esas cosas es recoger datos de la linea de comandos de cmd. ¿Cómo se hace esto?, pues con 
el método argv...

Os lo explico paso a paso:
 
#!/usr/bin/env python

import sys #importamos la librería sys

host = sys.argv[1] #bien, aquí es donde se recogen los datos: el método argv #contiene un array con los datos que tu introduzcas, en este caso se asignará al #segundo dato del array el string que vaya después de exploit.py  (el primer dato #sería exploit.py y el segundo lo que hayamos introducido sys.argv =
#['exploit.py','loquehayasintroducido'])
print host # nos imprimiria sys.argv[1] que es lo que hayamos introducido

Bueno esto es, no es más porque es muy fácil ^^ 

Un saludo!!

sábado, 8 de octubre de 2011

Evitar RFI y LFI!

Bueno me he decidido hacer este tuto porque a veces me llegan mensajes de admins desesperados que no saben que hacer cuando se les presenta una vulnerabilidad tipo RFI o LFI en su página web, tranquilos, no es el fin del mundo (o si jaja :P).


RFI


Como evitar vulnerabilidad RFI...


Bueno lo primero sera dejar atras el anticuado include y pasarnos a swicht.
La sentencia switch es como muchos if's juntos cada uno se separa por un case (parecido a C)
En ejemplo:


<?php
switch ($i) {
    case 0:
        echo "i es igual a 0";
        break;
    case 1:
        echo "i es igual a 1";
        break;
    case 2:
        echo "i es igual a 2";
        break;
}
?>

Eso vendria a significar...

Si la variable i :                   swicht ($i) {
   Es igual a 0 :                         case 0:
   Imprimir i es igual a 0 :            echo 'I es igual a 0';
                                               
Y los demas asi es como funciona swicht ahora apliquemoslo a invulnerabilizar RFI.
Codigo en php:     (esto solo es una tecnica de las muchas que hay de
evitar RFI)

<?php
 switch($id) {
   default:
     include('index.php');
     break;  
   case "link":
     include('link.php');
     break;  
   case "otro-link.php":
     include('otro-link.php');
 }
?>
Expliquemos ese codigo...
Mas o menos pueden hacerse una idea de como funciona ese codigo en php
Si en el id (variable de donde se seleccionan las paginas en php) se selecciona 'link' incluir en esa variable link.php y asi con los demas, menos en default que le dice a php que si no existe ninguna opcion vaya a index.php




LFI


Como evitar vulnerabilidad LFI

Aqui como antes es utilizar swicht y es el mismo codigo que antes

<?php
switch($id) {
    default:
   include('index.php.php');
  break;  case "link":
   include('link.php');
  break;  case "otro-link.php":
   include('otro-link.php');
 }
?>

Señores,siglo XXI, dejemos atras el clasico:


<?php
$variable $_GET['variable'];
include($variable);
?>

Que solo traia owneds y demás cosas...


Un saludo y espero que les haya gustado!!

Aplicaciones blackberry....

¿Que son las APIs? y ¿Porque se deben firmar?
Lo primero que debemos saber es que Research In Motion (RIM) debe realizar un seguimiento del uso de algunos Interfaces de Programas de Aplicación (API´s, por sus siglas en Ingles) de BlackBerry ® en el entorno de desarrollo Java (JDE) para un control en materia de seguridad, esto quiere decir, que ellos velan hasta cierto punto de que la Aplicacion no se use para tomar informacion del usuario por ejemplo.

En la documentación de referencia de las API, se indican las APIs que requieren de firma mediante un candado o simplemente donde se indique su requerimiento.
Si utilizas estas APIs en las clases (Archivos .Java) o codigos de tus aplicaciones, estas deberán estar firmadas con una clave, o la firma, proporcionada por RIM antes de que puedas cargar la aplicación con el archivo .cod en el dispositivo. Cuando cargas una aplicacion sin firma al dispositivo este dara un error de ""
Aca les dejo algunos ejemplos de APIs que necesitan firma:


Nota: El registro y firma de las aplicaciones solo sera requerido cuando se necesita correr la aplicacion en el dispositivo. La firma no es necesaria para correr la aplicacion en el simulador.
Para poder firmar las aplicaciones necesitamos 20$ que pagaremos por Tarjeta de Crédito y rellenar el siguiente formulario que por cierto no lo pude abrir con el Firefox ya que me da un error (Se les pedirá un PIN que no deben olvidar ya que se usara para instalar las Keys, y ojo este no es el PIN de su Blackberry):

https://www.blackberry.com/SignedKeys/

Luego 4 días aproximadamente recibiremos la respuesta de RIM en tres correos, cada uno tendrá un adjunto (client-RCR-1560404037.csi; client-RRT-1560404037.csi y client-RBB-1560404037.csi) estos tenemos que descargarlos y ejecutarlos en la Computadora donde desarrollaremos la aplicación. Es importante saber que estas firmas son para uso de un (01) solo computador. En este proceso se les pedirá un Password (no olviden colocar el mismo password a los 3 Keys), este Password no es el mismo PIN que también tendrán que introducir en este proceso y para cada vez que firmemos una aplicación, así que tampoco lo pierdan.

Aqui les copio textualmente la guía que está en los tres correos que envía RIM:

The following attachment will allow the BlackBerry SignatureTool to register with the Signing Authority. Please ensure that the BlackBerry Java Development Environment or BlackBerry Java Development Environment Component Package has been installed onto the workstation that will be used to sign your BlackBerry Java applications.

To register the attachment, please follow the instructions below:

1)Double-click on the attachment.
2)If a dialog box appears that states that a private key cannot be found, complete steps 3 through 6 before you continue. Otherwise, proceed to step 7.
3)Click "Yes" to create a new key pair file.
4)Type a password for your private key, and type it again to confirm.
5)Click "Ok"
6)Move your mouse to generate date for a new private key.
7)In the "Registration PIN" field, type the PIN number that you supplied on the signature key request form.
8)In the Private Key password field, type a password of at least 8 characters. This is your private key password, which protects your private key. Please remember this password as you will be prompted for it each time signing is attempted.
9)Click "Register".
10)Click "Exit".

Note: All 3 keys (RBB, RCR, RRT) received should be installed on the same PC. The same password must be specified for all keys on the same PC.

¿Que programas se requieren para el desarrollo?
Por supuesto necesitamos principalmente el JDE, aunque tambien se pueden desarrollar con el IDE de su preferencia, por ejemplo existe un Plugin para JDE de Eclipse. Netbean, Visual C y otros.
Desde Aca pueden descargar el JDE en sus distintas versiones y otras herramientas para el Desarrollo en Java



Desde aqui:BlackBerry - Java Development Environment

El BlackBerry Java Development Environment incluye las siguientes herramientas para el desarrollo:
•BlackBerry® Integrated Development Environment (IDE)
•BlackBerry Smartphone Simulador
•Java ME APIs and BlackBerry APIs
•Aplicaciones de Ejemplo

El JDE a su vez exige tener algunas otra herramientas para su correcta Instalacion y uso. Entre ellas tenemos:

•Java® SE Development Kit version 1.6 o superior. Lo pueden descargar desde acá: Java SE Downloads - Sun Developer Network (SDN)

   Esta Imagen ha sido ajustada. Haz Click en esta barra para verla en su tamaño original. La Imagen original mide 592x130.


•Microsoft® DirectX® version 8.0 or posterior
•Microsoft® Windows Vista o Microsoft® Windows® XP Professional
•Intel®Pentium® procesador o compatible (800 MHz o superior)
•Minimo 400 MB de Ram disponible o mas
•Minimo 500 MB de espacio en el disco duro disponible

Esta es la pagina principal de Blackberry para los desarrolladores:
BlackBerry - BlackBerry Developer Zone

Aca los Manuales de JDE y otros (BlackBerry Java Development Environment). Estes es el IDE para el desarrollo de los codigos Java.


Desde aca: ]http://na.blackberry.com/eng/deliverables/3802/development.pdf

Ejemplo de Desarrollo de una Aplicación

Estes es un ejemplo sencillo de un codigo en Java para el Desarrollo de un Web Launcher sin Rollover Icon:
Primero que nada debemos conocer como se esctructura y organiza una aplicacion. Cada aplicacion o proyecto en JDE debería ubicarse en una carpeta distinta.
En anexo observaran la estructura de la cual hablamos, en la parte superior se encuentra el Workspace o espacio de trabajo que en nuestro ejemplo es ZonaBB.jdw luego debajo o dentro encontraremos el nombre del Proyecto “ZonaBlackberry” (acá no le vemos la extensión al archivo pero este será .jdp y se encuentra dentro de la carpeta “com”. (No es necesario tener el recurso dentro de esta carpeta solo es la forma en que cada quien se organice, esta no es la única manera de desarrollar una aplicación, dentro de la programación existen muchos caminos o códigos que pueden conducir a un mismo destino, lo que sí es importante tomar en cuenta es que mientras más sencillo y logre su cometido este será mucho más eficiente y eficaz. En este caso es solo que se me pego de la forma donde están guardados los ejemplos: C:\Archivos de programa\Research In Motion\BlackBerry JDE 4.6.0\samples\com\rim\samples (:D)
Acá también podemos observar que dentro de la carpeta “com” se hayan dos carpetas una “img” donde guardare la imagen del icono (ZonaBB2.png) y otra de nombre “ZonaBlackberry” donde estará la Clase o archivo .Java que en nuestro ejemplo es ZonaBlackberry.java
Las propiedades del proyecto las podemos ver haciendo click derecho sobre el Proyecto.

Las pestañas de izquierda a derecha son:

General: desde acá colocaremos el titulo a la aplicación, la versión, el propietario, y la descripción de la aplicación:
Application: desde acá podemos especificar qué tipo de proyecto será (CLDC Application, MIDlet o Library)
Resources: desde acá podemos agregar todas las imágenes o recursos que tendrá la aplicación, en nuestro ejemplo solo tendremos el icono de la Aplicación.

Una vez definidas las propiedades de nuestro proyecto procedemos con el desarrollo del código fuente o source code.

Antes de firmar la aplicación, la probaremos con el Simulador para descartar algún bug o fallo en el mismo, para ello nos vamos por Build>Build All and Run. (Dependiendo del JDE que hayan instalado este traerá un Simulador de un Dispositivo Blackberry, la versión 4.6.0 trae consigo el simulador del Bold, la 4.7 el simulador del Storm y así sucesivamente

Luego de probar que no haya errores procedemos a construir el proyecto para que se generen los archivos .cod, .jar y .jad. Para ello seleccionamos el proyecto ZonaBB.jdw y luego nos vamos por Build>Build All


En la parte inferior vamos a ver el log del proceso de construcción, en donde observaremos algo como lo que se anexaesto es lo que nos indica que las APIs que usamos en la clase requieren firma. “requires signing with keys”
Entonces procedemos a firmar la aplicación por Build>Request Signatures…

Presionamos el botón inferior izquierdo que dice Request (Esto requiere de una conexión a internet)

Introducimos la clave que configuramos y aceptamos (Esto requiere de una conexión a internet)

Luego veremos que ya los archivos .cod están firmados y aparecerán en verde
Ahora podemos generar el archivo .alx para la instalación vía Desktop Manager por Project>Generate ALX file.
Por último tenemos todos los archivos juntos en la carpeta “com” los podemos copiar para luego subirlos a un servidor para la descarga OTA o para la distribución de la forma que mejor les parezca. Sin olvidar que es necesario que para la instalación OTA o vía SD se requieren los Archivos .jad y .cod, para la Instalacion vía Desktop Manager se requieren de los archivos .alx y .cod