Как видно из названия - пожалуйста, может кто-нибудь объяснить, как следующие сценарии работыDeparsing/Разложение - шаг за шагом этот обфусцированный PERL скрипт
печатается текст: «Ребята Perl умные»
''=~('(?{'.('])@@^{'^'-[).*[').'"'.('-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_').',$/})')
это только печатает "б"
use strict;
use warnings;
''=~('(?{'.('_/).+{'^'/]@@_[').'"'.('=^'^'_|').',$/})')
Perl--MO = Deparse показывает только это:
use warnings;
use strict 'refs';
'' =~ m[(?{print "b",$/})];
, но havent any idea why ...; (
Каков рекомендуемый способ разложения, как скрипты? Как начать?
так, попытался это:
'' =~
(
'(?{'
.
(
'])@@^{'^'-[).*['
)
.
'"'
.
(
'-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_'
)
.
',$/})'
)
несколько частей сцепляются по .
. И результат побитового ^
, вероятно, дает текстовые части. В:
perl -e "print '-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_'"
печатает "ребята Perl умные" и первый ^
производящая "печать".
Но когда я переписать его:
'' =~
(
'(?{'
.
(
'print'
)
.
'"'
.
(
'Perl guys are smart'
)
.
',$/})'
)
Мой Perl сказал мне:
panic: top_env
Странно, первый раз я видел, как сообщение об ошибке ...
То значит: не допускается замена 'str1'^'str2'
на result
(не понимаю почему) и почему perl печатает сообщение о панике?
мой Perl:
This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-multi-2level
Ps: примеры генерируются here
«Learn Perl» - очевидный ответ. –
Но на самом деле никто не должен писать такой код, поэтому нет причин для его понимания. –
thanx для объяснения;) – cajwine