31 ago 2011

Un repaso a la historia del Malware (V de VI)

 

Buenas a todos, en el post de hoy continuaremos con la cadena de artículos sobre la historia del malware analizando los años 90.

La década de los 90 se caracterizó principalmente por el surgimiento de Internet tal y como hoy la conocemos, por la subida vertiginosa de Microsoft con la salida al mercado de los sistemas "Windows" y el rescate a Apple tras su casi quiebra, por el nacimiento del que sería el nuevo gigante en la siguiente década, Google, por el miedo al efecto "2000" que pudo ser y al final no fue y fuera de la Informática, por las Olimpiadas de Barcelona y la Expo de Sevilla.

En 1990, se detectan los primeros virus de infección rápida provenientes de Bulgaria, entre los que destacaba "Dark Avenger".

Un año más tarde aparecen las primeras herramientas orientadas al desarrollo de malware, como "VCL" y "Phalcon/Skism Mass-Produced Code Generator".

En 1992 nace el virus de arranque Michelangelo, que logró infectar una gran cantidad de ordenadores, más de 5000.

La segunda mitad de los 90, a partir de 1995 fue clave el desarrollo desmesurado de Internet, que hizo que la cantidad de malware se multiplicase por 10.

En 1995, con el surgimiento de Windows 95, nacen los primeros malware de Macro, como por ejemplo "Concept".

Dos años más tarde se hizo popular el malware "Lady Di", que aunque no era malicioso para el equipo, ejecutaba una tarea programada los días 31 de cada mes que reproducía la canción "Candle In The Wind".

En 1998 aparecen los virus para Excel (Laroux) y para Access (AccessiV), y el primero para Java (Strange Brew).

En 1999 y a punto de finalizar el milenio, aparecen los malware de "tercera generación", los malware de "Internet", como por ejemplo, Melissa, Happy99 y I-Worm.ExploreZip.

En el próximo artículo finalizaremos la cadena analizando la década de los 2000.

Saludos!

 
 

Un repaso a la historia del Malware (I de VI)

Un repaso a la historia del Malware (II de VI)

Un repaso a la historia del Malware (III de VI)

Un repaso a la historia del Malware (IV de VI)

Un repaso a la historia del Malware (V de VI)

Un repaso a la historia del Malware (VI de VI)

 

30 ago 2011

Geolocalización por IP… ¿¿Ande andarás??

Clipart de Ojo con iris de la bola del mundo

El término “geolocalización”, referido al mundo Internet, nos puede ayudar por un lado a poder localizar servicios situados a nuestro alrededor, como se puede hacer con el uso de aplicaciones del tipo AroundMe para IPhone o a hacer “Check-in” en redes sociales comoFourSquare. Sin embargo, este tipo de localizaciones, viene apoyada por la decisión del usuario en querer ser localizado, como el caso de las aplicaciones anteriormente citadas, ya que sin esta localización, es imposible hacer uso de estas aplicaciones.

Sin querer criminalizar esta opción, también es cierto que compañías como Apple o Google, han estado tiempo atrás en tela de juicio por el uso que están haciendo con los datos que, supuestamente, acumulan. Tanto Apple con iOS como Google con Android, se han revelado como auténticas minas de datos relativos a la posición del usuario (Metadatos en fotografías, caches de localización de antenas 3G, para venderlas a la NSA/FBI/CIA, etc.)

Otra posibilidad menos conocida es la localización vía IP, esto es, simplemente por nuestra dirección IP. Tan solo con navegar por un website, por ejemplo mientras que lees esto, el propietario de este sitio puede conocer la ciudad desde la cual estás accediendo. De hecho, puedes comprobarlo simplemente visitando el sitio web de Infosniper.net:

Geo IP Localización con  infosniper

Aunque en este caso, la información únicamente es relativa a la ciudad y/o como mucho, al repetidor o Router desde el que te conectas a Internet, con esta información y una cookie (por poner un ejemplo de seguimiento anónimo) se puede saber en que ciudades ha estado una persona, y con un poco más de información, incluso se puede obtener un perfil de lugares visitados, horarios, etc.

Y como no solo de web vive el hombre, podemos dejar de pensar (o no) en webmasters “malignos” y trasladar al contacto de Messenger, Skype, o protocolos en los que se produzca en algún momento una conexión de IP a IP, la posibilidad que obtenga nuestra dirección IP (simplemente con el comando netstat o tcpdump) para saber desde donde estamos comunicando con el mismo.

Así pues, mucho cuidado al agregar a gente desconocida a messenger o similares y mucho menos enviar ficheros o realizar videoconferencias porque pueden saber por donde andamos!!

Un Saludo,

* La web de http://www.infosniper.net/ es un website externo a esta web y por lo tanto, no existe la posibilidad de que se realice intercambio de datos alguno. Además de tu propia IP, puedes usar una IP cualquiera para saber donde está (mas o menos) ubicado su propietario.

29 ago 2011

PoC - Iframe Injection

 

