0
from zipfile import ZipFile


fzip=ZipFile("crackme.zip")
fzip.extractall(pwd=b"mysecretpassword")

スクリプトは IDLE でのみ機能しますが、コマンド ラインから実行すると、次のように表示されます。

unzip.py

fzip.extractall(pwd=b"mysecretpassword")

                              ^

SyntaxError: 無効な構文

どうしたの?

4

1 に答える 1

1

動作します(Ubuntu 13.04):

>>> import sys
>>> sys.version
'3.3.1 (default, Apr 17 2013, 22:32:14) \n[GCC 4.7.3]'

>>> from zipfile import ZipFile
>>> f = ZipFile('a.zip')

ところで、pwdバイトオブジェクトである必要があります:

>>> f.extractall(pwd="mysecretpassword")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.3/zipfile.py", line 1225, in extractall
    self.extract(zipinfo, path, pwd)
  File "/usr/lib/python3.3/zipfile.py", line 1213, in extract
    return self._extract_member(member, path, pwd)
  File "/usr/lib/python3.3/zipfile.py", line 1275, in _extract_member
    with self.open(member, pwd=pwd) as source, \
  File "/usr/lib/python3.3/zipfile.py", line 1114, in open
    raise TypeError("pwd: expected bytes, got %s" % type(pwd))
TypeError: pwd: expected bytes, got <class 'str'>
>>> f.extractall(pwd=b'mysecretpassword')
>>>

zipfile.ZipFile.extractallドキュメントによると:

警告事前の調査なしに、信頼できないソースからアーカイブを抽出しないでください。ファイルがパスの外に作成される可能性があります。たとえば、"/" で始まる絶対ファイル名または 2 つのドット ".." で始まるファイル名を持つメンバーです。

バージョン 3.3.1 で変更: zipfile モジュールはそれを防ごうとします。extract()注を参照してください。

于 2013-09-25T16:36:38.520 に答える