【发布时间】:2012-06-16 10:48:29
【问题描述】:
作为标题 - 请任何人解释下一个脚本是如何工作的
这会打印文本:“Perl guy are smart”
''=~('(?{'.('])@@^{'^'-[).*[').'"'.('-[)@{:__({:)[{(-:)^}'^'}>[,[]*&[[[[>[[@[[*_').',$/})')
这只会打印“b”
use strict;
use warnings;
''=~('(?{'.('_/).+{'^'/]@@_[').'"'.('=^'^'_|').',$/})')
perl -MO=Deparse 只显示这个:
use warnings;
use strict 'refs';
'' =~ m[(?{print "b",$/})];
但不知道为什么... ;(
推荐的分解脚本的方法是什么?如何开始?
所以,试试这个:
'' =~
(
'(?{'
.
(
'])@@^{' ^ '-[).*['
)
.
'"'
.
(
'-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'
)
.
',$/})'
)
几个部分由. 连接。而按位 ^ 的结果可能会给出文本部分。该:
perl -e "print '-[)@{:__({:)[{(-:)^}' ^ '}>[,[]*&[[[[>[[@[[*_'"
打印“Perl guy are smart”和第一个 ^ 生成“print”。
但是什么时候,我把它改写成:
'' =~
(
'(?{'
.
(
'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
【问题讨论】:
-
但是说真的,没有人应该写这样的代码,所以没有理由去理解它。
-
现在明白了。没有人应该受伤,所以这里没有理由学习急救。 ;)
-
其实我觉得很有意思,也想了解一下。
-
@cajwine:如果有人写这样的代码(不是开玩笑),那他们就是个白痴。如果您发现自己(例如)处于可以容忍此类代码的工作环境中,那么您应该离开。但无论哪种方式,我仍然建议将“学习 Perl”作为第一步!
-
@OliCharlesworth,我真的不明白为什么你不能接受它只是作为“用 perl 完成的奇怪事情”的简单演示。我很确定没有人在现实生活中使用它。这并不意味着这样的代码可以生成字符串至少是有趣的。
标签: perl deobfuscation