The Domino's pizza breakdown


Published: August 2011

Quiero compartir una historia interesante de principios de verano pasado que me divirtió mucho. El objetivo era comer pizza gratis, contra más mejor.

Todo esto vino cuando un amigo que paso el link de una promo de Domino's pizza llamada 30milpizzasdominos. Se trataba de una web cutre hecha en flash que te permitía jugar a la "ruleta" y te podían tocar cupones de descuento o pizzas gratis. Como el nombre indica la promo se limitaba a 30mil pizzas, así que no pudimos "robar" mucho ;)

Promo screenshot

Fallos "gordos"

No soy analista de seguridad ni nada parecido, pero a ningún informático se le escapan ciertos aspectos de seguridad que hay que tener en cuenta. Especialmente si un niño de primaria puede ver los fallos a simple vista, claro.

La web pedía un email para poder jugar (ni nombre ni ná, pa qué) y un captcha. Cada email tenia 3 intentos diarios a la ruletita, así que con tener 4 o 5 emails (cosa habitual hoy en día) se podían jugar unas 15 partidas diarias. Aunque sea difícil que te toque si lo pones de esta forma alguien se va a cebar si o si, mejor pide un nombre y apellidos (que aunque falsificables ya te impiden disfrutar del premio al ser un nombre diferente al tuyo).

Ya se ve que el email no va a ser un problema, dado que una cuenta de gmail nos provee de infinitos emails (como me apuntó un amigo bartolo@gmail es lo mismo que bar.tolo@gmail, con lo que hay unas cuantas combinaciones). Así pues el único problema es el captcha, que es un coñazo tener que escribirlo cada vez.

El captcha

El captcha que proponían no era de recaptcha ni nada similar. Era una sola palabra escrita en una tipografía que logramos identificar y además las palabras eran "correctas", es decir, de diccionario español de toda la vida. No se cómo el chaval que me contó lo de la promo averiguó que captcha estaba hecho con código libre y logramos tener el diccionario y la letra. Lo mejor es que no había deformación ni impedimento alguno para la lectura, vamos una joya.

Lo primero que hice (justo antes de obtener el diccionario) fue escribir un pequeño programa en C que dada una palabra buscaba las 5 más parecidas siguiendo un criterio de semejanza (la e y la a son muy parecidas en esa tipografía, por ejemplo) y probar con mi querido "tesseract". Fallaba lo suyo pero el programa y un diccionario en TXT lo apañaban muy bien consiguiendo un 50%-65% de éxito.

Una vez localizado el diccionario bueno mejoró algo más. Lo que hice a continuación fue entrenar el tesseract para esa tipografía, cosa que lleva 3 minutos si no se requiere leer caracteres "sucios", y éstos no lo eran en absoluto.

http://code.google.com/p/vision-cms/source/browse/trunk/libs/captcha/captcha.php

http://code.google.com/p/vision-cms/source/browse/trunk/libs/captcha/words/es.txt

Automatización

Como los informáticos somos unos vagos (y orgullosos de ello) me hice un script en bash que usando wget se bajaba lo que hacía falta (el captcha), lo modificaba (contraste y mariconadas similares) con el mogrify de ImageMagick y se lo pasaba al tessereact entrenado. Luego lo pasaba por el programa del diccionario y probaba las 5 palabras que le daba hasta encontrar una buena o simplemente probaba un nuevo captcha.

Todo este proceso funcionaba de perlas, el éxito creo que era del 90% o así (ya que el captcha se podía fallar 5 veces sin problema, no se quejaba el sistema) porque es difícil fallar teniendo 5 palabras a probar.

¿Sorteo real?

Lo que vi enseguida fue que la repartición de pizzas estaba amañadísima. Estaba hecho de manera que las pizzas no se fueran en un día por mucho que le diéramos cera. A ciertas horas del día no soltaba prenda y antes de comer y cenar repartía pizzas a destajo. También había un límite diario o similar.

Para acabar de rematar creo (con bastante seguridad) que había un límite por IP de intentos. Si tu IP se pasaba jugando no te daba premios. Para solventar el tema IP me hice un script interesante que checkeaba proxys. Miraba que no fueran transparentes (para esconder la IP) y que funcionaran bien. Usando rotación de proxys (las listas las copias-pegas de internet, hay miles y sólo hay que filtrar los que funcionan) el sistema funcionaba de vicio.

Conclusiones (de postre)

Con la "tonteria" del script conseguí casi 1000 emails con códigos promocionales. De allí salieron unas 40 pizzas gratis. Como no soy un gordaco acabado no me las comí todas yo sólo, hubo alegrías para otros también. Lo bueno es que el sistema no tenía ninguna condición promocional rara y sólo pedía hacer el pedido por internet.

Así que ya sabéis, ¡a reventar a toda web que se deje! Ni inyecciones SQL ni mariconadas, muchas veces la solución más sencilla (sencilla?) es mejor que las demás.

Si tenéis alguna promo interesante no os olvidéis de avisar hamijos ;)