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>
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
Etiquetas:
3d,
javascript,
structure Synth
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:
La nueva versión se puede descargar aquí: http://structuresynth.sourceforge.net/download.php
Empezamos...
- 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
La nueva versión se puede descargar aquí: http://structuresynth.sourceforge.net/download.php
Empezamos...
Etiquetas:
3d,
grafico,
javascript,
structure Synth
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:
Btw... 1 año!!
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.
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)
¿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)
Etiquetas:
fortunes,
javascript,
pasando el rato,
Perl,
web
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
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
Etiquetas:
greasemonkey,
javascript,
seriesyonkis
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
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
Etiquetas:
greasemonkey,
jamendo,
javascript,
ogg
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
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"
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?
<!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
Suscribirse a:
Entradas (Atom)

