这个来自“漂白”文件的perl行是做什么的?

时间:2011-09-26 14:37:03

标签: perl deobfuscation

我有一些已被“漂白”的perl文件(不知道它是来自ACME :: Bleach,还是类似的东西)。我不太熟悉perl,我想了解启动文件的单行程序如何解码后面的空格:

$_=<<'';y;\r\n;;d;$_=pack'b*',$_;$_=eval;$@&&die$@;$_

文件的其余部分是空白字符,文件本身是可执行的(它放在/ bin目录中)。

[解决方案],感谢@JB。

pack部分似乎是最复杂的,我花了一段时间才注意到发生了什么。 Pack只接受每8个字符的LSB ,并将其作为二进制文件中的big-endian字符解压缩。标签因此变为'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('#')

2 个答案:

答案 0 :(得分:10)

  • $_ = << '';将文件的其余部分读入累加器。
  • y;\r\n;;d;剥离回车和换行。
  • $_ = pack 'b*', $_;将字符转换为$_中的位,首先是LSB。
  • $_ = eval;执行$_作为Perl代码。
  • $@ && die $@; $_正常处理异常和返回代码。

答案 1 :(得分:3)

您可以使用unbleach.pl删除漂白,如果这是您真正想要做的事情。