miércoles, 28 de agosto de 2019

API de geolocalización de Google y sus peligros

Pongámonos en una de las siguientes situaciones:

  • Eres un gran hacker: el p*** amo hackeando redes WI-FI y decides compartir capturas de pantalla/tutoriales de como usas Aircrack-ng o similares
  • Estas usando una aplicación para analizar redes wifi cercanas ya sea en PC o smartphone (Ej: Acrylic WI-FI) y compartes capturas de pantalla de la aplicación
  • Compartes las direcciones MAC de routers WI-FI cercanos de cualquier otra forma (Ej: te engañan mediante ingeniería social)
Suponemos que de alguna de estas formas compartimos las direcciones MAC de routers WI-FI cercanos y las hacemos publicas, no las tachamos ni ocultamos. ¿Que puede pasar?

Comprobamos lo fácil que es encontrar gente compartiendo esta información a través de la red social Instagram, donde comparten por ejemplo capturas de Airodump-ng.
Bueno, pues sin saberlo están compartiendo el lugar donde están/viven/hacen cosas malas. ¿como es posible?

Esto es gracias a la API de geolocalización de Google, la cual mediante las señales de los WI-FI y triangulación permite ubicarnos geográficamente a pesar de no tener GPS. ¿habeis probado alguna vez a pedirle a Google Maps vuestra ubicación desde PC? notaréis que os localiza con gran precisión.

Y es que solo hace falta saber unas pocas direcciones MAC de routers cercanos y Google ya es capaz de localizar la posición con un error de 10-50 metros. ¿Notáis el peligro?
Vamos a probarlo. Ejecutamos la siguiente petición con los datos de 3 direcciones MAC que hemos obtenido en un post de Instagram:
Y obtenemos la siguiente respuesta:
Si añadimos mas direcciones MAC aumentaremos la precisión, aunque con solo 3 ya tenemos un radio de error de tan solo 37 metros.
Ahora buscamos las coordenadas en Google Maps (o Bing Maps o donde querais) y voilà! localizado.
Os animo a jugar un poco con esto y a localizar a distintos jaquers ;)
(SIN IR CON MALAS INTENCIONES)

sábado, 10 de agosto de 2019

Mis filtros AR de Instagram

¡Es una realidad! Formo parte de la beta AR de Facebook, lo que me permite no solo desarrollar sino también publicar filtros AR para las historias de Facebook e Instagram.
Seguramente si sois usuarios de Instagram hayáis seguido alguna cuenta por el hecho de que al seguirla os aparecen nuevos filtros para las historias. Bueno, pues ahora yo también soy una de esas pocas personas, de hecho en España probablemente no seamos ni 50 (En realidad no tengo ni idea, aunque en los grupos solo participa gente extranjera).
Pero hay un problema: no tengo manera de promocionarme, y esta última semana apenas he ganado entre 10 y 20 nuevos seguidores y todos son guiris, así que aquí estamos de nuevo... Otro intento fallido de convertirme en influencer tras el fracaso de mi canal de Lloutuve, y el #UnfollowProjectFest (En realidad este último si que tuvo bastante exito).
En fin, en el primer vídeo podéis ver como son mis primeros filtros, y en el siguiente podéis ver un experimento AR cutre que hice en un par de horas en el que puedo controlar un coche RC virtual superdetallado diseñado en mi querido Google Sketchup (Sí, sigo usando la versión 8, la última que hizo Google).