Buenas a todos, hace unos días hablamos en Flu Project sobre un par de inyecciones que se habían realizado a los sitios Web de Movistar y la Fundación Autor. En estos posts os comentábamos como mediante un bug en el desarrollo de los Sitios Web era posible la carga de una página externa en un iframe dentro de la Web.

Hoy os hemos preparado un vídeo en el que simularemos uno de estos ataques de Iframe Injection para robar las credenciales de autenticación a un Sitio Web mediante Ingeniería Social. Para ello, hemos hecho una copia del HTML de nuestra página, y lo hemos modificado para añadirle un bug que permita la carga de páginas externas recogidas por GET en un Iframe.

Como siempre, las pruebas se han realizado en un entorno local controlado.

Disfrutadlo:

 

[youtube TeCbORWStCI nolink]

28 ago 2011

Informe Flu - 34

Damos comienzo al resumen de la semana 34 de Flu. Disfrutad del resumen:

Lunes 23 de Agosto

Martes 24 de Agosto

Miércoles 25 de Agosto

Jueves 26 de Agosto

  • Nicomda se estrena como blogger en Flu Project con este artículo en el que nos enseña a modificar los valores de los parámetros de un videojuego en tiempo real: Modificando valores con CheatEngine

Viernes 27 de Agosto

Sábado 28 de Agosto

 

27 ago 2011

El SPAM nuestro de cada día

Que el SPAM es uno de los mayores problemas que acompaña a Internet desde que es la red de redes, es un hecho. Normalmente, cuando pensamos en SPAM, lo asociamos a una serie de correos electrónicos que nos ofrecen viagras, falsificaciones de relojes y hasta utensilios de cocina.

Si bien este tipo de SPAM ha bajado en cuanto a volumen según lo recogido en varios informes del 2010, lo cierto es que el “poco” que se recibe, ha afinado su “modus operandi” para diversificarse a otros soportes como las redes sociales o blogs.

En verdad, prácticamente cualquier cosa con capacidad de establecer un apartado para que un tercero pueda enviar un mensaje a otros, es usado para una de las artes mas perseguidas y que más rechazo provoca en Internet. Foros, comentarios de blogs, comentarios en youtube, tumblr, etc., cualquier medio es bueno para estos amigos de la publicidad no deseada.

En WordPress, existen varios plugins para luchar contra los comentarios de spammers, cuando el volumen de estos, dificultan las tareas de moderación o para cuando queremos implementar un sistema libre de moderación.

Además del efecto negativo en nuestro blog, en cuanto a imagen, que pueden ocasionar estos comentarios, hay un peligro que, si no tenemos bien configurado WordPress, nos hará bajar enteros en el posicionamiento con respecto a buscadores como Google.

Tal y como se ha dicho estos días, Google penalizará websites con faltas de ortografía (algo típico en esta clase de comentarios “spameros”). Además, el “peso” de la pagina puede llegar incluso a quintuplicarse con comentarios muy extensos y llenos de links. Esto nos hará perder posiciones en google, en favor de otros websites sin ese lastre.

Además de usar la moderación y/o un buen plugin antispam, como los que mencioné antes, hay que tener cuidado con determinados comentarios que pueden parecer legítimos y que esconden determinados links o que se hacen con la intención de provocar algún google bomb.

Por ejemplo, examinemos este comentario tan “majete” y poco sospechoso:

comentario majete

Si lo buscamos en google, posiblemente ya no nos parezca tan majete y vemos que hemos sido victimas de un spammer:

google comentario majete SPAM

Así pues, amigos blogueros, cuidado con los comentarios de esta clase, o vuestro blog se convertirá en presa de los señores del SPAM! (ala, que tremendista me ha quedado esto xD)

Saludos,

26 ago 2011

Solución al FPE1: Primer reto de Esteganografía Flu Project

Buenas a todos, ayer finalizó el primer reto de esteganografía que organizamos en Flu Project, FPE1 y hoy procederemos a publicar la solución de la prueba. Esta prueba era la primera de una serie de retos de seguridad que iremos realizando cada cierto tiempo. En cada reto tocaremos un tema diferente relacionado con el mundo del hacking, e iremos aumentando la dificultad tras cada prueba.

En el reto de esta semana os proporcionamos una imagen. La imagen contenía lo que parecía ser un código QR, pero que no era legible por los lectores de códigos QR, por lo que era de sospechar que el código no estaba bien formado.



Si alguna vez os habéis fijado en como se implementan los códigos QR, todos ellos llevan un mismo patrón, que consiste en un par de líneas de pixels que alternan los colores blanco y negro, una vertical y otra horizontal, comenzando siempre en color negro:



El código que os proporcionábamos mostraba en esta línea dos pixels seguidos de color blanco, así como el código de alineamiento invertido, por lo que contrastaba nuestra hipótesis de que el código QR no estaba bien formado.



Para visualizarlo correctamente simplemente había que invertir los colores blanco y negro en toda la imagen, exceptuando los cuadrados grandes. Podíais utilizar por ejemplo la función para invertir colores de Paint:


