It should work…

Cuando cualquier trasto es útil

It should work… header image 1

Resolución de conflictos, es decir, cómo no perder nunca al 3 en raya

February 4th, 2010 · 6 Comments · Opinión, personal

A menudo, ya sea con amigos o no, nos encontramos con situaciones en las que no hay vuelta atrás, uno opina una cosa, otro otra, y eso no va a cambiar. Pero queda algo, el orgullo, en el fondo tu sabes que tienes razón y quieres dejarlo patente. Veamos las opciones:

  • Llegar a las manos: Darse leches está mal visto. Meterse mano también.
  • Jugárselo a piedra, papel o tijera: si es el otro es japonés estás perdido, vas a perder sí o sí, ellos nacieron con un don para ello. Si no es japonés nada te asegura que vayas a ganar, así que nada, mala opción.
  • Jugárselo al tres-en-raya. Esta es la buena.

El tres en raya es un juego sencillo, cuando la gente se pone a jugar se cree que es un juego tonto (que lo es!) y que más o menos, sin considerar empates, el 50% de las partidas las ganarán y el resto las perderán pero no es tan tan sencillo. Así que le sueltas: “Pues ya está! Nos lo jugamos al tres en raya. El primero en ganar será el que tenga la razón, ¿es justo no?” Suelen aceptar.

Vamos a asumir que el juego es empezando con un tablero vacío, que empiezas donde quieras y que cuando ya has puesto las piezas posibles y no ha ganado nadie comienza una partida nueva desde cero.

También vamos a asumir que tú no estás en la parra y que sólo vas a perder si te provocan una situación en la que el contrincante te puede hacer tres en raya de dos maneras simultáneas y no es que se te ha escapado la línea ¬¬. Tú eres cruz, tu víctima será cara.

Cómo no perder

Se supone que el que empieza lleva la voz cantante. Tu contrincante puede empezar en el centro, en una esquina o en un lado. Lo decisivo son las 2 primeras posiciones.

Si él empieza en el centro, ve siempre a la esquina. En caso de que luego su ficha se ponga en línea tu ve de nuevo a una esquina.

no perder al tres en raya cuando el otro empieza en el centro

Si empieza en una esquina nosotros cogemos el centro.  En caso de que él vuelva a colocar su ficha en línea entonces nosotros nos vamos a una posición que no sea esquina.

noperder_esquina

Si empieza en un lado cogemos el centro de nuevo. En caso de que él coga un lado contiguo debemos colocar nuestra ficha en la esquina común.

noperder_lado

Ahora ya lo tenemos neutralizado.

Cómo intentar ganar

Intentar ganar viene a ser lo mismo pero al revés, con alguna variación más porque él no tiene por qué hacer de su primer movimiento los que yo he hecho antes.  Sólo tienes que esperar a que lleve 3 o 4 partidas y que ponga donde no toca en su segundo movimiento.

Aplicado al primer caso, si empiezas en el centro y él no pone en una esquina está muerto, en el caso de que lo haga tu colocas tu ficha haciendo línea. Ahora si él no se posiciona en una de las dos esquina restantes habrá perdido también.

Si tu contrincante se sabe esto, simplemente jugar será un while(true) hasta que uno de los dos se harte, y entonces, por supuesto, tiene razón el otro ;)

P.S. Aprovecho este post para anunciar que TuXeD se ha comprado un dominio nuevo y pasa de /var/log/TuXeD a Limited Entropy Dot Com. ¡Ya estás actualizando tus feeds y bookmarks!

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 6 CommentsTags:·

Congreso de Seguridad Rooted CON 2010

January 13th, 2010 · 10 Comments · hacking, personal

rootedcon

Cómo se puede leer ya en muchos sitios, este año se celebra un nuevo congreso de seguridad informática en España. Su web es http://www.rootedcon.es y como ellos mismos dicen su objetivo es ofrecer conferencias altamente técnicas y fomentar el conocimiento, no bastante con conocer que existen cosas, hay que saber cómo son y por qué funcionan así :D

