1
import imp
s = ''
if imp.get_magic() != 'm\xf2\r\n':
    raise RuntimeError, s


try:
    import zlib
except:
    raise RuntimeError, ''

import marshal
import sys
import os
for p in filter(os.path.exists, map(lambda p: os.path.join(p, 'ind.pyz'), sys.path)):
    f = open(p, 'rb')
    exec marshal.loads(zlib.decompress(f.read(905)))
    boot('ind', f, 64608)
    break
import inca

このコードは ind.pyc ファイルにあります。今私はそれを知りたいです:

これは何を暗号化しますか? zlibの最初の905バイトでind.pyzを解凍するのを見ることができますか?次に、ind.pyz を起動します (最初の 64608 バイト?)。わかったよね?

"ind.pyz" それは何ですか? 実行可能ファイルまたはコンパイル済みの pyc、つまり python ファイル? .pyz ファイルを逆コンパイルしようとしましたが、できません。また、これらのファイル用の逆コンパイラ ソフトウェアはありますか?

ここに ind.pyz ファイル (64kb) があります。このファイルはどのように圧縮されていますか? https://mega.co.nz/#!hIkH3RSI!f3UDHGI9omXXN7jXHJKYTCpMCU0y8N3npop6a3tfmcw

4

1 に答える 1

1

まず第一に、marshal出力はバージョンに依存する内部シリアライゼーション util です。そのため、コードは正しい Python バージョンでコンパイルされているかどうかを確認します。

if imp.get_magic() != 'm\xf2\r\n':
    raise RuntimeError, s

次にsys.pathind.pyz ファイルを探し、見つかった場合は 905 バイトを読み取ります。

f.read(905)

これらの 905 バイトは、zlib で圧縮された文字列と見なされるため、解凍されます

zlib.decompress(f.read(905))

結果の文字列は、python オブジェクトにアンマーシャリングされます。

marshal.loads(zlib.decompress(f.read(905)))

次に、このオブジェクトが実行されます。マーシャリングされていないオブジェクトはpythonコードだと思いますが、自分でチェックしません。信頼できないソースからのコードをアンマーシャリングしません;)

次の行では、

boot('ind', f, 64608)

bootビルドされた Python 関数ではないため、exec ステートメントで定義する必要があります。

于 2013-10-27T14:15:45.093 に答える