Ahora si leemos el código con un lector QR veremos el siguiente mensaje (parte segunda del reto):

Dljsoanfdlae Ja; ra;ahs dp odks

Para esta parte del reto necesitamos por ejemplo una tabla de conversiones o de teclados Dvorak-Qwerty como la siguiente:


El mensaje se encontraba escrito con un teclado DVORAK y codificado a QWERTY, así que para decodificarlo bastaba con ir sustituyendo las letras del mensaje en QWERTY por su equivalente en DVORAK (la "D" por la "E", la "l" por la "n", la "j" por la "h", etc.) para ello podéis utilizar alguna herramienta como ésta.

Tras la decodificación se veía claramente el mensaje:

Enhorabuena. Has pasado el reto

¿No era tan difícil verdad? Esperamos que os haya gustado el reto :-)

Para el próximo reto seleccionaremos otra rama diferente de la seguridad, para que podáis jugar con retos de todo tipo y subiremos un poco la dificultad ;)

un saludo!



25 ago 2011

Modificando valores con CheatEngine


Puede que os suene el programa Cheat Engine, si habéis intentado trucar juegos como el Metin 2, o el Farmville de Facebook. Pero hoy, vamos a hacer algo distinto.¿Alguna vez habéis pensado como funciona un juego de PC por dentro?¿Como almacena el número de objetos o de balas que tenemos?Pues bien, esos valores se almacenan en direcciones hexadecimales, durante la ejecución del proceso, y vamos a cambiarlos con cheat engine. Además, no penséis que solo sirve para juegos antiguos, si no que podemos hacer un “hack” en los más nuevos. Yo hoy voy a utilizar Call of Duty Black OPS, ya que era el que tenía instalado en el PC.Realmente, Cheat Engine, es un programa de búsqueda y modificación de valores en los procesos de Windows. Tiene varios filtros de búsqueda y demás para configurarlo, pero la verdad es que es un programa muy interesante si se le dedica algo de tiempo.Lo primero que tenemos que hacer, es instalarte Cheat Engine. DESCARGA CHEAT ENGINE
Una vez instalado y abierto, elegimos el juego que vamos a usar para el “hack”, en este caso, Call Of Duty Black OPS y lo ejecutamos también. Tras abrir el juego y empezar una partida, nos vamos a fijar por ejemplo en las balas que tiene nuestro arma.


Como podemos observar, me quedan 28 balas, así que pausamos el juego y salimos al escritorio con el botón WIN. Ahora en el CE (Cheat Engine), pulsamos en el botón de arriba a la izquierda que está marcado en rojo en la imagen siguiente, y se nos abrirá la lista de procesos. Evidentemente seleccionamos el de Call of Duty.


Una vez seleccionado, nos vamos al apartado “Value” y tendremos que buscar el valor que queremos modificar, en mi caso, 28 y le damos al botón que pone “First Scan”. Las opciones de debajo no hace falta tocarlas.


SE escaneará los valores del ejecutable y nos saldrá una lista con las direcciones hexadecimales a las que apuntan a la izquierda. Evidentemente saldrán bastantes direcciones con el mismo valor, así que volveremos al Call of duty, y pegaremos un par de tiros para que el valor de las direcciones correspondientes a las balas varíe, y volvemos a escanear los valores, pero esta vez pulsaremos “Next Scan” para que nos escanee solo los que anteriormente marcaban 28.


Repetimos este proceso hasta que ya no se eliminen más direcciones, a mi me han quedado 36 (Normalmente salen menos, 2 o 3, pero al elegir un juego tan grande, maneja más valores). Pues bien, seleccionamos los valores que nos quedan y le damos a la flechita roja que hay abajo a la derecha del cuadro donde se muestran, y estos pasarán a la parte de abajo. Volvemos a seleccionarlos todos en la parte de abajo, y con el botón derecho buscamos la opción de cambiar valor.


Nos saldrá una ventana con un cuadro con el valor actual, y lo modificamos con el número que queramos.


Volvemos al Call of Duty, que seguirá minimizado y VOILÁ, si todo ha ido bien tendremos nuestra arma con 2000 balas!!


Podéis probarlo tanto con las balas, como con granadas, e incluso modificar la capacidad del cargador del francotirador, que es muy cómodo disparar 50 balazos sin recargar siquiera. Lamentablemente, y como era de esperar, no funciona en el modo multijugador, ya que los servidores tienen protección para todo esto, pero realmente nos facilita las cosas en el modo en solitario.En este post hemos usado CheatEngine sobre un juego, pero sabiendo donde y como, os habréis dado cuenta que tocando un poquito las opciones, este software puede servirnos para cosas algo más "malignas".

24 ago 2011

Nuevo intento de Phising a los usuarios del banco BBVA

Buenas a todos, aunque ciertas personas quieran evitar que enseñemos a los usuarios como se realiza un phising para que aprendan a protegerse de una manera adecuada, es una realidad que existen numerosos casos de phising, y seguirán existiendo, mientras esta sencilla forma de "timar" a los usuarios de Internet, siga siendo rentable.