Se va a organizar un wargame tipo Capture The Flag a manos de un Sexy Panda, ¿qué más se puede tener? Además hay una serie de talleres intensivos denominados RootedLabs donde podrás aprender con los mejores sobre: ingeniería inversa, análisis forense, análisis de malware, pentesting, securización de redes inalámbricas y seguridad web (aún quedan plazas libres en los labs si te interesa algún área).

Allá por noviembre me enteré de la existencia el congreso y desde un principio me interesó acudir, pero ¿por qué no algo más? Hablando con TuXeD nos planteamos la posibilidad de enviar algo al Call For Papers, estuvimos unas cuantas semanas dudando pero tiró para adelante… :D

Unas semanas después (contra todo pronóstico, por lo menos mío) resulta que nos han seleccionado la propuesta, además junto con los primeros ponentes confirmados, cosa que considero un honor más aún. Ya de por sí, ser el último mono iba a ser considerado un éxito 100% por nuestra parte.

Para que os hagáis una idea del personal, esto es lo que hay confirmado por ahora:
http://www.rootedcon.es/rooted-con-2010/ponentes.html

Y TuXeD y yo! No puedo ocultar que estoy emocionado :) me lo voy a pasar de lo lindo seguro.

Poco a poco se tienen que ir confirmando más ponentes y saldrán los detalles de la conferencias. Esto promete.

Si queréis acudir al evento daos prisa porque debido a la gran acogida pronto colgarán el cartel de todo vendido. Me alegro de que haya surgido una nueva iniciativa así y más aún con precios populares y apostando por gente muy capaz que hay por nuestro país.

Por la mocosfera mucha gente ya se ha hecho eco del evento:
http://www.securitybydefault.com/search/label/rootedcon

Y aquí entrevistas a gente que lo organiza o va a estar danzando por ahí:
http://elladodelmal.blogspot.com/search/label/Entrevistas

Can’t wait!

ACTUALIZACIÓN: Ya empiezan a salir más nombres de ponentes y títulos de las conferencias. Toda la información aquí

VN:F [1.8.4_1055]
Rating: 5.0/5 (1 vote cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 10 CommentsTags:····

Descodificar tonos DTMF usando Matlab

November 25th, 2009 · 4 Comments · programming

Ya vimos como crear tonos DTMF usando Matlab y han pedido en un par de comentarios [1] [2] cómo se haría a la inversa, así que aquí va ;)

He cogido el script para generar los tonos del otro post y lo he cambiado para los pitidos duren 40ms (que se resume a cambiar que use 320 muestras en lugar de 1200 para cada pitido o silencio), para que sea un poco más real. El wav que voy a usar será el siguiente: ring.wav

Empezamos, ¿qué necesitamos? Cada pitido estará compuesto por una pareja de tonos así que para saber qué número es deberemos reconocer las dos frecuencias principales que tienen los pitidos, y conocer la frecuencia viene a ser lo mismo que saber el periodo.

Hace un tiempo hice una práctica de Tratamiento Digital de la Señal en la que se hacían cosas de estas, uno de los códigos no es mío, está indicado. El resto los hicimos Rafa y yo en su día.

Aprovechándonos de la Transformada de Fourier:

function [P,f]=periodograma(x,N)
% [P f]=periodograma(x,N)
% Calcula N muestras del periodograma de las muestras en x
% N debe ser > que length(x)
%
% P: Periodograma propiamente
% f frecuencias correspondientes
 
k=0:N-1;
f=k./N;
 
L=length(x);
P=1/L*(fft(x,N)).^2;

Pero lo propio será usar un programa que use ventanas para su propósito:

function [P,f]=periodmodif(x,ventana,N)
% [P ,f]=periodmodif(x,ventana,N)
%
% Calcula N muestras del periodograma modificado de las muestras en x
% N debe ser > que length(x)
%
% P: Periodograma propiamente
% f frecuencias correspondientes
 
if N <= length(x)
   error('N debe ser > que length(x)');
