CSS Brainfuck und das DeCSS Haiku

Mittwoch, 25.3.2009, 20:30 > daMax

Code kann so hübsch sein. Ein anonymer Autor schrieb dieses grafisch beeindruckende, fast schon poetische Stück Code in Brainfuck, einer Turing-Maschinen-Sprache. Es ist der Decodierungsalgorithmus, der die CSS-Verschlüsselung von DVDs entschlüsselt.

CSS-Brainfuck

Noch poetischer ist das DeCSS Haiku. Kleiner Ausschnitt:

Now help me, Muse, for
I wish to tell a piece of
controversial math.

Dieses Gedicht enthält im klassischen Haikuversmaß 575 nicht nur die Geschichte des Verbots, sondern auch die Anleitung, wie der Algorithmus zu programmieren ist. Ich bin der Meinung, das war Spitze *indieluftspring*. Die dazugehörige Geschichte ist mir irgendwie dann aber doch zu hoch und zu lang.

(gefunden in der Gallery of CSS Descramblers)

Ach und weil's gerade so schön abstrakt ist hier nochmal das gleiche in Perl

Auszug eines Slashdot Artikels
For something so small, this is quite an accomplishment. It's also a bit of an embarassment for Hollywood when you consider that the basis of a multi-billion dollar revenue-stream can be foiled by such a small piece of code!

$_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)[20]&48){$h=5;
$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$d=
unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=($t=255)&($d
>>12^$d>>4^$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9 ,$_=(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)) [$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval

A rewrite, using an extra five bytes (!) of perl code, caches a table, which apparently makes the program fast enough to decode a movie in realtime:

$_='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=$d>>8^($f=$t&($d>>12^$d>>4^
$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&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

css | decss | hack | pearl | brainfuck