難読化

せっかくなので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)でいろいろなサンプルを見ることができます。