Hoy os traigo una captura de pantalla tomada ayer mismo de mi cuenta de correo personal donde recibí un email de un intento de phising a los usuarios del banco BBVA con tarjeta VISA ORO o sin ella:

 

Analicemos el correo para ver que datos nos hacen ver que se trata de un intento de estafa:

  1. La dirección del email no es ni tan siquiera del dominio bbva.es/.com
  2. Contiene numerosas faltas de ortografía, por lo que intuimos que los estafadores no son ni españoles ni de ningún otro país de habla hispana.
  3. El HTML del correo es muy simple, con el texto dentro de un marco, sin membretes del banco ni imágenes de anuncios propios.
  4. Si pasáis el ratón por el link al BBVA, nos lleva a una dirección totalmente distinta donde se encontraría la página maliciosa.
  5. Finalmente ¿Creéis que algún banco nos regalaría 1500€, si no nos dan ni un bolígrafo de propaganda? }:-P

Ya he reportado la suplantación de identidad, aunque imagino que el equipo de respuesta de BBVA ya habrá tomado las medidas pertinentes al respecto (un saludo desde aquí)

Este caso no es el primero sobre phising que os mostramos en Flu Project, recordaréis el caso de "gusanito.com" donde intentaban utilizar un mensaje de actualización de Adobe Flash Player para que el usuario hiciese clic en un enlace.

Así que si no queréis que os pase lo de a nuestro amigo en el "Santoandres..." :), echad un vistazo a nuestra serie "Phising, puro fake"

Sentido común ante estos email,

saludos!

23 ago 2011

File Carving – Excavando en los ficheros

Hola hoy veremos lo que es File Carving, algunas herramientas, pros y contras. Pero primero definamos que es.

El File carving lo podemos definir “entre cuates” como el proceso de excavación de ficheros en búsqueda de mas ficheros agregados basándonos en su estructura. (Para una definición mas formal pueden consultar ForensicsWiki).

En ámbito Forense esta rama es muy importante, pero nosotros lo veremos enfocados a la Esteganografía. El uso de File carving en la Esteganografía nos ahorrara mucho tiempo si lo sabemos utilizar adecuadamente. Para los gustosos de wargames, este es el secreto para hacer retos rapidos :P

Obviamente para estos procesos existen diversidad de programas, pero nosotros veremos 2 de los mas famosos.

Entender como trabaja este tipo de “file carving” sera escencial para nosotros, ya que con uso de programas como foremost o scalpel, tendremos 2 posibles tipos de resultados:

  1. Nos automatiza EXITOSAMENTE todo el trabajo de extracción de archivos agregados por la tecnica EOF.
  2. Nos lanza monton de Falsos Positivos.

Para entender esta cuestion sera necesario destacar que tanto foremost como scalpel, trabajan con archivos de configuracion; foremost.conf y scalpel.conf respectivamente.

¿Pero que contienen estos archivos?

 

Aparte de contener muchos comentarios en explicaciones, contienen una mini base de datos de Headers & Footers. Osease que este tipo de file carving se basa en la busqueda de cabeceras que estan definidos por una serie de bytes. Si la cadena de bytes se encuentra se busca si tiene un footer en dado caso y se guarda.

El de foremost luce de esta forma:

¿Limitaciones?

 

Bastantes puesto que si nuestra base de datos no contiene nuestro “Numero Mágico” (Firma de archivo en la cabecera) no sera identificado y por ende no sera descartado.

Ahora pasemos a ver 3 categorias. 1)El uso de foremost 2)El uso de Scalpel 3)Una limitacion y solucion propia

 

1)Foremost

 

El uso de foremost es muy sencillo, simplemente es pasarle de argumento el archivo a procesar y automaticamente se generara una carpeta llamada “output” que contendra los archivos encontrados y un fichero de texto llamado “audit.txt” que es el resumen del proceso.

1
foremost imagen.png

Foremost tambien tiene algunas opciones faciles como (-t TipoDeFichero) que nos permite definir que archivos nos interesa. -o que nos dice la carpeta destino, en este punto es importante definir que si se encuentra actualmente una carpeta “output” y volvemos a correr foremost, nos dara error y habra que definir otra carpeta destino.

Foremost es mi preferido por su facilidad, rapidez y eficacia :D

 

2)Scalpel

 

Scalpel a diferencia de foremost es un poco mas complejo de usar, puesto que tenemos que definirle ciertos parametros. Pero antes de empezar debo comentar que al hacer este tutorial visite la pagina de scalpel y me lleve una sorpresa al saber que hay una nueva version 2.0 liberada apenas en abril. Asi que recomiendo actualizar ya que la mayoria de distribuciones que la tienen contienen la version 1.6. Yo en mi gestor de paquetes no encontre scalpel actualizado, asi que desinstale y la compilacion fue sumamente sencilla.

1
./config && make

Bueno antes de utilizar scalpel a diferencia de foremost hay que modificar el fichero de configuracion (scalpel.conf) puesto que todo viene comentado y habra que descomentar los patrones.

