L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo...
Transcript of L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo...
L' Anello di Congiunzione
tra L'Informatica e le “Bionde”: il
Perl Offuscato!
"Pole la donna permettisi di... comprendere il codice offuscato? Si!”
Filosofia, tecniche ed esempi pratici per una quasi completa
(in)comprensione di due mondi apparentemente dissimili ma dai
connotati stupefacentemente comuni."
Per poter seguire il seminario:
1. NON è necessario conoscere il Perl.
2. NON è necessario aver conosciuto una “bionda”.
Gianfranco Ciotti – member of AGOW and orgoglione to be!
Who's who
“But did you [...] ever take a look behind the eyes of the hacker? Did you ever wonder what made him tick, what forces shaped him, what may have molded him? I am a hacker, enter my world...”
The Mentor, 1986
Jane “Perla” Blonde – member of AGOW too... and orgogliona to be, (re-too)!
Who's who
Gianfranco Ciotti
"Oops! ...I Did It Again
yeah yeah yeah yeah yeahyeah yeah yeah yeah yeah yeah ”
Britney Spears, 2000
Who's who
perl -e '+$,=+$";+s//"\160\162\151\156\164\x20\x27\
\x4a\x61\x6e\x65\x0a\x27"/ee'
NON
parleremo di...
$_= “Doverose Precisazioni”;s/ve/lo/; print
… questo “anello di congiunzione”
$_= “Doverose Precisazioni”;s/ve/lo/; print
Parlano di L*i...
Parlano di L*i...indiscusso protagonista
The R
ing
Tr
on
Par l
an
o d
i L*
i ..
pre
ziosi
ssim
o
c olla
bora
tor e
NON
parleremo di...
$_= “Doverose Precisazioni”;s/ve/lo/; print
Paura eh...
queste “bionde” :
No
t a
s i
n “
blo
nd
e b
e er”
Parleremo di:errate percezioni
delirio e arte
caratteristiche
perl ob. coder blonde
strumenti e metodologie
perl ob. coder blonde
offuschiamo
L'incomincio...
Definizione
● offuscare [of-fu-scà-re] v. (offusco, offuschi ecc.) - v.tr. [sogg-v-arg]
oscurare qualcosa, renderlo fosco, buio; privare qualcosa di chiarezza.
● offuscare codice: [ha-ck-th-e-wo-rd] (C, perl, python, ...) -
si intende il rendere il codice sorgente di piu' difficile
comprensione, una pratica che e' sconsigliabile.
digressione storica
● Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne in un intorno degli anni '70).
● Bourne decise di utilizzare alcune #define del preprocessore C per rendere il suo codice sorgente simile al linguaggio Algol-68 con il quale aveva maggiore familiarità.
/usr/src/cmd/sh/mac.h:
#define IF if(#define THEN ){#define ELSE } else {#define ELIF } else if (#define FI ;}
#define BEGIN {#define END }#define SWITCH switch(#define IN ){#define ENDSW }#define FOR for(#define WHILE while(#define DO ){#define OD ;}#define REP do{#define PER }while(#define DONE );#define LOOP for(;;){#define POOL }
THE
BOURNE IDENTITY
THE
BOURNE IDENTITY
Definizione
● The blonde stereotype: the stereotypical perception of blond-haired women: she is often perceived as making little use of intelligence, as a "woman who relied rather on her looks rather than on intelligence".
● The notion of "dumb blond" has been a topic of academic research reported in scholarly articles and university symposia, which tend to confirm that many people hold to the perception that light-haired women are less intelligent than women with dark hair.
Percepito ma...
● Dalle definizioni di cui prima:● Blonde “percepita” come diversamente intelligente.● Codice Offuscato “percepito” come diversamente
consigliabile.
● Ma chi percepisce chi?!?
Paura dell'incompreso!
Mu
tt R
esearc
h I
nst i
tute
Analisi e Analogie
● Cosa accomuna:
#!/bin/perl
print "Just Another Perl Hacker";
?
Analisi e Analogie
● Cosa accomuna:
R: attività ritenute NORMALI
#!/bin/perl
print "Just Another Perl Hacker";
Analisi e Analogie
● Cosa accomuna: #!/bin/perl
$_ = "wftedskaebjgdpjgidbsmnjg";tr/a-z/oh, turtleneck Phrase Jar!/; print;
?
Analisi e Analogie
● Cosa accomuna: #!/bin/perl
$_ = "wftedskaebjgdpjgidbsmnjg";tr/a-z/oh, turtleneck Phrase Jar!/; print;
● stesse identiche operazioni di prima
● qualcuno ha la percezione che qualcosa non va in base ai propri pregiudizi sul contesto.
h4ck1ng stereotypes and prejudices
● Imparare ad apprezzare l'estetica di ciò che ci circonda
● Ricominciare a giocare con una sana
logica stringente● Non attenersi mai troppo al contesto● Rivisitare le “regole” in modo
più ampio, generico et fantasioso● Farsi offrire una (o più) birre...
● il Perl è difficile● il Python non si offusca
examples of
stereotypes and prejudices
01_python-smile.py
ahahah
ddk@hell:~/2010-linuxday/presentazione/code$ cat 01_python-smile.py """anche in Python... si... puo'... fare!!!
""" """o;import cosi++* ;;from SMILE import ELIMS;* ;;map(""";S=5*10+6;SS=chr(S);"""o o$ $$ o$ o $ oo def S""";SS=chr(S.__lshift__(1));""") $$ $$ $$o$ oo $ $ "$ #vec1=[]$$ $vec2=Cosi$S$ """;Ss="";""" $p rint$ "SSS="p"$ print "Co" "si_Presid" $ente";S=So "HELO";$ S=TRUE$ """;SS;"""$ print Cosi $SSS+SSS="NoN"*"ESiSte" $set(['p','uu,'p']);$S$ $S+SSS+SSS+S$ S=""";SSS="";""";""*SI$ "ot(""";SSSS=SS*2+chr(99-2);SSSSS=SSSS;S=(4*2*(2^3)-1^17)*5-11;"""; nov o$$[pup1[i]*pup2[i] for i in range(len(pup1))];SS=" ";#$o oS$" "pu")""";SSS=chr(S+13)+chr(S+18);"""SS="mutt";print"funziona" #$$ #""";print"",;"""mutt+funziona!";dict(mutt=9,funziona=4,Cosi=8) print """;S+S*2;print"",;""" sed(xrange(1,2,3,Stella))=42;;map(tux,S); ;print SSSS+$ S=lambda S:S$""";SSSSS=SSS+SSSS;""" print"" map( (2010.split()+S););print.split SS+S "cmd= set(getout.input.A.G.O.W. );$ var= "$$"";def S(S): o=GS S=S_u SS+S" ;print #collapse(p).pa .join import S #print SSSS_o print"" "object=""";SSSSS=SSSSS+Ss;""" ;;getattr($_);$_.join;$"" """;print SSSSS #join()+SSS*$ #print++;$$$ #true=false #LD2010""" A.G.O.W. style
ddk@hell:~/2010-linuxday/presentazione/code$ cat 01_python-smile.py """anche in Python... si... puo'... fare!!!
""" """o;import cosi++* ;;from SMILE import ELIMS;* ;;map(""";S=5*10+6;SS=chr(S);"""o o$ $$ o$ o $ oo def S""";SS=chr(S.__lshift__(1));""") $$ $$ $$o$ oo $ $ "$ #vec1=[]$$ $vec2=Cosi$S$ """;Ss="";""" $p rint$ "SSS="p"$ print "Co" "si_Presid" $ente";S=So "HELO";$ S=TRUE$ """;SS;"""$ print Cosi $SSS+SSS="NoN"*"ESiSte" $set(['p','uu,'p']);$S$ $S+SSS+SSS+S$ S=""";SSS="";""";""*SI$ "ot(""";SSSS=SS*2+chr(99-2);SSSSS=SSSS;S=(4*2*(2^3)-1^17)*5-11;"""; nov o$$[pup1[i]*pup2[i] for i in range(len(pup1))];SS=" ";#$o oS$" "pu")""";SSS=chr(S+13)+chr(S+18);"""SS="mutt";print"funziona" #$$ #""";print"",;"""mutt+funziona!";dict(mutt=9,funziona=4,Cosi=8) print """;S+S*2;print"",;""" sed(xrange(1,2,3,Stella))=42;;map(tux,S); ;print SSSS+$ S=lambda S:S$""";SSSSS=SSS+SSSS;""" print"" map( (2010.split()+S););print.split SS+S "cmd= set(getout.input.A.G.O.W. );$ var= "$$"";def S(S): o=GS S=S_u SS+S" ;print #collapse(p).pa .join import S #print SSSS_o print"" "object=""";SSSSS=SSSSS+Ss;""" ;;getattr($_);$_.join;$"" """;print SSSSS #join()+SSS*$ #print++;$$$ #true=false #LD2010""" A.G.O.W. style
ddk@hell:~/2010-linuxday/presentazione/code$ python 01_python-smile.py puppa
caratteristiche...
...comuni al buon offuscatore e alle vere bionde:
→ visione differente dell' “ambiente”
→ indiscussa fantasia
→ profondo senso estetico
→ capacita' risolutive fuori dall'ordinario
→ scopi differenti ma ben precisi
→ adattabilita'
Offuscare Codice...
● Non è una tecnica
…come l'essere “Blonde”
● Ma una forma d'arte!
← videoesempio
caratteristiche...
...comuni al buon offuscatore e alle bionde:
√ visione differente dell' “ambiente”
√ fantasia
√ senso estetico
√ capacita' risolutive fuori dall'ordinario
√ scopi differenti ma ben precisi
√ adattabilita'
e il Perl Offuscato ?
Perl... esempio
02_eureka.pl
ddk@hell:~/2010-linuxday/presentazione/code$ cat 02_eureka.pl
! ! ! ! ! ! ! i
;$_=join( q!!=>map{$!=$!& 0;map{s$![^\]! =s!! \$x-Y\\[@!]!Y=$! =$x ;$!+=s$[q!=>\$x-Y= [@! ]$!={$g}@$_;$g=i&& q!!. chr ($! +0x3E)}([\\$!=>{!! !$! =>! chr , [!$!]}]=>[\$!=>\$!=>\$! =>[!$!]]=>[\$!=>\$!=> {$!=>[$!]}=>{!$!=>[ $!]}]=>[\\$!=>{$! =>[Y]}]=>[\$!=> {$!=>[!$!]}=> \\!$!]=>[ \\$!])) ; print=> ! ! print=> ! ! print=> ! print=> print=> print
ddk@hell:~/2010-linuxday/presentazione/code$ cat 02_eureka.pl
! ! ! ! ! ! ! i
;$_=join( q!!=>map{$!=$!& 0;map{s$![^\]! =s!! \$x-Y\\[@!]!Y=$! =$x ;$!+=s$[q!=>\$x-Y= [@! ]$!={$g}@$_;$g=i&& q!!. chr ($! +0x3E)}([\\$!=>{!! !$! =>! chr , [!$!]}]=>[\$!=>\$!=>\$! =>[!$!]]=>[\$!=>\$!=> {$!=>[$!]}=>{!$!=>[ $!]}]=>[\\$!=>{$! =>[Y]}]=>[\$!=> {$!=>[!$!]}=> \\!$!]=>[ \\$!])) ; print=> ! ! print=> ! ! print=> ! print=> print=> print
ddk@hell:~/2010-linuxday/presentazione/code$ perl 02_eureka.pl EUREKA
Perl... esempio
03_camel-code.pl
ddk@hell:~/2010-linuxday/presentazione/code$ cat 03_camel-code.pl #!/usr/bin/perl -w # camel codeuse strict;
$_='ev al("seek\040D ATA,0, 0;");foreach(1..3) {<DATA>;}my @camel1hump;my$camel; my$Camel ;while( <DATA>){$_=sprintf("%-69s",$_);my@dromedary 1=split(//);if(defined($_=<DATA>)){@camel1hum p=split(//);}while(@dromeda ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;} $CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){ $camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift( @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if( defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@ camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\ 064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse; print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y /LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/; $_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval ("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124 \1 50\145\040\165\163\145\040\157\1 46\040\1 41\0 40\143\141 \155\145\1 54\040\1 51\155\ 141 \147\145\0 40\151\156 \040\141 \163\16 3\ 157\143\ 151\141\16 4\151\1 57\156 \040\167 \151\164\1 50\040\ 120\1 45\162\ 154\040\15 1\163\ 040\14 1\040\1 64\162\1 41\144 \145\ 155\14 1\162\ 153\04 0\157 \146\ 040\11 7\047\ 122\1 45\15 1\154\1 54\171 \040 \046\ 012\101\16 3\16 3\15 7\143\15 1\14 1\16 4\145\163 \054 \040 \111\156\14 3\056 \040\ 125\163\145\14 4\040\ 167\1 51\164\1 50\0 40\160\ 145\162 \155\151 \163\163 \151\1 57\156\056ddk@hell:~/2010-linuxday/presentazione/code$
ddk@hell:~/2010-linuxday/presentazione/code$ perl 03_camel-code.pl mJXXLm. .mJXXLm JXXXXXXXXL. JXXLm. .mJXXL .JXXXXXXXXL {XXXXXXXXXXX. JXXXmXXXXm mXXXXmXXXL .XXXXXXXXXXX} .XXXXXXXXXXXXXL. {XXXXXXXXXF 7XXXXXXXXX} .JXXXXXXXXXXXXX. JXXXXXXXXXXXXXXXXL.`XXXXXX. .XXXXXX'.JXXXXXXXXXXXXXXXXL JXXXXXXXXXXXXXXXXXXXmXXXXXXX. .XXXXXXXmXXXXXXXXXXXXXXXXXXXL .XXXXXXXXXXXXXXXXXXXXXXXXXXXXX} {XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXF 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX'7XXXXXXXXXXXXXXXXXXXXXXXXXF 7XXXXXXXXXXXXXXXXXXXXXXXXXF`XX XX {XXXFXXXXXXXXXXXXXXXXXXXF' `7XXXXXXXXXXXXXXXXXXX7XXX} XX `X}{XXX'7XXXFXXXXX^XXXXX `' `' XXXXX^XXXXX7XXXF`XXX}{X' `'XXX' {XXX'XXXXX 7XXXF 7XXXF XXXXX`XXX} `XXX`' .XX} {XXF {XXXX}`XXX} {XXX'{XXXX} 7XX} {XX. {XX `XXL `7XX} 7XX} {XXF {XXF' JXX' XX} `XX `XXL mXXF {XX XX} 7XXm JXX' XX' XX 7XXXF `XX XX' 7XXXF XX XX. JXXXX. 7X. .XF .XXXXL .XX {XXL 7XF7XXX. {XX XX} .XXXF7XF JXX} `XXX' `XXXm mXXX' `XXX' ^^^^^ ^^^^^ .mJXXLm mJXXLm. .mJXXL .JXXXXXXXXL JXXXXXXXXL. JXXLm. mXXXXmXXXL .XXXXXXXXXXX} {XXXXXXXXXXX. JXXXmXXXXm 7XXXXXXXXX} .JXXXXXXXXXXXXX. .XXXXXXXXXXXXXL. {XXXXXXXXXF .XXXXXX'.JXXXXXXXXXXXXXXXXL JXXXXXXXXXXXXXXXXL.`XXXXXX. .XXXXXXXmXXXXXXXXXXXXXXXXXXXL JXXXXXXXXXXXXXXXXXXXmXXXXXXX. {XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXX} XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXF 7XXXXXXXXXXXXXXXXXXXXXXXXXF`XX XX'7XXXXXXXXXXXXXXXXXXXXXXXXXF `7XXXXXXXXXXXXXXXXXXX7XXX} XX XX {XXXFXXXXXXXXXXXXXXXXXXXF' `' XXXXX^XXXXX7XXXF`XXX}{X' `X}{XXX'7XXXFXXXXX^XXXXX `' 7XXXF XXXXX`XXX} `XXX`' `'XXX' {XXX'XXXXX 7XXXF {XXX'{XXXX} 7XX} {XX. .XX} {XXF {XXXX}`XXX} {XXF {XXF' JXX' XX} {XX `XXL `7XX} 7XX} XX} 7XXm JXX' XX' `XX `XXL mXXF {XX XX' 7XXXF XX XX 7XXXF `XX .XF .XXXXL .XX XX. JXXXX. 7X. XX} .XXXF7XF JXX} {XXL 7XF7XXX. {XX mXXX' `XXX' `XXX' `XXXm ^^^^^ ^^^^^ The use of a camel image in association with Perl is a trademark of O'Reilly &Associates, Inc. Used with permission.ddk@hell:~/2010-linuxday/presentazione/code$
Perl... esempio
04_camel-code-modding.pl
f3802@optiplex:~/2010-linuxday/presentazione/code$ cat 04_camel-code-modding.pl
#!/usr/bin/perl -w # camel codeuse strict;
$_='eval("seek\040DATA,0,0;");foreach(1..3){<DATA>;}my@camel1hump;my$camel;my$Camel;while(<DATA>){$_=sprintf("%-69s",$_);my@dromedary1=split(//);if(defined($_=<DATA>)){@camel1hump=split(//);}while(@dromedary1){my$cam el1hump= 0;my$CAM EL=3;if(defined( $_=shift(@dromed ary1))&&/\S/){$c amel1hum p+=1<<$C AMEL;}$C AMEL--;i f(define d($_=shi ft(@dromedary1)) &&/\S/){$camel1h ump+=1<<$CAMEL;} $CAMEL--;if(defi ned($_=shift(@ca mel1hump ))&&/\S/ ){$camel1hump+=1 <<$CAMEL;}$CAMEL --;if(de fined($_ =shift(@ camel1hu mp))&&/\ S/){$cam el1hump+=1<<$CAM EL;;}$ca mel.=(split(//," \040..m`{/J\047\ 134}L^7FX"))[$ca mel1hump];}$came l.="\n";}@camel1hump=split(/\n/,$camel);foreach(@camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse;print"$_\040$Camel\n";}foreach(@camel1hump){ chomp;$Camel=$_;y /LJF7\173\175`\04 7/12345678/;y/123 45678/JL7F\175\17 3\0 47`/;$_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval;eval("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;();;s;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__\124\1 50\145\040\165\163\145\040\157\ 146\040\141\040\143\141\155 \145\154\040\151\155\14 1\147\145\040\151\15 6\040\141\163\163\15 7\143\151\141\164\15 1\157\156\040\167\ 151\164\150\040\12 0\145\162\154\040\ 151\163\040\141\ 040\164\162\141\ 144\145\155\141\ 162\153\040\157\ 146\040\117\047\122\1 45\151\154\154\171\040 \046\012 \101\163 \163\157 \143\151 \141\164\ 145\163\0 54\040\111 \156\143\0 56\040\125\ 163\145\144 \040\167\15 1\164\150\0 40\160\145\ 162\155\151 \163\163\151 \157\156\056
f3802@optiplex:~/2010-linuxday/presentazione/code$ perl 04_camel-code-modding.pl
XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX {XXX} {XXX} XXXX XXXX {XXX} {XXX} XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX .mmm. .mmm. XXXX XXXX .mmm. .mmm. XXXX XXXX ^^7XmXF^^ XXXX XXXX ^^7XmXF^^ XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXX} {XXXXXXXX XXXXXXXX} {XXXXXXXX mmmmmmmmmXXXXXXLXLmmmmmmmm mmmmmmmmJXJXXXXXXmmmmmmmmm XXXXXXX7XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXFXXXXXXX `7XXXXXXXXXXXXX^ ^XXXXXXXXXXXXXF' `XXXXXXXXXX^ ^XXXXXXXXXX' XXXXXXXXXX XXXXXXXXXX {XXXXXXXX} {XXXXXXXX} `XXXXXXXX' `XXXXXXXX' XXXXXXXX XXXXXXXX mXXXXXXXXm. .mXXXXXXXXm mXXX^^^^7XXX. .XXXF^^^^XXXm .XXXX {XXXL JXXX} XXXX. .XXXXX XXXXX. .XXXXX XXXXX. {XXXXX XXXXX} {XXXXX XXXXX} ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX {XXX} {XXX} XXXX XXXX {XXX} {XXX} XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX .mmm. .mmm. XXXX XXXX .mmm. .mmm. XXXX XXXX ^^7XmXF^^ XXXX XXXX ^^7XmXF^^ XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX {XXXXXXXX XXXXXXXX} {XXXXXXXX XXXXXXXX} mmmmmmmmJXJXXXXXXmmmmmmmmm mmmmmmmmmXXXXXXLXLmmmmmmmm XXXXXXXXXXXXXXXXXXFXXXXXXX XXXXXXX7XXXXXXXXXXXXXXXXXX ^XXXXXXXXXXXXXF' `7XXXXXXXXXXXXX^ ^XXXXXXXXXX' `XXXXXXXXXX^ XXXXXXXXXX XXXXXXXXXX {XXXXXXXX} {XXXXXXXX} `XXXXXXXX' `XXXXXXXX' XXXXXXXX XXXXXXXX .mXXXXXXXXm mXXXXXXXXm. .XXXF^^^^XXXm mXXX^^^^7XXX. JXXX} XXXX. .XXXX {XXXL .XXXXX XXXXX. .XXXXX XXXXX. {XXXXX XXXXX} {XXXXX XXXXX}
caratteristiche...
...comuni al buon offuscatore e alle bionde:
√ visione differente dell' “ambiente”
√ fantasia
√ senso estetico
√ capacita' risolutive fuori dall'ordinario
√ scopi differenti ma ben precisi
√ adattabilita'
caratteristiche...W
YS
INW
YG
f3802@optiplex:~/2010-linuxday/presentazione/code$ cat tf.c
#include <stdio.h>#define sub main#define True printf#define print /* False */ #define $True /*;;$True = "True\n";;;;;;$False = */ ;;;;print $True;sub(){True ("False\n");;}#define me A.G.O.W.#define End .
f3802@optiplex:~/2010-linuxday/presentazione/code$ gcc tf.c -o tf
f3802@optiplex:~/2010-linuxday/presentazione/code$ cat tf.c
#include <stdio.h>#define sub main#define True printf#define print /* False */ #define $True /*;;$True = "True\n";;;;;;$False = */ ;;;;print $True;sub(){True ("False\n");;}#define me A.G.O.W.#define End .
f3802@optiplex:~/2010-linuxday/presentazione/code$ gcc tf.c -o tf
f3802@optiplex:~/2010-linuxday/presentazione/code$ ./tf False
f3802@optiplex:~/2010-linuxday/presentazione/code$ cat tf.c
#include <stdio.h>#define sub main#define True printf#define print /* False */ #define $True /*;;$True = "True\n";;;;;;$False = */ ;;;;print $True;sub(){True ("False\n");;}#define me A.G.O.W.#define End .
f3802@optiplex:~/2010-linuxday/presentazione/code$ gcc tf.c -o tf
f3802@optiplex:~/2010-linuxday/presentazione/code$ ./tf False
f3802@optiplex:~/2010-linuxday/presentazione/code$perl tf.c True
Non c'e' Arte senza Tecnica
● Sia per essere “bionde”
● Sia per codare offuscato
Blonde/Rules
Tools
Soluzioni Sempliciquanto geniali
x3
4
Trovare x
x3
4
eccola
Trovare x
spirito d'osservazione
not blonde!
limx
=8
1x 8
8
dall'osservazione di:
Spirito d'osservazione
si deduce che:
limx
=4
1x 4
4
Spirito d'osservazione
manipolazione di significanti, significati e sintassi
1n sinx =
manipolazione di significanti, significati e sintassi
1n sinx =
manipolazione di significanti, significati e sintassi
1n sinx = six
manipolazione di significanti, significati e sintassi
1n sinx = six = 6
manipolazione di significanti, significati e sintassi
2
2= ?
manipolazione di significanti, significati e sintassi
tes
t y
ou
r “
blo
nd
nes
s”
2
2=
Significanti, Significati e Sintassi
yep
! U
r !
!
esteticaidee geniali
Estetica!
● Expand:(a+b)n
Estetica!
● Expand:(a+b)n
( a + b ) n
Estetica!
● Expand:(a+b)n
( a + b ) n
( a + b ) n
Estetica!
● Expand:(a+b)n
( a + b ) n
( a + b ) n
( a + b )n
etc...
Non c'e' Arte senza Tecnica
● Sia per essere “bionde”
● Sia per codare offuscato
coder/rules
tools hints...
● Utilizzo inconsulto degli “spazi”
● Libere peggiorazioni per mezzo degli “a capo”
● La parola “indentazione”... non esiste!
● La parola “indentazione” ha nuove definizioni
● “;” è un amico... se al posto sbagliato
● Utilizzo di “cose” in maniera indiretta
● Abuso indiscriminato di tutto l'inutile
● Ridefinizione del significato di “incubo”: i nomi
● “Inception”: l'incubo nell'incubo: s///, y/// et varianti...
● Commentare sempre, costantemente... MALE!
WY
SIN
WY
G
BASE
if ($not_mutt){
exit;
} else {
print "Mutt Funziona";
}
spazi...
if ($not_mutt){
exit;
} else {
print "Mutt Funziona";
}
if($not_mutt){
exit;
}else{
print "Mutt Funziona";
}
spazi... ... et new lines
if ($not_mutt){
exit;
} else {
print "Mutt Funziona";
}
if($not_mutt){exit;}else{print"Mutt Funziona";}
New New Lines
if ($not_mutt){exit;} else {print ”Mutt”.”Funz”.”iona”; }
Indentazionewhat's!?
if ($not_mutt) {exit ;} else { print “Mutt F”.“unzion".“a” ; ; }
Indentazioneche tentazione!
$var1 = $not_mutt;$var2 = “Mutt Funziona”;
if ($var1) {exit; } else {print $var2; }
if ($var1) { if ($var1) {exit;} else { print $var2;}}
?
Indentazioneche tentazione!
$var1 = $not_mutt;$var2 = “Mutt Funziona”;
if ($var1) { if ($var1) {exit;} else { print $var2;}}
if ($var1) { if ($var1) { exit; } else { print $var2; }}
“;”usiamole male
if($not_mutt){exit;}else{print “Mutt Funziona”;}
;;;;;;;;;;;;;;;;;;;;;;;; ;;;; if ($not_mutt) { ;;;; exit ;;;; }else{ ;;;; print "Mutt " ;;;; print "Funziona" ;;;; } ;; ;;;;;;;;;;;;;;;;;;;;;;
“;”usiamone tante!
“cose”... indirettenumerologia
● se è (universalmente) VERO che: ● 42 = (42 - 0) = (42 – (6 – 6)) = …
= 6+sqrt(12+2+(1+1)**1+0)+2**(0x5))
● allora perchè non scrivere “0” come: ● 42-(6+sqrt(12+2+(1+1)**1+0)+2**(0x5))}
“cose”... indirette(alcune) variabili speciali
● variabili gestite direttamente dall'interprete:
● $_ : La variabile di default per le operazioni di input e di pattern matching
– $_ = “Linux è Facile ”;
● $” : contiene la stringa che separa gli elementi stampati:
– @arr = (1, 2, 3);
$, = “+”;
print @arr
● $, : contiene la stringa che separa gli elementi stampati:
– $, = “ è ”;
– print “Linux”, “Facile”
● $\ $` $' $0 $$ $= $. $/ $+ $& ... ... and so on...
Linux è Facile
1+2+3
Linux è Facile
“cose”... indiretteoperatori all'opera
$var =~ s/ old / new /;
$var = “il Software Libero non Funziona”;
$var =~ s/non/si che/;
print $var ?
soluzione
$var = “il Software Libero non Funziona”;
$var =~ s/non/si che/;
print $var
“il Software Libero si che Funziona”
“cose”... indiretteoperatori: l'incubo
● s / / /;– s # # # ;– s { } [ ] ;– s ; ; ; ; ;– s s s s ;– ...
● y / / /;– [ but not today, sorry ]
y s y s y s
s y s y s y
“cose”... indiretteoperatori all'opera
s//Mutt Funziona/;print
s##Mutt Funziona#;print
s;;Mutt Funziona;;print
s ssMutt Funzionas;print
s{}[Mutt Funziona];print
$_=“Mutt Funziona”;s y s y s y; print
?
soluzione
$_ = “Mutt Funziona”; s y s y s y; print
s / s / s /; print
$_ = “Mutt Funziona”;$_ =~ s / s / s /; print $_
Mutt Funziona
1.
2.
3.
4.
l'inutile ci è utile!... ; {} () # $* ...
;;s;;Mutt Funziona;;print;;
{};s{}[Mutt Funziona];print;{}
{();};s{}[Mutt Funziona];print;{$=}
?
soluzione
{();};s{}[Mutt Funziona];print;{$=}
{();};s{}[Mutt Funziona];print;{$=}
s{}[Mutt Funziona];print;
$_=''; s///Mutt Funziona/;print $_;
Mutt Funziona
1.
2.
3.
4.
5.
nomivariabili e/o funzioni
● indecenti:– $_ $S $, $^
– $lol $1o1 $l0l $10l
– $______________________________________________
$_____________________________________________
● fuorvianti:– $true = false @false = (1,2,3)
– isInteger(x) # funzione che restituisce un array di nomi
● calcolati:– ${42 -(6+sqrt(12+2+(1+1)**1+0)+2**(0x5))}
– ${"\x5F"}
– ${$_}
Operatore Ternario
if <condizione>{
<se vera>;
} else {
<se falsa>;
}
<condizione> ? <se vera> : <se falsa>;
tunnel, arte o (più semplicemente) incubo?
mix
all
mix something
42?s::::0;
{y/}{/}
s ee"Mutt Funziona"eee;
?
?
???
? ??
soluzione
42?s::::0;
42 ? s::: : 0;
42 ? s/// : 0;
$_ = NULL
42 ? $_=~ s/// : 0;
sintassi valida, nessuna istruzione: NULL
1.
2.
3.
4.
5.
mix all
;s;{-*-};{-*-*-};;s^^we want just to print "Mutt Funziona"^;s;.{15};;;eval;;;
?
1. prime inutilità:
;s;{-*-};{-*-*-};;s^^we want just to print "Mutt Funziona"^;s;.{15};;;eval;;;
2. ricerca operatori s///:
s; ; ;;s^^we want just to print "Mutt Funziona"^;s;.{15};;;eval;
s/ / /;s//we want just to print "Mutt Funziona"/;s/.{15}//;eval;
3. altre inutilità:
s/ / /;s//we want just to print "Mutt Funziona"/;s/.{15}//;eval;
4. il timido $_:
$_: null
s//we want just to print "Mutt Funziona"/;$_: we want just to print "Mutt Funziona"
s/.{15}//;$_: print "Mutt Funziona"
eval;
3. eval:
$_: print "Mutt Funziona"
eval;
eval $_;
eval 'print “Mutt Funziona”';
print “Mutt Funziona”
offuschiamo...ole' !!
limpido... troppo!
print "evviva il Linux Day, evviva il Presidente";
limpido... troppo!
print "evviva il Linux Day, evviva il Presidente";
print "evviva ", "il ", "Linux ", "Day, ", "evviva ", "il ", "Presidente";
limpido... troppo!
print "evviva il Linux Day, evviva il Presidente";print "evviva ", "il ", "Linux ", "Day, ", "evviva ", "il ", "Presidente";
$,=" ";print "evviva","il","Linux","Day,","evviva","il","Presidente"; ^^ ^^ ^^ ^^ ^^ ^^ ^^
limpido... troppo!
$,=" ";print "evviva","il","Linux","Day,","evviva","il","Presidente";
$,=$";print reverse "Presidente","il","evviva","Day,","Linux","il","evviva";
limpido... troppo!
$,=" ";print "evviva","il","Linux","Day,","evviva","il","Presidente";
$,=$";print reverse "Presidente","il","evviva","Day,","Linux","il","evviva";
$,=$";@_ = reverse "Presidente","il","evviva","Day,","Linux","il","evviva";print @_;
limpido... troppo!
$,=" ";print "evviva","il","Linux","Day,","evviva","il","Presidente";
$,=$";print reverse "Presidente","il","evviva","Day,","Linux","il","evviva";
$,=$";@_ = reverse "Presidente","il","evviva","Day,","Linux","il","evviva";print @_;
$,=$";@_ = reverse "Presidente","il","evviva","Day,","Linux","il","evviva";$_ = join $, , @_; print;
limpido... troppo!
$,=$";@_ = reverse "Presidente","il","evviva","Day,","Linux","il","evviva";$_ = join$,,@_; print;
$,=$";@_ = reverse "Presidente","il","evviva","Day,","Linux","il","evviva";s//join$,,@_/e; print;
/e Evaluate the right side as an expression/ee Evaluate the right side as a string then eval the result
limpido... troppo!
$,=$";@_ = reverse "Presidente","il","evviva","Day,","Linux","il","evviva";s//join$,,@_/e; print;
$,=$";s//@_=reverse"Presidente","il","evviva","Day,","Linux","il","evviva"/e;s//join$,,@_/e;print;
limpido... troppo!
$,=$";s//@_=reverse"Presidente","il","evviva","Day,","Linux","il","evviva"/e;s//join$,,@_/e;print;
$,=$";s//'@_ = '.'reverse "Presidente","il","evviva","Day,","Linux","il","evviva"'/ee; $_='';s//"join".'$,,@_'/ee;print;
lingueascii, decimale, esadecimale, ottale...
Lingue
P r e s i d e n t e\120 \162 \145 \163 \151 \144 \145 \156 \164 \145
limpido... troppo!
$,=$";s//'@_ = '.'reverse "Presidente","il","evviva","Day,","Linux","il","evviva"'/ee; $_='';s//"join".'$,,@_'/ee;print;
$,=$";s//'@_ = '."\162\145\166\145\162\163\145".'"\120\162\145\163\151\144\145\156\164\145","\x69\x6c","\x65\x76\x76\x69\x76\x61","\x44\x61\x79\x2c","\114\151\156\165\170","\151\154","\145\166\166\151\166\141"'/ee; $_='';s//"\160\162\151\156\164 \x6a\x6f\x69\x6e".'$,,@_'/ee;
mixspazi, a capo, inutilita', “;”,s///
;$,=$";;;;; ;s//' @_='. "\162\145". "\166\145". "\162\163". "\145".'+'. '"\120"."". "\162\145". "\163\151". "\144\145". "\156\164". "e","\x69". "\x6c",#[". "\x65\x76". "\x76\x69". "\x76\x61", "\x44\x61". "\x79\x2c", "\114\151". "\156\165". "\170",#{}. "\151\154", "\145\166". "\166\151". "\166".#[}. "\141"'/ee; ;;$_='';s;; "\160\162". "\151\156". "\164 "." \x6a\x6f". "\x69\x6e". '$,,@_';ee;
07_example.pl
ddk@hell:~/2010-linuxday/presentazione/code$ cat 07_example.pl ;$,=$";;;;; ;s//' @_='. "\162\145". "\166\145". "\162\163". "\145".'+'. '"\120"."". "\162\145". "\163\151". "\144\145". "\156\164". "e","\x69". "\x6c",#[". "\x65\x76". "\x76\x69". "\x76\x61", "\x44\x61". "\x79\x2c", "\114\151". "\156\165". "\170",#{}. "\151\154", "\145\166". "\166\151". "\166".#[}. "\141"'/ee; ;;$_='';s;; "\160\162". "\151\156". "\164 "." \x6a\x6f". "\x69\x6e". '$,,@_';ee;
ddk@hell:~/2010-linuxday/presentazione/code$ cat 07_example.pl ;$,=$";;;;; ;s//' @_='. "\162\145". "\166\145". "\162\163". "\145".'+'. '"\120"."". "\162\145". "\163\151". "\144\145". "\156\164". "e","\x69". "\x6c",#[". "\x65\x76". "\x76\x69". "\x76\x61", "\x44\x61". "\x79\x2c", "\114\151". "\156\165". "\170",#{}. "\151\154", "\145\166". "\166\151". "\166".#[}. "\141"'/ee; ;;$_='';s;; "\160\162". "\151\156". "\164 "." \x6a\x6f". "\x69\x6e". '$,,@_';ee;
ddk@hell:~/2010-linuxday/presentazione/code$ perl 07_example.pl evviva il Linux Day, evviva il Presidente
finallya blond touch
08_
exa
mp
le.p
l
ddk@hell:~/2010-linuxday/presentazione/code$ cat 08_example.pl ;$,=$";;;;;# .-:++++XXXXXX A.G.O.W. ;s//' @_='.# .,:+++XXXXXXXXXXX "\162\145".# .++:++XXXXXXXXXX@XX "\166\145".# .++:+++XXX+++X+XXXXXXX "\162\163".# ,+::+:::.-----++++XXXX "\145".'+'.# .-::+ .-' .XX@++X@ '"\120"."".# .,:::| .-. |+@X+XXM "\162\145".# ,:::| .-` |+@X+XXM "\163\151".# ==-::\ _. ?+X+XXX@ "\144\145".# -:+:::\ |XXX@X@ "\156\164".# ..:+++:\ --` .XXXX@X@M "e","\x69".# .:+:++`.____.|+XXX@@@@MMM "\x6c",#[".# ,-:+:+\ \+X++:+++XXM "\x65\x76".# ____=:++++| |-,, : "\x76\x69".# . |-. !,! :: "\x76\x61",# - |-| !-! |; "\x44\x61".# - |-| !-: |: "\x79\x2c",# | |-| - !==! |: "\114\151".# !"\ |! ; ,,--! !. "\156\165".# "\ : \__..- .---:" : "\170",#{}.# "\ ".--=-"----".,-:" !:. "\151\154",# | -,.-==-=----=-=! !:. "\145\166".# "\166\151".# "\166".#[}.# BLONDES "\141"'/ee;# ;;$_='';s;;# MAKE "\160\162".# "\151\156".# IT "\164 "." # \x6a\x6f".# BETTER !!!! "\x69\x6e".# '$,,@_';ee;#
ddk@hell:~/2010-linuxday/presentazione/code$ cat 08_example.pl ;$,=$";;;;;# .-:++++XXXXXX A.G.O.W. ;s//' @_='.# .,:+++XXXXXXXXXXX "\162\145".# .++:++XXXXXXXXXX@XX "\166\145".# .++:+++XXX+++X+XXXXXXX "\162\163".# ,+::+:::.-----++++XXXX "\145".'+'.# .-::+ .-' .XX@++X@ '"\120"."".# .,:::| .-. |+@X+XXM "\162\145".# ,:::| .-` |+@X+XXM "\163\151".# ==-::\ _. ?+X+XXX@ "\144\145".# -:+:::\ |XXX@X@ "\156\164".# ..:+++:\ --` .XXXX@X@M "e","\x69".# .:+:++`.____.|+XXX@@@@MMM "\x6c",#[".# ,-:+:+\ \+X++:+++XXM "\x65\x76".# ____=:++++| |-,, : "\x76\x69".# . |-. !,! :: "\x76\x61",# - |-| !-! |; "\x44\x61".# - |-| !-: |: "\x79\x2c",# | |-| - !==! |: "\114\151".# !"\ |! ; ,,--! !. "\156\165".# "\ : \__..- .---:" : "\170",#{}.# "\ ".--=-"----".,-:" !:. "\151\154",# | -,.-==-=----=-=! !:. "\145\166".# "\166\151".# "\166".#[}.# BLONDES "\141"'/ee;# ;;$_='';s;;# MAKE "\160\162".# "\151\156".# IT "\164 "." # \x6a\x6f".# BETTER !!!! "\x69\x6e".# '$,,@_';ee;#
ddk@hell:~/2010-linuxday/presentazione/code$ perl 08_example.pl evviva il Linux Day, evviva il Presidente
dubbio finale
● "If you have to ask why, you're not a member of the intended audience. Please go on about your business and accept my apologies for this distraction."
Bob Zimbinskicreatore di ttyquake
http://webpages.mr.net/bobz/ttyquake/
dubbio finale
blode as a beer
?nome cognome GPG Key beer
sott
osc
rizi
on
i