難読化
せっかくなのでPerlの難読化をやってみます。
Acme::EyeDropsというモジュールがあってVisual Programming in Perlと言っているのですが、思いっきり難読化ツールです。
元になるソースを作ってsample.plとして保存しておきます。
use strict; while (<>) { 1 while $_ =~ s/(.*\d)(\d{3})/$1,$2/; print; }
難読化のためのスクリプトを書きます。
use strict; use Acme::EyeDrops qw(sightly); print sightly({ Shape => 'camel', SourceFile => 'sample.pl' });
実行結果。
eval eval '"'. ('['^"\.").( ('[')^ '(').('`'|'%'). ('{'^'['). ('['^'(').('['^'/' ).('['^')' ).('`' |')').('`'|'#').('[' ^'/').';'.('!'^'+'). ('!'^'+').('['^"\,").( '`'|'(').('`'|"\)").( '`'|',').('`'|'%').('{' ^'[').'('.'<'."\>". ')'.('{'^'[').'\\'.('{').( '!'^'+').('*'^ '#').('^'^('`'|'/')).('{'^'[' ).('['^"\,").( '`'|'(').('`'|')').('`'|(',')).( '`'|'%').("\{"^ '[').'\\'.'$'.'_'.('{'^'[').'='.'~' .('{'^'[').('[' ^'(').'/'.'('.'.'.'*'.'\\'.'\\'.("\`"| '$').')'.('('). '\\'.'\\'.('`'|'$').'\\'.'{'.('^'^("\`"| '-')).'\\'.'}' .')'.'/'.'\\'.'$'.('^'^('`'|'/')).','.''. '\\'.'$'.('^'^ ('`'|',')).'/'.';'.('!'^'+').('*'^('#')).( '['^'+').('['^')').('`'|')').('`'|'.').('['^'/').';'.('!'^ '+').'\\'.'}'.('!'^'+').'"';$:='.'^'~';$~='@'|'(';$^=(')')^ '[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'|'`' ;$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^'~';$~= '@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^ '}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|' ;$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,="\("^ '}' ;$\='`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&' |(( '@'));$,='['&'~';$\=','^'|';$:='.'^'~';$~ ='@'|'(' ;$^ =')'^'[';$/='`'|'.';$,='('^'}';$\='`'| '!';$:= ')' ^'}'; $~='*'|'`';$^='+'^'_';$/="\&"| '@';$,= '[' &'~';$\=','^'|';$:='.'^'~';$~ =('@')| '(' ;$^=')'^ '[';$/='`' |"\."; $,='(' ^+ '}';$\= '`'|'!'; $:=')' ^"\}"; $~ =('*')| "\`";$^= "\+"^ "\_"; ( ($/))= '&'|'@'; ($,) ='[' &"\~"; $\=(',')^ '|'; ($:) ='.'^ "\~";$~= '@'| '('; ($^)= ')'^'[' ;$/= '`'| '.'; $,='(' ^'}' ;$\= '`'| '!' ;$:= ')'^ '}'; $~= '*' |(( '`' )); $^= '+' ^(( '_' )); $/= '&' |(( '@' )) ;( ($,))= (( (( '[')) )) &+ "\~";$\= (( ',' ))^+ "\|"; $: =(( '.'))^ '~'; $~= '@'| "\(";$^= ')' ^'[' ;($/)= ('`')| "\.";$,= '('^'}'
オプションを変えると実行結果も変わります。今度はこれを実行。
use strict; use Acme::EyeDrops qw(sightly); print sightly({ Shape => 'larry', SourceFile => 'sample.pl' });
結果はこれ。
eval eval '"'. ('['^'.').("\["^ '(').('`'|'%').('{'^'[' ).('['^'(').('['^'/').('['^')' ).''. ('`' |')' ).( '`'| '#' ).+( ( '[' )^(( ( '/' )))) .+ ( ';' ).+( ( ( '!' ))^ (( (( '+' ))) )) . ((( '!' ))^+ ( '+' )). ('[' ^ ',' ).( '`'| ( '(' )). ('`'|')') . ((( '`' )) | (( ',' )) ) .( '`' | ( (( '%' ) ))).( '{' ^ (( '[' ) )).'('.'<'.'>'.')'.('{'^'[').'\\'.'{'. ((( '!'))^'+').( '*'^'#' ) . ("\^"^( ( '`' ) | '/' )). +( ( ( (( '{' ))) ) ^(( ( ( ('[')))))).( ( ( '['))^',').( ( '`' ) | ( ( ( (( '(' ) ) ) )) ) .( ( '`')| ( ( (( ( (( ( ( ( ( ( ( (( ( ')' ))))))))))))))) ) ).('`'|','). +( ( ( ( ( ( ( ( ( ( ( ( ( '`' ) ) ) ))) )) ) ) ) )|'%').('{'^'[').'\\' . ( ( '$')).'_'.('{'^'[').'='. ( ( ( '~'))).('{'^'[').('['^'(') . ( ( '/')) .'('.'.'."\*". '\\' . ( ( '\\' ) ) .+( ( (( '`' )))|'$').')'.'(' .(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ((( (( ( ( '\\'))))))) ) )))))))))))))))) )))))))))))).'\\'.('`'| '$').'\\'.'{'.('^'^('`'|'-')). '\\'. '}'. ')'. '/' .''. ((( '\\' ) )). '$'. ( '^' ^((( (( ( '`' )))) ) | '/' )). (( (( ',' ))) ). ( ((( ((( '\\' ) ))) ))) .'$' . ((( '^' ))^( ( '`' )|+ ',')).'/' . ';' .+( (( ( (( '!' )) ) )) ^(( ( ( (( '+' ) ))))) ).( ( (( '*' ) ))^'#').('['^'+').('['^')').('`'|')'). ((( '`'))|'.').( '['^'/' ) . (';').( ( '!' ) ^ '+' ).+ (( ( ( (( ((( ((( ( ((( ( ( '\\')))))))) ) ) )))))))).'}' . ((( ( ( ( ( ( (( '!' ) ) ) )) ) )) ) ^'+') . ( (( ( (( ( ( ( ( ( ( (( ( '"' ))))))))))))))) ; $:='.'^"\~"; $~ = ( ( ( ( ( ( ( ( ( ( ( '@' ) ) ) ))) )) ) ) ) |'(';$^=')'^('[');$/= ( ( ( '`')))|'.';$,='('^'}';$\ = ( ( '`'))|'!';$:=')'^('}');$~= ( ( ( '*')) )|'`';$^="\+"^ '_'; ( ( ( $/)) ) = '&' | (( '@' ));$,='['&'~';#; #;# ; # ; # ; # ; # ; # ; # ; # ; # ; # ; # ; # ; # ; # ; #;# ;# ; # ;#;#;#;#;#; #
Acme::EyeDrops - Perlにおけるビジュアル・プログラミング(Visual Programming)でいろいろなサンプルを見ることができます。