Mostrando entradas con la etiqueta javascript. Mostrar todas las entradas
Mostrando entradas con la etiqueta javascript. Mostrar todas las entradas

martes, 23 de noviembre de 2010

Más animaciones

Hoy solo colorinchos y código de Structure Synth.
Vídeo en: http://videobin.org/+2ks/2vh.html


Este tardó 3 horas y media en ser trazado, lo que le hace a uno cuestionarse si será válido para cosas grandes (el video muestra el bucle dos veces)

Ah, sí, antes de nada decir que al parecer se puede establecer que al alacanzar el límite de recursividad de una regla se aplique otra con:
rule <nombre de la regla> maxdepth <profundidad> > <regla que se ejecutará al final>

Introducción a Structure Synth (y van 4), animaciones con la nueva versión

Pues sí, se supone que la serie se quedaría en el 2, pero resulta que acaban de lanzar la versión 1.5 de Structure Synth, que añade:
  • Un raytracer integrado, ya no hay que usar programas externos como Sunflow
  • Scripting con Javascript para hacer animaciones (a estas alturas más de uno, entre los que me incluyo, ya debe estar salivando =D )
  • Exportación de archivos OBJ (confieso que esto aún no se que es)
  • Cambios varios... en la GUI, se añadio un generador de números aleatorios para el preprocesador, etc
Y uno no se puede quedar sin hablar de ella =P
La nueva versión se puede descargar aquí: http://structuresynth.sourceforge.net/download.php

Empezamos...

domingo, 21 de noviembre de 2010

PoC de login seguro sobre HTTP

A raíz de este hilo en HackXCrack decidí programar un sistema de login que permitiese cierta seguridad ante atacantes pasivos aún funcionando sobre HTTP en plano, todo de forma transparente al usuario.

La idea es simple, cuando el usuario se intenta loguear, se le asigna un token que se utilizará como salt de una función hash que se aplicará a la contraseña (yo he utilizado MD5 porque tenía el código en python a mano), el resultado de la función será el que se envíe. El utilizar un token es importante porque evita ataques de replay, es decir, que el atacante pase a través de la función hash, enviando el resultado directamente, no tendría que conocer la contraseña original si el resultado es siempre el mismo. Además es importante que el token lo establezca el servidor y nunca quién se loguee, ya que lo podría modificar para que fuera el mismo que el del usuario original, con lo que se vuelve al ataque de replay.

Pero tiene bastantes problemas:
  • Si el atacante es activo (puede interceptar la conexión y modificar datos al vuelo), puede cambiar el código fuente de la página, invalidando esto.
  • Las contraseñas han de guardarse en texto plano, para poder realizar el hash a posteriori.
  • Como consecuencia de lo anterior se produce un aumento muy considerable de la carga del servidor, ya que en vez de hacer el hash una sola vez (ya que se supone que las contraseñas se guardan ya hasheadas), en el peor caso, ha de comprobarse el hash de todas las contraseñas cada intento de login.
La prueba (todo muy mínimo) está alojada en md5poc.webcindario.com, el código fuente se puede descargar aquí [md5poc.zip]

Btw... 1 año!!

jueves, 10 de junio de 2010

Fortunes con javascript y perl

¿Quien no conoce las miticas frases que suelen salir cuando se hace login en un sistema? (al menos en Slackware), tambien conocidas como Galletas de la suerte, fortunes, o algo asi...

¿Seria curioso poder usarlas tambien en una pagina web y que cada vez que carge la pagina salga una diferente, no?, pues no es demasiado dificil. Si las instalaste " sudo apt-get install fortune " puedes encontrar varias en /usr/share/games/fortunes/ , el formato que siguen es bastante sencillo, es texto plano, separando una "galleta" de otra con una linea con solo un %, seria algo asi:

Frase nº 1
%
Frase nº 2
%
Frase nº 3
...

Siendo tan sencillo el formato, se pueden aprovechar facilmente los archivos para cualquier cosa, por ejemplo (o para descargar [fort2js.pl] ):


