Como el título - por favor alguien puede explicar cómo funciona los próximos guionesDeparsing/Decomposing - paso a paso este script Perl ofuscado
este imprime el texto: "Perl chicos son inteligentes"
''=~('(?{'.('])@@^{'^'-[).*[').'"'.('-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_').',$/})')
este imprime sólo "b"
use strict;
use warnings;
''=~('(?{'.('_/).+{'^'/]@@_[').'"'.('=^'^'_|').',$/})')
el Perl -MO = Deparse muestra sólo esto:
use warnings;
use strict 'refs';
'' =~ m[(?{print "b",$/})];
pero no tengo idea de por qué ...; (
¿Cuál es la manera recomendada de descomponer como los scripts? ¿Cómo empezar?
así, probado esto:
'' =~
(
'(?{'
.
(
'])@@^{'^'-[).*['
)
.
'"'
.
(
'-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_'
)
.
',$/})'
)
varias partes se concatenan por .
. Y el resultado de la bit a bit ^
probablemente da las partes de texto. Los:
perl -e "print '-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_'"
impresiones "chicos Perl son inteligentes" y la primera generación de ^
"imprimir".
Pero cuando, vuelvo a escribir a:
'' =~
(
'(?{'
.
(
'print'
)
.
'"'
.
(
'Perl guys are smart'
)
.
',$/})'
)
Mi Perl me dijo:
panic: top_env
extraño, primera vez que vi como mensaje de error ...
Eso significa: no está permitido reemplazar el 'str1'^'str2'
con el result
, (no entiendo por qué) y por qué el perl imprime el mensaje de pánico?
mi Perl:
This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-multi-2level
Sal: ejemplos se generan here
"Learn Perl" es la respuesta obvia. –
Pero realmente, nadie debería escribir código como este, por lo que no hay razón para tener que entenderlo. –
gracias por la explicación;) – cajwine