Una vez realizada esta tarea veamos el uso basico de scalpel

1
scalpel -c scalpel.conf imagen.png

A diferencia de foremost, scalpel pide incluyas con el parametro “-c” el archivo de configuracion. ¿Me pregunto por que no lo hace por default? Y bueno al final nos crea una carpeta “scalpel-output” donde estara lo que encontro.

A mi parecer scalpel requiere de mas trabajo para funcionar correctamente a diferencia de foremost. Y mas aun no siempre eh obtenido los resultados deseados.

 

3)Ni scalpel ni foremost. Nuestro “carver casero”

 

En ámbitos forenses reales podemos encontrarnos con ciertos casos en los que un file carver es necesario para la automatizacion de extraccion de archivos, sin embargo podemos vernos ante una situación donde una persona agregue al final de un archivo, informacion extra PERO CIFRADA.

¿Cual es el problema?

Nuestro problema aqui es que al estar cifrado ninguno de los archivos de configuracion de nuestro “file carver” favorito tendra la secuencia de bytes para identificarlo. Esto se convertira en una exclusion inmediata y nosotros ni en cuenta de la existencia de esa informacion si no lo analizamos manualmente.

¿Aún no me creen?

Pongamoslo mas facil; si nosotros tenemos un archivo de texto y lo juntamos al final de un PNG, el file carver no lo detectara puesto que un texto puede iniciar de diferentes formas y por ende con diferentes bytes por lo que no sera identificado. Veamos el ejemplo con foremost y scalpel:

Foremost lo descarta automaticamente dejando solo la imagen y al final lo borro y scalpel no encontro nada (con la opcion -b recuperaria la imagen tal como esta, osease solo la copiaria). Pero ninguno de los 2 lo identifico como archivo de texto externo.

El problema es que SI NO SE ANALIZA MANUALMENTE no nos daremos cuenta de la existencia del mensaje. Ok ¿aun no se ve la relevancia de este problema? Veamos un ejemplo de lo que podria pasar:

Supongamos tenemos 50 imagenes png diferentes y 50 textos con mensajes supersecretos diferentes. Los tengo nombrados de la forma imagen1.png imagen2.png … imagen50.png y los textos igualmente mensaje1.txt …etc…

Si yo hago esto:

1
for i in {1..50};do cat imagen$i.png mensaje$i.txt > imagen$i.png;done

Con esto estoy adjuntando cada mensaje en la imagen y sustituyendo la imagen original por la esteganografeada.

Ahora le pasamos el file carver a cada archivo y en el caso de foremost excluira cada mensaje. Scalpel probablemente los dejara pero no nos alertara. Asi que podriamos tener 50 mensajes pasando delante del analista si solo se limita al uso de “file carver”. (Claro con un strings saldrian todos los mensajes)

¿Solución?

En este caso podemos hacer algo sencillo. En mi caso se me ocurrio un script que junto con foremost nos puede brindar grandes beneficios. Una vez se pasa foremost y se encuentra el archivo hace una comparacion de lo encontrado con el original, si hay diferencia de bytes lo recupera.

Para esto hare uso de este pequeño script que hice en python:

1234567891011121314151617
#!/usr/bin/env pythonimport syssteg = open(sys.argv[1],"rb").read()original = open(sys.argv[2],"rb").read()lensteg = len(steg)lenorig = len(original)if(lensteg!=lenorig):print "Inconsistencia en peso."print str(lensteg-lenorig)+" bytes sobrantes"sobrante = open("Sobrante.hex","wb")tmp=""for i in range(lenorig,lensteg,1):tmp+=steg[i]sobrante.write(tmp)sobrante.close()else:print "Archivos con Peso identico"

Ahora lo primero sera ocultar algo…Para este ejemplo usare un PDF y al final le agregare un texto de nuevo (Notese aqui podria ser un archivo cifrado). Después le paso foremost y me recuperara NADA MAS EL PDF. Y aqui sera el momento de usar el script ./carver.py pasandole como argumento1 el archivo esteganografeado y como argumento 2 el original(el recuperado por foremost).

12345
echo "Neobits.org Esta ocultando un mensaje super secreto ;)" >> algo.pdf foremost algo.pdf./carver.py algo.pdf output/pdf/00000000.pdf

Aqui ya nos dice que SI EXISTE una inconsistencia (55 bytes). Y se salvo en Sobrante.hex, ahora si vemos el peso de sobrante y vemos su contenido nos encontramos con:

Y Listo!!! Vemos que quedo de maravilla. Rapidamente pondre una serie de screenshots demostrando como recuperaria un archivo cifrado con 100% exito.

 

<Prueba Archivo cifrado>

1.-Imagenes2.-Cifrar katy2.png con un XOR ^0×203.-katy2.png cifrado4.-File carving con foremost5.-Recuperacion con ./carver.py6.-Xor ^0×20 para recuperar7.-Imagen recuperadaY como vemos todo salio a la perfección. Nos fue factible recuperar un archivo cifrado por medio de “File carving” aunque no estuviera definido por estructura el fichero =)

 

