Main

computer's tips Archives

Junio 29, 2005

Maravillas de los lenguajes computacionales...

Hace poco estaba viendo un artículo publicado en wired.com, donde mostraban cómo poder "decifrar" (no encuentro una mejor palabra para "descramble"... ya, ok... ok... hackear si se quiere :P), los DVDs que vienen cifrados como manera de protección, para que no puedan verse sin su debida autorización.

En el articulo mencionado, dicen que en 7 líneas de PERL es posible lograr esto: (Obviamente, hay que obviar los comentarios que comienzan con "#")

#!/usr/bin/perl -w
# 531-byte qrpff-fast, Keith Winstein and Marc Horowitz 
# MPEG 2 PS VOB file on stdin -> descrambled output on stdout
# arguments: title key bytes in least to most-significant order

$_='while(read+STDIN,$_,2048){$a=29;$b=73;$c=142;$t=255;@t=map{$_%
16or$t^=$c^=( $m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,
@z=(64,72,$a^=12*($_%16 -2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..
271);if((@a=unx"C*",$_)[20]&48){$h =5;$_=unxb24,join"",@b=map{xB8,
unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$ d=unxV,xb25,$_;$e=256|
(ord$b[4])<<9|ord$b[3];$d=$d8^($f=$t&($d12^$d4^ $d^$d/8))<<17,
$e=$e8^($t&($g=($q=$e14&7^$e)^$q*8^$q<<6))<<9,$_=$t[$_]^ (($h=8)
+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval

Lo más simpático de la historia, es que este pedazo de código, fue escrito por 2 alumnos del MIT (Instituto Tecnológico de Massachussets) que también están involucrados en un sistema desarrollados por ellos para compartir musica a través de las instalaciones de TV cable

Pero eso no es todo... como yo soy un BASH-man por defecto... tenia que buscar algo al menos similar al respecto... por lo que encontré en una Signature el siguiente trozo que permite generar un código en C:

for DVDs in Linux screw the MPAA and; do dig $DVDs.z.zoy.org ;
done | perl -ne 's/\.//g; print pack("H224",$1) if(/^x([^z]*)/)' \|
gunzip > css_unscramble.c

Lindo... no?

Volviendo a las maravillas de PERL... ソConoces el método de cifrado llamado RSA? bue... acá tenemos el código para hacer un cifrado, gracias a Adam Back:

print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
)]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`

Algún otro material de código simpático? Creo que indicado sería mostrar el binario más pequeño para Linux, que compilado pesa sólo 42 bytes (Hecho en assembly):

; tiny.asm

BITS 32

   org  0x00001000

   db   0x7F, "ELF" ; e_ident
   dd   1                       ; p_type
   dd   0                       ; p_offset
   dd   $$                      ; p_vaddr
   dw   2           ; e_type    ; p_paddr
   dw   3           ; e_machine
   dd   filesize    ; e_version ; p_filesz
   dd   _start      ; e_entry   ; p_memsz
   dd   4           ; e_phoff   ; p_flags

_start:
   mov  bl, 42      ; e_shoff   ; p_align
   xor  eax, eax
   inc  eax         ; e_flags
   int  0x80
   db   0
   dw   0x34        ; e_ehsize
   dw   0x20        ; e_phentsize
   db   1           ; e_phnum
                                 ; e_shentsize
                                 ; e_shnum
                                 ; e_shstrndx
filesize      equ     $ - $$

Luego se podemos ver que:

  $ nasm -f bin -o a.out tiny.asm
  $ chmod +x a.out
  $ ./a.out ; echo $?
  42
  $ wc -c a.out
       45 a.out

Increíble... ah?

Finalmente, sugiero que revisen el sitio www.roesler-ac.de/wolfram/hello.htm, donde salen más de 200 formas de hacer un hola mundo!... impresionante. Algo que cualquier ñoño no debe perderse :-)


Escuchando: "What's The Beef" de Notorious B.I.G.

Julio 13, 2005

Solución a los FORMs anidados en HTML

Hace algún tiempo, me vi en la tarea de realizar un sistema de "carrito de compras" típico.

Dentro del desarrollo, me topé con el siguiente problema:
Quería introducir un listado mediante campos <OPTION> y <SELECT>, los cuales estaban dentro de un <FORM> y asi actualizar el contenido de la pagina con un onchange(); de cualquiera de las opciones...

El problema se da, que cuando uno quiere enviar esa información del formulario, para ser procesada, lo lógico a pensar, es que uno haga otro form encima de ese y que tenga un action distinto... Lo cual nos lleva a descubrir algo que no está muy bien documentado en Internet:

Los FORMs anidados en HTML no son validos y por lo tanto no funcionarán!

Una vez que esto le queda a uno claro y deja de jugar a ponerle nombres distintosa los forms e inventar y re-inventar nombres, es que uno se da cuenta que tienes 3 soluciones (al menos estas encontré yo):

  • Replantear el problema: Si llegaste al punto en que necesitas tener 2 FORMs anidados, significa que tu modelo está malo.. Asi de simple. Está malo y tienes que re-plantearlo desde 0... Quizás debería o pasar por un FORM primero y luego por otro. O tal vez todo deba estar en un solo FORM
  • Ocupar un ticket de verificación: Se puede agregar un nuevo campo hidden o un check-button, que permita realizar otras acciones al procesar los datos. Esta solución es a mí parecer la más sencilla.
  • Manejar variables de sesion: Esta forma, requiere un poco más de conocimiento del lenguaje utilizado para procesar el FORM (Ya sea PHP, o algún otro bellaco, como ASP)... Se trata que al momento de actualizar la página, ver si se hicieron cambios en las variables anteriores (guardadas en una sesión) y compararlas con las nuevas. Luego, al momento de hacer el click en el botón SUBMIT, se debe introducir una variable hidden que referencie que no se hagan más cambios y se procesen los datos.

Eso... ojalá le sirva a alguien, pq a mí me costó entenderlo en su momento.


Escuchando: "I got the power" de Puff Daddy & The Lox

Diciembre 22, 2005

Trabajo por un dolar (a.k.a. pringao's ultimatum)

Algunas veces es un error juzgar el valor de una actividad simplemente por el tiempo que toma realizarla...

Un buen ejemplo es el caso del ingeniero que fue llamado a arreglar una computadora muy grande y extremadamente compleja... una computadora que valía 12 millones de dólares.

Sentado frente a la pantalla, oprimió unas cuantas teclas, asintió con la cabeza, murmuró algo para sí mismo y apagó el aparato. Procedió a sacar un pequeño destornillador de su bolsillo y dio vuelta y media a un minúsculo tornillo.

Entonces encendió de nuevo la computadora y comprobó que estaba trabajando perfectamente.

El presidente de la compañía se mostró encantado y se ofreció a pagar la cuenta en el acto.

-ソCuánto le debo? -preguntó.
-Son mil dólares, si me hace el favor".
-ソMil dólares? ソMil dólares por unos momentos de trabajo? ソMil dólares por apretar un simple tornillito?
。Ya sé que mi computadora cuesta 12 millones de dólares , pero mil dólares es una cantidad disparatada!
La pagaré sólo si me manda una factura perfectamente detallada que la justifique.

El ingeniero asintió con la cabeza y se fue.

A la mañana siguiente, el presidente recibió la factura, la leyó con cuidado, sacudió la cabeza procedió a pagarla en el acto, sin chistar.

La factura decía:

Servicios prestados:
Apretar un tornillo........................ 1 dólar
Saber qué tornillo apretar.............999 dólares

Escuchando: Un capítulo de CSI en el canal SONY

About computer's tips

This page contains an archive of all entries posted to MAVE's blog in the computer's tips category. They are listed from oldest to newest.

carrete is the previous category.

foobar is the next category.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.35