else
   k=0:N-1;
   f=k./N;
 
   L=length(x);
   m=0:L-1;
 
   U=1/L*(sum(ventana(m+1).^2));
   P=1/(L*U)*abs(fft(x.*ventana,N)).^2;
end

Cargamos el fichero ring.wav

>> [x,fs,nbits]= wavread('ring.wav')
>> t=0:1/fs:1/fs*(length(x)-1);
>> plot(x)

ring

Ahora tendremos que calcular de cuanto es nuestra ventana mínima. La separación mínima entre tonos es de 320 muestras (que además en este caso es la misma entre todos los tonos) luego la frecuencia digital será 320 / fs = 320/8000 = 0.04

Y aquí un poco de teoría sobre ventanas gracias a los Apuntes de Pak:

ventanas_LTDS_pak

Pero no voy a aburriros con ella así que nos quedaremos en que vamos a usar una ventana tipo Hamming, luego necesitaremos una longitud de ventana L = 4 / resolución = 4 / 0.04 = 100 muestras

Ahora vamos a determinar los dígitos, y para ello vamos a hacer uso de la siguiente función para búscar máximos:

function p=buscapicosu(x,umbral)
%posi_picos=buscapicosu(x,umbral)
% Busca los máximos locales de un vector mayores que un cierto umbral
% umbral se expresa en % respecto al valor máximo del vector.
% Ej. buscapicos(x,60) buscaria los picos mayores o iguales al 60% del
% pico más alto
%
% posi_picos son los indices del vector de entrada correspondientes a los picos.
 
% (C) Antonio Albiol , 2003
 
%Primero descarto los valores menores que el umbral
 
umbral=max(x(:))*umbral/100;
 
x=x.*(x>umbral);
 
%Ahora buscaré los máximos
 
%Primero creo un vector con dos valores muy pequeños en los extremos
xe=[-inf;x(:);-inf];
 
%Ahora calculo la derivada
d1=diff(xe);
ld1=length(d1);
%Ahora busco valores de la derivada de signo diferente consecutivos y que sean máximos
p=find(sign(d1(2:ld1)).*sign(d1(1:(ld1-1)))<0 & sign(d1(1:ld1-1))>0);

Cada pitido y cada silencio dura 320 muestras luego calculamos periodos en esas zonas. Vamos a por el primer dígito, con ventana Hamming de 100 y usando 1024 puntos:

>> [P,f]=periodmodif(x(320:320+99),hamming(100),1024);
>> buscapicosu(abs(P),50)
 
ans =
 
   110
   190
   836
   916

En el espectro digital, de 0 a 1, veremos que las frecuencias se repiten en espejo a partir de 0.5. Luego la frecuencia 110 se corresponde con la 916, igualmente ocurre entre la de 190 y 836, son lo mismo. Así que sólo tenemos que ver a qué corresponden 110 y 190.

Nota a tener en cuenta: en las FFTs (Fast Fourier Transforms) el cálculo se hace mucho más rapido cuando N es una potencia de 2, por eso la elección de hacerlo en 1024 puntos no ha sido del todo al azar.

>> 110/1024*fs
 
ans =
 
  859.3750
 
>> 190/1024*fs
 
ans =
 
  1.4844e+003

Nos vamos a la tablita y vemos con qué 2 valores más cercanos concuerdan 859.375 y 1484.4 Hz. Claramente sería con 852 y 1477 Hz que juntos corresponden con el dígito 9.

dtmf1

Y así con cada uno de los dígitos :)

Sé que estaría mucho mejor un script que hiciera todo el proceso entero y obtuviera qué número es de la tabla pero últimamente necesito días de 30 horas así os tendréis que conformar con esto. ¿A qué número he llamado?

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 4 CommentsTags:···

Masterclass con Carl Verheyen

October 28th, 2009 · 8 Comments · music

Verheyen02

El pasado jueves acudí a la Masterclass de Carl Verheyen que se había organizado en Valencia y no defraudó, es más, no es que no defraudara si no que me impresionó mucho.