Sin extenderme mas espero este articulo les agradara y quedara claro el objetivo del articulo. Cualquier comentario Bienvenido.

Saludos ;)

Atte. hecky

hecky@neobits.org

Sigueme en twitter: http://twitter.com/hecky

22 ago 2011

Curso de introducción a Android III (Escáner de redes WIFI)

 

Después de haber aprendido la estructura de un proyecto Android y de haber hecho nuestra primera aplicación, vamos ahora a ponernos con cosas un poquito más serias. En esta tercera entrada, propondremos la realización de una aplicación que haga una búsqueda de las redes Wifi que tenemos a nuestro alrededor y que nos muestre sus parámetros, como por ejemplo el ssid y qué seguridad utilizan. La aplicación resultante debe tener la siguiente apariencia.

clip_image002

Nos ponemos manos a la obra y creamos un proyecto en Android cuyo nombre sea Ejercicio2, como paquete com.fluproject.Ejercicio2, su target Android 2.2 y no nos olvidamos de indicarle que queremos una clase principal llamada Main (si alguien no recuerda como se hace todo este proceso que le eche un vistazo a las dos entradas anteriores).

Diseñando la interfaz de la actividad Main:

Una vez tenemos nuestro proyecto creado nos vamos a poner a modelar la interfaz de la aplicación. Vamos a empezar por la primera actividad (clase Main) que, tal y como observamos en la imagen anterior, tendrá como elementos una imagen (ImageView) y un botón con funcionalidad (Button). Lo primero que debemos hacer es meter las imágenes del archivo resources, que os adjuntamos en la entrada, a la carpeta /res/drawable-hdpi/. Vamos ahora al fichero que define la interfaz de nuestra actividad Main main.xml y lo dejamos con esta pinta:

clip_image004

Como podemos ver en el código del main.xml, tenemos un LinearLayout principal que contendrá la imagen del banner de fluproject y otro LinearLayout. El segundo LinearLayout contendrá un TextView con el texto "Escanea Wifi" y un Button con forma de imagen. El motivo de separar la interfaz en dos LinearLayout es conseguir darle gravedad sólo al segundo LinearLayout (android:gravity="center") de forma que sólo se centren en la pantalla el TextView y el Button. Una vez definida la interfaz, pasamos ahora a darle lógica.

Definiendo la funcionalidad de la actividad Main:

La funcionalidad de esta actividad es bastante sencilla, exactamente igual que la que utilizamos el otro día para nuestra primera aplicación. La única diferencia es que aquí, además de mostrar un mensaje de texto, crearemos una nueva actividad y la mostraremos. A modo de recordatorio, las actividades (Activity) se corresponden con las pantallas que tendrá nuestra aplicación. En la navegación por pantallas, Android trata las actividades mediante una pila de actividades, de forma que siempre estaremos visualizando la actividad superior de dicha pil, la que se encuentre en la cima. Cuando arranca una nueva actividad siempre se pone en la cima de la pila, en primer plano. Cuando pulsamos el botón 'atrás' estaremos realizando una acción equivalente a 'desapilar' , cerraremos la actividad actual y mostraremos la actividad que esté en la cima de la pila. Si no hay ninguna actividad más, saldremos de la aplicación.

clip_image006

Volviendo a la lógica de la actividad Main, tendremos una clase Main.java con esta apariencia:

Como vemos implementamos de OnClickListener para escuchar eventos del Button que hemos definido para escanear. En el método onClick vemos que al pulsar el Button (con id button1 en nuestro main.xml) sacamos una alerta textual por pantalla con contenido "Escaneando redes wifi..." y que además creamos una nueva actividad por medio de la clase Intent:

Intent wifiList = new Intent(this, Wifilist.class);startActivity(wifiList);

Al constructor de la clase Intent, clase responsable de crear la nueva actividad, le indicamos la actividad origen y la actividad destino que queremos que se muestre a continuación, que será la actividad Wifilist, la cual todavía no hemos definido ni como actividad ni como clase. Para definir la actividad Wifilist tenemos que crearnos una nueva actividad que se compondrá de una clase Wifilist.java y de un fichero xml wifilist.xml (por convenio de nombres vamos a intentar siempre llamar a la clase de la actividad y a su fichero xml igual, salvo que la primera letra del nombre de la clase será mayúscula y la primera letra del nombre del fichero xml será minúscula):

  • Creamos una nueva clase en nuestro paquete com.fluproject.Ejercicio2 de la siguiente forma: Botón derecho del ratón sobre el paquete, New - > Class, en SuperClass escribimos android.app.Activity , le damos un nombre Wifilist y a aceptar. Una vez creada, pinchamos con el botón derecho del ratón sobre la clase, Source -> Override/Implement Methods y seleccionamos el método onCreate(Bundle).
  • Una vez creada la clase creamos su fichero wifilist.xml, para ello nos vamos a la carpeta /res/layout pulsamos el botón derecho del ratón y seleccionamos New->Android XML File, le damos como nombre wifilist y finalizamos.
  • Una vez creada la actividad debemos definirla en el fichero AndroidManifest.xml. Abrimos dicho fichero, nos vamos al apartado Application y bajamos a la sección Application Nodes. Ahí podemos observar como tenemos solamente una actividad declarada, la actividad Main. Para declarar la actividad Wifilist pulsamos Add... -> Activity y rellenamos sus propiedades a la derecha. Sólo pondremos el nombre de la actividad Wifilist y comprobamos que se cambia en el cajetín de Application Nodes.

