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.
Comments (2)
Mauricio, si quieres una galería con millares de variaciones de la fórmula para decodificar un DVD t sugiero ir a http://www.cs.cmu.edu/~dst/DeCSS/Gallery/ , donde además se cuenta la historia de la decodificación.
Lo más impresionante de esa página es un inmenso Haiku con las instrucciones para descrifrar el DVD: http://www.cs.cmu.edu/~dst/DeCSS/Gallery/decss-haiku.txt
Posted by Juan Pablo Gil R. | Agosto 26, 2005 8:28 PM
Posted on Agosto 26, 2005 20:28
Excelente aporte!!!
Gracias Juan Pablo!... en especial el TXT :P
Posted by mave | Agosto 27, 2005 1:47 AM
Posted on Agosto 27, 2005 01:47