Calificado por varios medios como uno de los 10 mejores guitarristas del mundo y el mejor guitarrista de estudio que hay, ha grabado para varios cientos de discos, 200 bandas sonoras (incluyendo producciones recientes de Disney y Pixar por ejemplo), miles de jingles para televisión y radio, … vamos, que la lista es larga. Un señor del calibre de Dann Huff, Steve Lukhater y similares pero que, por su papel, suelen permanecer en un segundo plano comparados con el grupo de guitarristas a los que se les consideran estrellas.

La masterclass comenzó con su impresionante versión de Little Wing de Jimi Hendrix. Hay versiones geniales como la de Stevie Ray Vaughan o la de Andy Timmons pero fue verle tocar y dejar a todas las versiones que había oído hasta ahora totalmente por los suelos.

[Read more →]

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 8 CommentsTags:

Port-Knocking y Crypt-Port-Knocking

September 25th, 2009 · 7 Comments · hacking, internet, linux, programming

Estaba curioseando por foros de Gentoo cuando me encontré un post interesante sobre una evolución del clásico Port-Knocking,  pero vayamos por pasos.

prison

Port-Knocking

Cuando nosotros tenemos un servicio en un servidor, éste, escucha en uno o varios puertos las peticiones externas. Este puerto deberá estar abierto en el firewall para que se puedan efectuar estas conexiones. La idea del Port Knocking es que el puerto del servicio permanece cerrado y sólo se abrirá bajo una petición externa basada en un paquete o grupo de paquetes específicos, previamente conocidos por el cliente, que serán enviados al servidor. Es decir, yo tendría mi servidor ssh con el puerto 22 cerrado y cuando un cliente envíe un paquete con ciertas características a otro puerto entonces el puerto 22 se abriría temporalmente para ese cliente. De este modo permanecería escondido antes escaneos de puertos e intentos automatizados de fuerza bruta, por ejemplo. Este sistema se podría ir mejorando:

  • que tenga que ser una secuencia de puertos y no uno sólo
  • que además tengan que ser unos puertos de origen específicos
  • combinarlo con otras herramientas: Portsentry, denyhost, fail2ban (destaco la primera herramienta  ya que es una forma fácil de banear intentos de escaneos sin el uso de un IDS completo ni cortafuegos)
  • jugar con las FLAGs TCP y opciones poco comunes de los paquetes
  • abrir el puerto sólo para la IP llamante, no todas
  • <paranoic>requerir una temporización determinada (algo elástica, claro está) entre en el envío de los paquetes</paranoic>
  • y mil cosas que se nos puedan ocurrir

[Read more →]

VN:F [1.8.4_1055]
Rating: 4.7/5 (3 votes cast)
VN:F [1.8.4_1055]
Rating: +1 (from 1 vote)

→ 7 CommentsTags:······

Arduino MEGA y módulo XBee – Instalación en gentoo

September 19th, 2009 · 5 Comments · electronics, linux

Mageles, Jaime y Bea me regalaron una Arduino MEGA! Fue una gran sorpresa y además la acompañaron del módulo wireless XBee Shield que usa tecnología Zigbee, que proporciona comunicación inalámbrica entre placas de este tipo u otros dispositivos Zigbee.

ArduinoMegaxbee

Para quien no lo conozca, las Arduino son una plataforma de desarrollo electrónico enfocada al prototipado rápido cuyas especificaciones son totalmente libres. Existen varios modelos de placas para los diseños con características más o menos avanzadas y podremos trabajar con ellas tanto en Windows, Mac OS X ó GNU/Linux, sin tener que usar compiladores y/o herramientas de desarrollo de pago.

La mía es una Arduino MEGA, que es una mejora de la Duemilanove y la Diecimila gracias a su mayor I/O y capacidad de memoria, entre otras cosas. Las specs principales son:

  • Microcontrolador Atmel AVR 8-bit MEGA1280 @16MHz
  • 128kB FLASH MEM (4kB usados por el bootloader incluído, usado para poder cargar cógido directamente)
  • 8kB SRAM
  • 4kB EEPROM
  • 54 pines digitales (soportan hasta 40mA): I/O, comunicación serie, interrupciones, 8-bit PWM, SPI, I2C, …
  • 16 pines de entrada analógica con una resolución de 10bits, útil para todo tipo de sensores.