Diseñando la interfaz de la actividad Wifilist:

Como pudimos observar en la imagen del principio, nuestra segunda pantalla tendrá una lista con todas las redes wifi que nuestro móvil haya encontrado. Luego el fichero xml que define la actividad Wifilist wifilist.xml tendrá la siguiente apariencia:

Como podemos observar tiene un LinearLayout con un único componente ListView.

Cada elemento de la lista también debe tener un aspecto, en nuestro caso no van a ser elementos simples, como podemos observar en la imagen del principio tendremos más de un elemento en cada item de la lista (ssid y seguridad), además estos elementos varían en tamaño y en color luego habrá que hacer otro proceso de definición antes de ponernos con la lógica. Este proceso pasa por definirnos otro fichero xml, de la misma forma que nos definimos el anterior, que contendrá el aspecto de cada item de la lista, el fichero se llamará elementitems.xml y tendrá este aspecto:

clip_image012

Como podemos ver, disponemos de un LinearLayout que alberga dos TextView, el primero hace referencia al ssid de la red y el segundo a la seguridad que tiene configurada. Y con esto ya tendríamos diseñada la interfaz de nuestra actividad Wifilist.

Definiendo la funcionalidad de la actividad Wifilist:

Lo primero que vamos a hacer para definir la funcionalidad de Wifilist es crearnos una clase básica en Java llamada Element. Como hemos dicho anteriormente nuestra lista no va a contener items simples sino que contendrá items compuestos por dos TextView, esto debemos modelarlo en una clase. La clase Element estará ubicada en el paquete com.fluproject.Ejercicio2 y tendrá la siguiente apariencia:

clip_image014

En la clase Element tendremos dos atributos uno será title que hará referencia en un futuro al SSID de la red, y el otro subtitle que hará referencia a la seguridad de la red. Además tendremos dos métodos para obtener tanto el atributo title como el subtitle.

A continuación, vamos a intentar explicar el código que debe tener la clase Wifilist.java en tres partes para intentar aclarar la funcionalidad.

clip_image016

Empezaremos nuestro código Wifilist.java definiendo tres atributos de clase: nets -> array de objetos Element que se encargará de guardar las redes descubiertas y posteriormente pasarle la información a un ArrayAdapter para que la lista pueda ser construida; manWifi -> Objeto de la clase WifiManager que nos permitirá acceder a la interfaz Wifi de nuestro dispositivo móvil y utilizar su funcionalidad; wifiList -> Objeto de la clase List donde guardaremos los Strings en bruto resultado de un escáner wifi.

Punto 1: En este punto llamamos a la interfaz wifi de nuestro dispositivo móvil y guardamos el resultado en el atributo manWifi. Posteriormente realizamos el escáner de redes mediante el método startScan() de la clase WifiManager y por último guardamos el resultado en bruto en nuestro atributo wifiList por medio del método getScanResults().

Punto 2: En este punto vamos a parsear la información que nos interesa del resultado del escáner guardado en bruto en el atributo wifiList. Recorreremos la lista wifiList, rescataremos la información que nos interesa de cada red (ssid y security) e iremos creando objetos Element y guardándolos en nuestro atributo nets. Una vez parseada y guardada toda la información resultante del escáner cargaremos a nuestra actividad la interfaz correspondiente wifilist.xml. Después crearemos un array adaptador AdapterElements de objetos Elements para nuestra lista que definiremos en el Punto 3.

Punto 3: Nos definimos una clase llamada AdapterElements que herede de ArrayAdapter. Esta clase nos va a servir para construir nuestra lista a partir del atributo nets. Esta clase tendrá un sólo atributo context que indicará el contexto donde se va a construir la lista, en la actividad presente. Como podemos observar AdapterElements tiene un constructor de clase que llama a su clase padre ArrayAdapter y un método getView. El método getView es el que se encarga de visualizar los elementos del atributo nets en forma de ListView. getView será llamado tantas veces como posiciones tenga nuestro atributo nets, además getView nos proporciona un parámetro position que nos servirá de índice para obtener toda la información de nets. Dentro de getView formamos nuestro item cargando el fichero elementitems.xml mediante el método inflate de la clase LayoutInflate, después sólo manipulamos el contenido textual de los TextView en función del valor de nets y listo!

