5

「ブリーチ」されたいくつかの perl ファイルがあります (それが ACME::Bleach からのものか、または同様のものからのものかはわかりません)。perl にあまり詳しくないので、ファイルを開始するワンライナーが次の空白をデコードするために何をするかを理解したいと思います。

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

ファイルの残りの部分は空白文字であり、ファイルはそれ自体で実行可能です (ファイルは /bin ディレクトリに配置されます)。

[解決策]、@JBに感謝します。

このpack部分が最も複雑なようで、何が起こっているのか気付くまでにしばらく時間がかかりました。Pack は、8 文字ごとに LSBのみを取得し、それをバイナリのビッグ エンディアン文字として展開します。したがって、タブは「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('#')
4

2 に答える 2

11
  • $_ = << '';ファイルの残りをアキュムレータに読み込みます。
  • y;\r\n;;d;キャリッジ リターンとライン フィードを取り除きます。
  • $_ = pack 'b*', $_;$_LSB ファーストで文字をビットに変換します。
  • $_ = eval;$_Perl コードとして実行されます。
  • $@ && die $@; $_例外と戻りコードを適切に処理します。
于 2011-09-26T14:58:08.610 に答える
3

unbleach.plそれがあなたが本当にやろうとしていることであるならば、あなたは漂白を取り除くために使うことができます.

于 2011-09-26T19:07:18.467 に答える