Lo primero que tenemos que hacer para empezar a jugar es instalar las herramientas necesarias. En el árbol de paquete de Gentoo hay bastante para microcontroladores AVR ($ eix -S avr ) pero si además queremos afinar e ir a por el kit completo para Arduino tampoco tendremos problemas.

[Read more →]

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 5 CommentsTags:·········

[Campus Party 09] Las crónicas

September 7th, 2009 · 7 Comments · hacking, internet, personal

Ya hace más de un mes que terminó la Campus Party en Valencia. Como ya comenté este año la Campus volvió a la Ciudad de las Artes y las Ciencias para bien y para mal. La carpa no tenía nada que ver con la de 2004, era mucho más grande y mejor climatizada aunque una de las tardes (martes o miércoles) el aire acondicionado se estropeó y menuda calina. El mayor inconveniente era la zona de tiendas… calor, ruido de los compresores, sólo un par de baños cerca, etc. Al final optamos por volvernos a dormir a casa cada noche. Como gran ventaja, volvió el “ambiente de campus”, gritos, jaleos, descerebrados soltando burradas, estabas cerca de los amigos, etc :) eso se echaba de menos en la Feria.

Jaime tenía sus charlas de PHP a las 10 y eso es primerísima hora en la campus, que digo! es una hora inaceptable en la campus! Intentamos llegar a tiempo para poder apoyarle pero durmiendo fuera y acostándonos tarde (más bien cerca del amanecer) era complicado estar antes de las 11. Además se nos juntaba con el suplicio de aparcar y llegar andando desde donde cristo perdió la cruz, al año que viene nos cogemos parking. Este año estuvo a buen precio (no como años anteriores) pero se nos pasó el momento o no nos lo planteamos lo suficiente. El catering a mí me pareció peor que otros años, era otra empresa y encima la CP no dió paella para todos gratis el miércoles como venía siendo tradición… ratas.

A diferencia de otros años, que ya el domingo disponíamos de las acreditaciones y incluso alguna vez teníamos la tienda puesta de antes, esta vez llegábamos de viaje por la tarde y no fue hasta la noche cuando estuvimos acomodados en el puesto. Así cerquita estábamos kuasar, Jaime, Mageles, TuXeD (a partir del jueves), phobeo, Ernesto (encantado de conocerte!), Laura, Ender, akae y unos cuantos más, justo en el medio de la zona de innovación. Repartidos por el resto de la campus estaban muchos más conocidos pero no terminaría nombrándolos, bueno va, a Flexa sí, que se hizo una camiseta super molona con TOOOOODOS nuestros nicks :) . Sigue leyendo!

[Read more →]

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 7 CommentsTags:·······

Crackeador de hashes MD5 en C y OpenSSL

August 28th, 2009 · 1 Comment · hacking, linux, programming

Un hash es una función criptográfica de tipo resumen cuyo objetivo es identificar casi unívocamente un conjunto de datos. Pretende ser una función inyectiva, es decir, que para una salida (valor imagen) solo exista una entrada (valor origen) pero debido a que su salida está limitada en tamaño es posible que para entradas diferentes existan claves resultantes iguales. Eso sería una colisión y una función hash deberá tener una salida pequeña equilibrada con su resistencia a colisiones. MD5 tiene una salida fija de 128 bits, lo que vienen siendo 32 dígitos en hexadecimal.

Primero de todo vamos a hacer un programa que nos permita calcular el hash md5 de un string que se le pase y luego ya pasaremos al crackeador.

Sería más fácil hacer un script en bash o perl gracias a la utilidad CLI de OpenSSL, a la hora de calcular un solo hash no importa mucho la velocidad pero si luego queremos hacer un pequeño crackeador no podemos partir de algo que ya sabemos que va a ser mucho más lento. Así que lo que vamos a usar es C y la librería de OpenSSL.