#!/usr/bin/env perl

if ($#ARGV != 1){ # Se comprueba que se especificaron los dos archivos
    print "./fort2js.pl <fortune> <javascript>\n";
    exit(0);
}

$fname = $ARGV[0];
$foutname = $ARGV[1];

print "fort2js: ".$fname." -> ".$foutname."\r\n";

$fname = "<".$fname; # Archivo que se lee
$foutname = ">".$foutname; # Archivo que se escribe
$i = 0; # nº de fortunes
open (F, $fname);
open (O, $foutname);
print O "function get_cookie(v){var cookie = new Array(\""; # Cabecera de la funcion

while ($line = <F>){
    if (substr($line,0,1) eq "%"){ # Si es el fin de una fortune
        print O "\",\""; # Nueva posicion en el array
        $i++; # Una fortune mas
    }
    else{
        $line =~ s/\ \ /\ /g; # Se eliminan los dobles espacion
        $line =~ s/"/\\"/g; # Se escapan las comillas
        $line =~ s/\n/<br\/>/g; # Se cambian los saltos de linea por <br/>
        $line =~ s/\r//g; # Se eliminan los retornos de carro
        print O $line;
    }
}
print O "\");return cookie[v]}"; # Fin de la funcion
print O "function max_cookie(){return ".$i.";}"; # Funcion max_cookie()
close F, O;


Esto sirve para convertir un archivo de fortune's en uno de Javascript que permita usar las "galletas" con dos funciones, get_cookie(i) para recuperar la frase numero i y max_cookie() que servira para saber de cuantas "galletas" podemos hacer uso.
El archivo que resulta de hacer ./fort2js.pl <archivo de galletas> < archivo de salida> se puede usar muy facilmente, solo habria que subirlo a algun lugar, y añadir algo como esto al codigo HTML donde queramos que se muestre:


<div id="cookie">[Cargando...]</div>
<script type="text/javascript" src="http://sitio.donde.esta/archivo/donde/esta"></script>
<script type="text/javascript"><!--//

var rand=Math.floor(Math.random()*max_cookie());
document.getElementById('cookie').innerHTML=get_cookie(rand); //--></script>

Y ya estan listas las galletas de la fortuna :D

Hasta ahora!
[Referencias]
http://www.w3schools.com/js/default.asp
http://en.wikipedia.org/wiki/Fortune_(Unix)

lunes, 10 de mayo de 2010

Otra de scripts greasemonkey [SY relinker]

Hoy, andando por SeriesYonkis acabe mosqueado por tener que dar muchas vueltas para conseguir los links (a megaupload en este caso), la verdad es que la web es bastante eficiente, todo muy claro, pero una vez que encuentras lo que necesitas, hay que pasar por la pagina medio vacia que solo tiene el link para enviarte a donde hay esta la descarga :(

Conclusion: un script y andado...

El script en cuestion esta aqui: http://userscripts.org/scripts/source/76470.user.js

De todas formas, los de userscripts se lo curraron, asi que hay mas informacion del script (poca cosa, codigo fuente en bonito y tal...) aqui: http://userscripts.org/scripts/show/76470

Por si a alguien le pica la curiosidad por saber como hacen los de SeriesYonkis para "ocultar" los links, el metodo es bastante sencillo:

- Obtienen el valor ASCII de cada letra que cambia (con megaupload, que es para donde funciona este script, es lo que va despues del ?d= )
- Le hacen XOR con 0xFE
- Y le hacen un UrlEncoding()

Para recuperar el link, solo hay que hacer unescape(), volver a hacer XOR con 0xFE y añadir lo que se obtiene al final del enlace :)

Hasta otra !

ps: La 4ª parte de Introduccion a la criptografia esta al caer

sábado, 24 de abril de 2010

Actualizando el Jamendo OGG redirector

