L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo...

120
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”.

Transcript of L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo...

Page 1: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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”.

Page 2: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 3: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 4: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Who's who

perl -e '+$,=+$";+s//"\160\162\151\156\164\x20\x27\

\x4a\x61\x6e\x65\x0a\x27"/ee'

Page 5: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

NON

parleremo di...

$_= “Doverose Precisazioni”;s/ve/lo/; print

Page 6: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

… questo “anello di congiunzione”

$_= “Doverose Precisazioni”;s/ve/lo/; print

Page 7: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Parlano di L*i...

Page 8: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Parlano di L*i...indiscusso protagonista

The R

ing

Tr

on

Page 9: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Par l

an

o d

i L*

i ..

pre

ziosi

ssim

o

c olla

bora

tor e

Page 10: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

NON

parleremo di...

$_= “Doverose Precisazioni”;s/ve/lo/; print

Page 11: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Paura eh...

Page 12: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

queste “bionde” :

No

t a

s i

n “

blo

nd

e b

e er”

Page 13: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Parleremo di:errate percezioni

delirio e arte

caratteristiche

perl ob. coder blonde

strumenti e metodologie

perl ob. coder blonde

offuschiamo

Page 14: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

L'incomincio...

Page 15: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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.

Page 16: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 17: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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.

Page 18: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Percepito ma...

● Dalle definizioni di cui prima:● Blonde “percepita” come diversamente intelligente.● Codice Offuscato “percepito” come diversamente

consigliabile.

● Ma chi percepisce chi?!?

Page 19: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Paura dell'incompreso!

Mu

tt R

esearc

h I

nst i

tute

Page 20: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Analisi e Analogie

● Cosa accomuna:

#!/bin/perl

print "Just Another Perl Hacker";

?

Page 21: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Analisi e Analogie

● Cosa accomuna:

R: attività ritenute NORMALI

#!/bin/perl

print "Just Another Perl Hacker";

Page 22: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Analisi e Analogie

● Cosa accomuna: #!/bin/perl

$_ = "wftedskaebjgdpjgidbsmnjg";tr/a-z/oh, turtleneck Phrase Jar!/; print;

?

Page 23: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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.

Page 24: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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...

Page 25: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

● il Perl è difficile● il Python non si offusca

examples of

stereotypes and prejudices

01_python-smile.py

ahahah

Page 26: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 27: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 28: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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'

Page 29: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Offuscare Codice...

● Non è una tecnica

Page 30: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

…come l'essere “Blonde”

● Ma una forma d'arte!

← videoesempio

Page 31: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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'

Page 32: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

e il Perl Offuscato ?

Page 33: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Perl... esempio

02_eureka.pl

Page 34: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 35: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 36: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Perl... esempio

03_camel-code.pl

Page 37: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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$

Page 38: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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$

Page 39: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Perl... esempio

04_camel-code-modding.pl

Page 40: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 41: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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}

Page 42: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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'

Page 43: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

caratteristiche...W

YS

INW

YG

Page 44: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 45: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 46: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 47: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Non c'e' Arte senza Tecnica

● Sia per essere “bionde”

● Sia per codare offuscato

Page 48: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Blonde/Rules

Page 49: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Tools

Page 50: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Soluzioni Sempliciquanto geniali

Page 51: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

 x3

4

Trovare x

Page 52: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

 x3

4

eccola

Trovare x

Page 53: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

spirito d'osservazione

not blonde!

Page 54: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

limx

=8

1x ­ 8

8

dall'osservazione di:

Spirito d'osservazione

Page 55: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

si deduce che:

limx

=4

1x ­ 4

4

Spirito d'osservazione

Page 56: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

manipolazione di significanti, significati e sintassi

Page 57: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

1n sinx = 

manipolazione di significanti, significati e sintassi

Page 58: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

1n sinx = 

manipolazione di significanti, significati e sintassi

Page 59: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

1n sinx = six 

manipolazione di significanti, significati e sintassi

Page 60: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

1n sinx = six = 6 

manipolazione di significanti, significati e sintassi

Page 61: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

2

2= ?

manipolazione di significanti, significati e sintassi

tes

t y

ou

r “

blo

nd

nes

s”

Page 62: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

2

2=

Significanti, Significati e Sintassi

yep

! U

r !

!

Page 63: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

esteticaidee geniali

Page 64: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Estetica!

● Expand:(a+b)n

Page 65: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Estetica!

● Expand:(a+b)n

( a + b ) n

Page 66: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Estetica!

● Expand:(a+b)n

( a + b ) n

( a + b ) n

Page 67: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Estetica!

● Expand:(a+b)n

( a + b ) n

( a + b ) n

( a + b )n

etc...

Page 68: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Non c'e' Arte senza Tecnica

● Sia per essere “bionde”

● Sia per codare offuscato

Page 69: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

coder/rules

Page 70: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 71: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

BASE

if ($not_mutt){

exit;

} else {

print "Mutt Funziona";

}

Page 72: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

spazi...

if ($not_mutt){

exit;

} else {

print "Mutt Funziona";

}

