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.