Pues resulta que el script de greasemonkey que se encargaba de redirigir las descargas de MP3 a las OGG funcionaba... pero solo si se estaba utilizando noScript, cosa que no tuve en cuenta (perdon) :P

Ya esta el codigo arreglado (solo hubo que añadir un substr() y listo), y funciona usando noScript o no ;)

Podeis descargarlo [aqui]

Y aqui esta el codigo fuente (para quien no le apetezca buscarlo por la pagina)

Y ya esta, perdon por las molestias

domingo, 18 de abril de 2010

Musica en HTML5

Actualmente si alguien va a hacer un reproductor de audio o de video, en lo unico que se piensa es en Flash, pero HTML5 tambien permite hacerlo... sin necesidad de un formato que consume muchos recursos y que suele funcionar mal si no se visualiza con software privativo.

HTML5, la nueva version (aun experimental, pero soportada por la mayoria de los navegadores) del lenguaje HTML, añade tags como "audio" o "video", de esta forma, como antes se hacian presentaciones de imagenes mezclando Javascript y HTML, ahora se puede hacer un reproductor completo.

Nota: al menos Firefox no soporta MP3, dado que esta patentado, la mejor alternativa (incluso mejor que MP3) es OGG, totalmente libre.

Nota[2]: ningun musico fue "pirateado"  en el proceso de escritura de este post, podeis encontrar musica libre en sitios como Jamendo

Ahora si, HTML5...

La etiqueta que se usa es:
<audio src="ruta/al/archivo" [controls="controls"] [autoplay="autoplay"] [preload="preload"] > Texto </audio >
(Lo que esta entre '[' y ']' es opcional)
El texto solo se muestra si no se soporta la etiqueta audio ,seria algo asi como la etiqueta noscript


El significado de los atributos es:
src: ruta al archivo (como con la etiqueta img)
controls: se mostraran los controles: boton de reproducir, una barra de progreso..
autoplay: empezara a reproducirse tan pronto como pueda
preload: se empezara a cargar el audio cuando se carge la pagina (se ignora si se utiliza autoplay)

Entonces, con un codigo minimo:
<!DOCTYPE HTML>
<html>
<head>
    <title>Reproductor HTML5</title>
</head>
<body>

    <audio src="music/example.ogg" controls="controls" >

        Tu navegador no soporta el uso de la etiqueta de audio
    </audio>

</body>
</html>

Obtenemos esto:



No esta mal, eh? y eso usando solo HTML, el navegador hace todo el trabajo,añadiendo algo de Javascript se pueden hacer cosas como listas de reproduccion...
<!DOCTYPE HTML>
<html>
<head>
    <title>Reproductor HTML5</title>
    <script type="text/javascript"><!--

     // Lista de archivos de musica
     var music_list=new Array("goof","sandjorda","widibf","fuayfsilfm");

     var now_playing=0;
     var player,next_tag,tag;

     function change_file(f,p){
         p.setAttribute('src','music/'+f+'.ogg');

         p.load();
     }
     function next(p,t,n){

        change_file(music_list[now_playing],p);
        p.play();
        t.value=music_list[now_playing];

        now_playing=(now_playing+1)%music_list.length;
        n.value="-> "+music_list[now_playing];

     }
     -->
    </script>
</head>
<body>
    <br/>
    <audio id="player" preload="preload" controls="controls" >

        Tu navegador no soporta el uso de la etiqueta de audio
    </audio ><br/>
    <input type="text" readonly="true" id="this_tag" value="">

    <input type="button" onclick="next(player,tag,next_tag)" id="next_tag" value="">
    <script type="text/javascript"><!--

     player= document.getElementById('player');
     next_tag= document.getElementById('next_tag');

     tag= document.getElementById('this_tag');
     next(player,tag,next_tag);

    -->
    </script>
</body>
</html>


[Referencias]
Audio - MDC
Media formats supported by the audio and video elements - MDC
Using audio and video in Firefox - MDC 
Introduction to the HTML5 audio tag javascript manipulation