Si no sabemos por donde empezar un extracto del man:

$ man md5
...
SYNOPSIS
 
#include 
 
        unsigned char *MD5(const unsigned char *d, unsigned long n,
                         unsigned char *md);
 
        int MD5_Init(MD5_CTX *c);
        int MD5_Update(MD5_CTX *c, const void *data,
                         unsigned long len);
        int MD5_Final(unsigned char *md, MD5_CTX *c);
...
DESCRIPTION
...
Applications should use the higher level functions EVP_DigestInit(3) etc. instead of calling the hash functions directly.
...

[Read more →]

VN:F [1.8.4_1055]
Rating: 4.0/5 (1 vote cast)
VN:F [1.8.4_1055]
Rating: 0 (from 2 votes)

→ 1 CommentTags:···········

Va de pre-fetching, Wordpress y links malintencionados

August 13th, 2009 · 10 Comments · hacking, internet

Como más de uno sabrá ya, ha salido a la luz una vulnerabilidad en Wordpress 2.8.3 mediante la cual se puede resetear el password de administrador con un link malicioso (maliiiiiiiiiigno) como el siguiente:

http://DOMAIN_NAME.TLD/wordpress/wp-login.php?action=rp&key=o7naCKN3OoeU2KJMMsag

Hasta aquí normal, de vez en cuando salen vulnerabilidades, además cuando recibes un correo (por ejemplo) con el link maloso te das cuenta de que hay gato encerrado.. pero ¿puede haber otros factores? Uhm, sí. ¿Qué tal los acortadores de direcciones? No se vería en principio a donde vas.

bug-feature

Por otro lado, hace un par de días actualicé Firefox a la versión 3.5.2 y esta mañana me he dado cuenta de que tiene activado un pre-fetch de links para navegar de un modo más rápido, es decir, precarga la primera búsqueda de google, precarga el siguiente post del blog que estás leyendo, etc. ¿Precarga un link malicioso que has recibido intentando explotar el bug anterior?

No me parece nada segura este tipo de navegación acelerada así que para desactivar esta opción se puede entrar en el about:config y desactivarla:

network.prefetch-next = false

Y ahora el mundo es un poquito mejor (de hecho ya han ido llegando correos maliciosos por algún sitio intentando explotarlo).

Sobre Wordpress, ó se actualiza a la versión 2.8.4 ó se cambia a mano el código vulnerable.

VN:F [1.8.4_1055]
Rating: 5.0/5 (1 vote cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 10 CommentsTags:·······

Cuestión de optimización

August 10th, 2009 · 14 Comments · Opinión, linux, programming

Y es que se ha perdido el romanticismo… xD

A día de hoy contamos con ordenadores chorrecientas veces más rápidos que hace pocos años y cuando se programa haces pruebas con sistemas de 3GHz, varios MB de cache y 2GB de RAM mínimo y todo tira para adelante. Bueno, todo tira hasta cierto punto, tus programas luego se van a estar ejecutando juntos con otras decenas de programas o simplemente se van a estar ejecutando constantemente y vas a perder un gran porcentaje de la capacidad de proceso de cómo lo podrías estar haciendo.

Bueno, y es normal, cosas de la comodidad, yo el primero. Ahora te quedas tranquilo con que funcione, en los 80 tenía que funcionar y caber en 64kB de RAM. No digo que se programe peor (seguramente sí xD) pero ya no nos fijamos en muchos detalles que antes eran totalmente necesarios (la de trucos que usaba la gente para poder aprovechar el 100% del hardware del Commodore64) y ahora desperdiciamos por todos lados y al final sí que pasa factura. La gente que programe sistemas embebidos lo tiene muy claro aunque casi se va a acabar el asunto también ahí porque ya los procesadores de los móviles/PDAs/cosas_pequeñas tirán mucho.

[Read more →]

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)

→ 14 CommentsTags:······