if($not_mutt){

exit;

}else{

print "Mutt Funziona";

}

Page 73: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

spazi... ... et new lines

if ($not_mutt){

exit;

} else {

print "Mutt Funziona";

}

if($not_mutt){exit;}else{print"Mutt Funziona";}

Page 74: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

New New Lines

if ($not_mutt){exit;} else {print ”Mutt”.”Funz”.”iona”; }

Page 75: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Indentazionewhat's!?

if ($not_mutt) {exit ;} else { print “Mutt F”.“unzion".“a” ; ; }

Page 76: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Indentazioneche tentazione!

$var1 = $not_mutt;$var2 = “Mutt Funziona”;

if ($var1) {exit; } else {print $var2; }

if ($var1) { if ($var1) {exit;} else { print $var2;}}

?

Page 77: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Indentazioneche tentazione!

$var1 = $not_mutt;$var2 = “Mutt Funziona”;

if ($var1) { if ($var1) {exit;} else { print $var2;}}

if ($var1) { if ($var1) { exit; } else { print $var2; }}

Page 78: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

“;”usiamole male

if($not_mutt){exit;}else{print “Mutt Funziona”;}

Page 79: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

;;;;;;;;;;;;;;;;;;;;;;;; ;;;; if ($not_mutt) { ;;;; exit ;;;; }else{ ;;;; print "Mutt " ;;;; print "Funziona" ;;;; } ;; ;;;;;;;;;;;;;;;;;;;;;;

“;”usiamone tante!

Page 80: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

“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))}

Page 81: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

“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 ”;

print

● $” : 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

Page 82: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

“cose”... indiretteoperatori all'opera

$var =~ s/ old / new /;

$var = “il Software Libero non Funziona”;

$var =~ s/non/si che/;

print $var ?

Page 83: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

soluzione

$var = “il Software Libero non Funziona”;

$var =~ s/non/si che/;

print $var

“il Software Libero si che Funziona”

Page 84: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

“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

Page 85: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

“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

?

Page 86: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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.

Page 87: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

l'inutile ci è utile!... ; {} () # $* ...

;;s;;Mutt Funziona;;print;;

{};s{}[Mutt Funziona];print;{}

{();};s{}[Mutt Funziona];print;{$=}

?

Page 88: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

soluzione

{();};s{}[Mutt Funziona];print;{$=}

{();};s{}[Mutt Funziona];print;{$=}

s{}[Mutt Funziona];print;

$_=''; s///Mutt Funziona/;print $_;

Mutt Funziona

1.

2.

3.

4.

5.

Page 89: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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"}

– ${$_}

Page 90: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Operatore Ternario

if <condizione>{

<se vera>;

} else {

<se falsa>;

}

<condizione> ? <se vera> : <se falsa>;

Page 91: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

tunnel, arte o (più semplicemente) incubo?

mix

all

Page 92: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

mix something

42?s::::0;

{y/}{/}

s ee"Mutt Funziona"eee;

?

?

???

? ??

Page 93: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

soluzione

42?s::::0;

42 ? s::: : 0;

42 ? s/// : 0;

$_ = NULL

42 ? $_=~ s/// : 0;

sintassi valida, nessuna istruzione: NULL

1.

2.

3.

4.

5.

Page 94: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

mix all

;s;{-*-};{-*-*-};;s^^we want just to print "Mutt Funziona"^;s;.{15};;;eval;;;

?

Page 95: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;

Page 96: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;

Page 97: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

3. eval:

$_: print "Mutt Funziona"

eval;

eval $_;

eval 'print “Mutt Funziona”';

print “Mutt Funziona”

Page 98: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

offuschiamo...ole' !!

Page 99: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

limpido... troppo!

print "evviva il Linux Day, evviva il Presidente";

Page 100: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

limpido... troppo!

print "evviva il Linux Day, evviva il Presidente";

print "evviva ", "il ", "Linux ", "Day, ", "evviva ", "il ", "Presidente";

Page 101: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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"; ^^ ^^ ^^ ^^ ^^ ^^ ^^

Page 102: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

limpido... troppo!

$,=" ";print "evviva","il","Linux","Day,","evviva","il","Presidente";

$,=$";print reverse "Presidente","il","evviva","Day,","Linux","il","evviva";

Page 103: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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 @_;

Page 104: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;

Page 105: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 106: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;

Page 107: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;

Page 108: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

lingueascii, decimale, esadecimale, ottale...

Page 109: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

Lingue

P r e s i d e n t e\120 \162 \145 \163 \151 \144 \145 \156 \164 \145

Page 110: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;

Page 111: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 112: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;

Page 113: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 114: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

finallya blond touch

08_

exa

mp

le.p

l

Page 115: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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;#

Page 116: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

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

Page 117: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

dubbio finale

Page 118: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

● "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

Page 119: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne

blode as a beer

?nome cognome GPG Key beer

sott

osc

rizi

on

i

Page 120: L' Anello di Congiunzione tra L'Informatica e le “Bionde ... · digressione storica Il primo esempio di codice offuscato e' rappresentato dal codice della shell Bourne (Steve Bourne