Ya tenemos nuestra aplicación completamente diseñada, sólo nos queda un pequeño detalle, decirle al AndroidManifest.xml que nos deje utilizar el wifi de nuestro dispositivo móvil. Para ello nos vamos al fichero y añadimos los siguientes permisos tal y como explicamos en la entrada anterior:

android.permission.ACCESS_WIFI_STATEandroid.permission.CHANGE_WIFI_STATE

Esperamos que os haya gustado y os animamos a seguir, a preguntarnos todas las dudas que tengáis y a criticarnos (siempre de forma constructiva claro :D ) , si conseguís hacer y comprender este ejercicio estaréis ya a un nivel muy aceptable para programar aplicaciones en Android. ¡Un saludo!

Descarga Proyecto

Descarga Recursos

===============================================================

Curso de introducción a Android (Instalación del Android SDK + Hello World)

Curso de introducción a Android II (Creando nuestra primera aplicación)

Curso de introducción a Android III (Escáner de redes WIFI)

Curso de introducción a Android IV (Crackeando redes Wifi)

===============================================================

 

 

21 ago 2011

Informe Flu - 33

Damos comienzo al resumen de la semana 33 de Flu. Disfrutad del resumen:

Lunes 15 de Agosto

  • Jordisk publica un post resumiendo los pasos principales para Crackear WEP

Martes 16 de Agosto

Miércoles 17 de Agosto

Jueves 18 de Agosto

Viernes 19 de Agosto

Sábado 20 de Agosto

 

20 ago 2011

10 aplicaciones para mandar mensajes gratis

Cada vez somos más los que nos comunicamos casi exclusivamente vía SMS en vez de llamadas, tanto por el costo de los mismos como por un tema de comodidad. Ahora gracias a la variedad y cantidad de aplicaciones que tenemos disponibles para las diferentes plataformas, les dejamos una lista de 10aplicaciones para iPhone, Android, BlackBerry y Symbian, que permiten enviar SMS gratis haciendo uso de los planes de datos que pagamos mensualmente. Hoy realmente podemos hacer uso de los paquetes de datos que pagamos todos los meses y que hacen que nuestros smartphones se vuelvan realmente útiles, y aprovecharlos para las comunicaciones cotidianas, como justamente los SMS, uno de los métodos -sino el más- utilizados en todo el mundo. Les dejamos entonces la lista de las 10 aplicaciones más utilizadas que permiten únicamente consumir datos para enviar SMS y MMS:

 
1) WhatsApp ((iPhone / BlackBerry / Android / Symbian)
La aplicación más popular en estos momentos para enviar mensajes con nuestros contactos. Obviamente requiere que ambos usuarios tengan esta aplicación instalada, pero es multi plataforma, lo que la hace una de las más útiles. Hay que tener en cuenta que en algunos equipos consume muchos datos porque no se puede desconectar, pero en otros equipos puede utilizarse incluso vía WiFi, sin siquiera consumir datos del móvil.
2) Pingchat (iPhone / BlackBerry / Android)
Es una gran alternativa, muy similar al estilo de Whatsapp, sólo que no funciona con Symbian, aunque funciona con todas las versiones de Android.
3) TextNow (iPhone / iPod Touch / iPad)
Esta aplicación de mensajes de texto gratuitos, va dedicado exclusivamente para los usuarios de iOS en todas sus variantes.
4) Hello Messenger (iPhone / iPod Touch / BlackBerry / Android)
También hablamos de una aplicación multi plataforma, aunque no está disponible para Symbian y requiere de Android 2.1 o superior para poder funcionar.
5) CloudTalk (iPhone / Android / Web)
Una gran aplicación que además de funcionar con las dos plataformas más populares también funciona desde la web, con lo que se puede aprovechar desde prácticamente cualquier teléfono mientras tengamos conexión.
6) KakaoTalk (iPhone / Android)
Otra aplicación que permite realizar la misma función, además de que permite personalizar la pantalla de los chats, aunque no está disponible para BlackBerry ni para Symbian.
7) Kik Messenger (Android / iPhone)
De nuevo una aplicación simple que cumple su función permitiendo enviar SMS vía datos, pero que  nofunciona con BlackBerry ni con Symbian.
8) GroupMe (iPhone / iPod Touch / iPad / BlackBerry / Android)
Esta es una de las aplicaciones multi plataforma menos reconocidas, pero que cumple las mismas funciones que WhatsApp, además de permitir llamadas grupales y conferencias individuales.
9) LiveProfile (iPhone / iPod Touch / iPad / Android / BlackBerry)
Además de su función principal de permitir mandar mensajes de modo gratuito, y funcionar con BlackBerry, también permite manejar los contactos de nuestra agenda y de Facebook.
10) Beluga (iPhone / Android)
Esta aplicación fue adquirida por Facebook hace muy poco, con lo que agrega la particularidad de manejarnos con los contactos de la red social más popular.
Como podéis ver existen muchísimas alternativas al ya conocido Whattsapp con el inconveniente que éste es el mas conocido y el que acostumbran a instalar los usuarios de smartphones con plan de datos.
¿Con cual te quedas?