我有一些已被“漂白”的 perl 文件(不知道它是否来自 ACME::Bleach,或类似的东西)。我对 Perl 不太熟悉,我想了解启动文件的单行代码如何解码后面的空格:
$_=<<'';y;\r\n;;d;$_=pack'b*',$_;$_=eval;$@&&die$@;$_
文件的其余部分是空白字符,并且文件本身是可执行的(它放置在 /bin 目录中)。
[解决方案],感谢@JB。
The pack
这部分似乎是最复杂的,我花了一段时间才注意到发生了什么。 Pack 正在获取 LSBonly每 8 个字符,并将其解包为二进制的大端字符。因此,制表符变为“0”,空格变为“1”。
'\t\t \t ' => '#'
in binary:
00001001 00001001 00100000 00100000 00100000 00001001 00100000 0100000
every LSB:
1 1 0 0 0 1 0 0
convert from from big-endian format:
0b00100011 == 35 == ord('#')
-
$_ = << '';
将文件的其余部分读入累加器。
-
y;\r\n;;d;
删除回车符和换行符。
-
$_ = pack 'b*', $_;
将字符转换为位$_
,最低有效位在前。
-
$_ = eval;
执行$_
作为 Perl 代码。
-
$@ && die $@; $_
优雅地处理异常和返回代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)