Resumen:
Spiral: Genera una espiral en movimiento alrededor del cuerpo (varios colores para elegir, se puede cambiar el tamaño pellizcando la pantalla)
Puzzle: Convierte la imagen de la cámara en un puzzle de tamaño a elegir (3x3 - 4x5) que se mezclará y resolverá con movimientos aleatorios que serán cada vez distintos.
Frame: La imagen de la camara aparece en un pequeño rectangulo, circulo, o rombo con 3 colores a elegir (tocando la pantalla se cambian, pellizcando la pantalla se cambia el tamaño)
Malefica: Te convierte en la villana de moda de Disney
Lovely: Aparecen corazones detrás de ti y aplica un filtro rosado.
Mirrors: La imagen de la cámara aparece 4 veces haciendo zoom en zonas aleatorias de la pantalla
OldTV: Simula el efecto pixelado y curvo de los antiguos televisores CRT
Construction: Como el Minecraft pero en AR
Noise: Aplica ruido aleatorio a la imagen. (Se puede variar la intensidad)
Nebulosa: Combina la imagen de la cámara con la de distintas nebulosas que se pueden cambiar tocando la pantalla
Dithering: Aplica pixelado Dither a la imagen de la camara. Se puede cambiar el color y el tamaño de los pixeles pellizcando la pantalla LEDStarIG: La versión descafeinada de mi efecto LEDStar en Facebook en la que no se puede escribir texto personalizado. Versión de FB: https://www.facebook.com/fbcameraeffe...
Heather: Aplica distintos colores con la intensidad deseada sobre la imagen
CelShading: Aplica efecto posterizado a la imagen
Mosaic: La imagen de la camara aparece formada por pequeñas versiones coloreadas de la imagen de la cámara que cambian de tamaño al abrir la boca
Area51: Te convierte en un alien. Si en la cámara hay una segunda persona, la convierte en un alien aun más feo.
LeTRIX: letras verdes que caen que nada tienen que ver con una película conocida y por lo tanto no hay problemas de derechos de autor.
JustMe: Aplica distintos efectos al fondo detrás de ti: Blanco y negro, desenfoque, lineas horizontales, etc...
SpaceLander: 3 niveles de aterrizaje lunar. Girar la cabeza para girar la nave, y abrir la boca para propulsar
NotHuman: Aquí tampoco estoy mencionando ninguna peli de Holliwood. Como curiosidad que nadie ha notado, si cierras el ojo izquierdo se apaga la luz roja.
Fantasy: Efectos de color fantasiosos. Si tocas la pantalla se intensifican
LaserEyes: Cerrando los ojos se activa y desactiva el laser. Tocando la pantalla se cambia el color
TearDrops: Te hace llorar de lo cutre que es el filtro. Abriendo la boca se intensifican las lagrimas (una versión mejorada iba a ser subida pero los moderadores de Facebook no ven bien un filtro en el que sales llorando)
LoveShooter: Otro juego para pasar el rato. Comentad abajo hasta que puntuación habeis llegado. No me hago responsable si os partis el cuello por el nivel 74 (La velocidad sube cada vez más y no he puesto límite por lo que a partir de 50 ya es practicamente imposible). Ahh si, teneis que girar la cabeza para mover la mira y mantenerla 1 segundo en los corazones para hacerlos desaparecer
Thug-Life: Cierra los ojos y veras unas gafas pixeladas caer.

jueves, 28 de marzo de 2019

CTurtle: una buena forma de aprender C con la tortuga de LOGO

Ver CTurtle en mi GitHub
Es posible que algunos conozcáis el lenguaje de programación LOGO, puesto que se enseña/enseñó en algunas escuelas para empezar a aprender programación. Consiste en un lenguaje de programación donde básicamente mueves una tortuga con un lápiz en un entorno gráfico, con comandos como hacer avanzar la tortuga (fd) o hacer girar la tortuga (rt, lt). Esto esta muy bien, pero tiene un inconveniente: una vez dominas el lenguaje, no te va a servir para nada más aparte de mover la tortuga.
Aparte de esto, la mayoría de los interpretes de LOGO son antiguos, no tienen antialising en el dibujado, e incluso algunos ni siquiera son compatibles con los procesadores de 64 bit actuales.
Pues aprovechando estas vacaciones de navidad, he creado una librería para C muy fácil de utilizar que os permitirá hacer dibujicos de la misma manera que se hace en LOGO en el lenguaje de programación C.
Esta librería consta únicamente de 2 archivos turtle.cturtle.h aparte de la librería SDL, y tiene una implementación propia de antialising (En la cual dediqué gran parte del tiempo) y es compatible con Windows, Linux (Incluyendo Raspberry Pi), e imagino que en Mac también.

Ej:
El programa de la imagen sería el siguiente:

#include <stdio.h>
#include "turtle.h"
void fern(int size, int sign);
void fern(int size, int sign)
{
if (size<1) return;
t_penSize(size/4);
t_forward(size);
t_turnRight(70*sign);
fern(size/2,sign*-1);
t_penSize(size/4);
t_turnLeft(70*sign);
t_forward(size);
t_turnLeft(70*sign);
fern(size/2,sign);
t_penSize(size/4);
t_turnRight(77*sign);
fern(size-1,sign);
t_turnRight(173*sign);
t_penUp();
t_forward(size*2);
t_penDown();
t_turnLeft(180);
}
int main(int argc, char ** argv)
{
if (t_init(640,480,window)!=0) puts("Init error");
else {
t_autoframeOff();
t_moveSpeed(200);
t_turnSpeed(0);
t_penUp();
t_goTo(192,450);
t_setAngle(0);
t_penDown();
t_turColor(0,60,0);
fern(25,1);
t_frame();
t_saveBMP("fern.bmp");
t_idle();
}
}

Aparte de las instrucciones básicas como t_forward y t_turnRight también tenemos otras instrucciones opcionales como t_autoframeOff, t_moveSpeed y t_turnSpeed relacionadas con la animación, y otras instrucciones de utilidad interesantes como t_saveBMP que guarda en un archivo BMP el contenido de la pantalla.
La librería esta totalmente documentada en cualquier caso. Si aun así tenéis dudas o sugerencias, me las podéis comentar por aquí.