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.