Python2.6 Pyc デコンパイル
クラスメイトからいくつかの pyc ファイルをデコンパイルするように頼まれました。
試したツールは以下の通りです。
[1] uncompyle2
github: https://github.com/wibiti/uncompyle2
以前使ったことがありますが、pycはpython2.7以上で生成しなければならないという制約があります
試してみるつもりで、説明書に従って、使用しました。
E:\kkxue documentation\python\decompile\uncompyle2-master\scripts>python uncompyle2 log_error
.pyc
Error: uncompyle2 requires Python 2.7.
じゃあ、次
[2] UnPyc
github: https://github.com/tswr/UnPyc
で実行後、直接。
C:\Users\Administrator\Desktop\zhou\UnPyc-disasm_0.18>python UnPyc -dv log_error
.pyc > result.txt
result.txtを開くと、アセンブリコードであることがわかります。
--== Disasm ==--
00000008 CODE:
argcount:
00000009 LONG: 0L (00 00 00 00)
nlocals:
0000000D LONG: 0L (00 00 00 00)
stacksize:
00000011 LONG: 5L (05 00 00 00)
flags:
00000015 LONG: 64L (40 00 00 00)
(NOFREE)
code:
00000019 STR: 'd\x00\x00d\x01\x00k\x00\x00\x00Z\x00\x00e\x01\x00e\x00\x00\x00i\x02\x00\x83\x01\x00d\x02\x00j\x01\x00o\x16\x00\x01d...' (94 01 00 00 64 00 00 64 01 00 6B 00...)
00000000 64 - LOAD_CONST 0000 = 000001B7 INT: -1 (FF FF FF FF)
00000003 64 - LOAD_CONST 0001 = 000001BC None (4E)
00000006 6B - IMPORT_NAME 0000 = 000002E0 STR: 'sys' (03 00 00 00 73 79 73)
00000009 5A - STORE_NAME 0000 = 000002E0 STR: 'sys' (03 00 00 00 73 79 73)
0000000C 65 - LOAD_NAME 0001 = 000002E8 STR: 'len' (03 00 00 00 00 6C 65 6E)
0000000F 65 - LOAD_NAME 0000 = 000002E0 STR: 'sys' (03 00 00 00 73 79 73)
00000012 69 - LOAD_ATTR 0002 = 000002F0 STR: 'argv' (04 00 00 00 61 72 67 76)
00000015 83 - CALL_FUNCTION 0001
00000018 64 - LOAD_CONST 0002 = 000001BD INT: 3 (03 00 00 00)
0000001B 6A - COMPARE_OP 0001 = "<="
0000001E 6F - JUMP_IF_FALSE 0016 = -> 00000037
00000021 01 - POP_TOP
00000022 64 - LOAD_CONST 0003 = 000001C2 STR: "Please enter the:\n\t For example:'we... " (29 00 00 00 50 6C 65 61 73 65 20 65...)
00000025 47 - PRINT_ITEM
00000026 48 - PRINT_NEWLINE
00000027 65 - LOAD_NAME 0000 = 000002E0 STR: 'sys' (03 00 00 00 73 79 73)
0000002A 69 - LOAD_ATTR 0003 = 000002F9 STR: 'exit' (04 00 00 00 65 78 69 74)
0000002D 64 - LOAD_CONST 0004 = 000001F0 INT: 2 (02 00 00 00)
00000030 83 - CALL_FUNCTION 0001
00000033 01 - POP_TOP
00000034 6E - JUMP_FORWARD 0067 = -> 0000009E
00000037 01 - POP_TOP
00000038 65 - LOAD_NAME 0000 = 000002E0 STR: 'sys' (03 00 00 00 00 73 79 73)
0000003B 69 - LOAD_ATTR 0002 = 000002F0 STR: 'argv' (04 00 00 00 61 72 67 76)
0000003E 64 - LOAD_CONST 0005 = 000001F5 INT: 1 (01 00 00 00)
00000041 19 - BINARY_SUBSCR
しかし、直感的に読めないし、読めたとしても、この作者は「デコンパイル機能はまだ実装されていない」とはっきり言っているのです
if 'D' in sys.argv[1]:
print "# --== Decompile ==--"
print ">>> not implemented yet"
まさかの次(でもUnPycは後でアセンブリを学ぶときに便利です)
[3] pyc2py
github:https://github.com/eduble/pyc2py
実行は、以下の場合にエラーを報告します。
[root@netbase3_7road pyc2py-master]# python main.py . /test/log_error.pyc . /test/log_error.py
Traceback (most recent call last):
File "main.py", line 39, in ?
mod = __import__(module_name)
ImportError: Bad magic number in . /test/log_error.pyc
この主な理由は、pythonのバージョンが一致しないためです。
つまり、pycの生成に使われたpythonのバージョンとpycのデコンパイルに使われたpythonのバージョンが一致しないのです。
例えば、私の現在のバージョンはpython 2.4です。
[root@netbase3_7road pyc2py-master]# python
Python 2.4.3 (#1, Jan 9 2013, 06:47:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
python2.6をインストール(追加インストール、つまりmake altinstall)すると、問題が解決します。
[root@netbase3_7road pyc2py-master]# python2.6 main.py . /test/log_error.pyc > . /test/log_error.py
[root@netbase3_7road pyc2py-master]# cat . /test/log_error.py
[root@netbase3_7road pyc2py-master]#
しかし、デコンパイルがうまくいかないことがわかりました
この時点でイラッとしませんか?
もう一度探してみてはいかがでしょうか?
[4] 解答: http://depython.com
ここで
http://www.codeproject.com/Messages/3506499/how-to-convert-pyc-files-to-py-files-in-python.aspx
直接利用できる無料のデコンパイラーサイトがあります: http://depython.com/index.php
ただし、python2.0から2.6までしか対応していないことに注意してください。
テスト用のpycをアップロードしたら、OK、出てきた!!!!
関連
-
PythonでクロールするときにAttributeError: 'NoneType' オブジェクトに 'find_all' 属性がないのを解決する
-
Pythonコードのデバッグ問題:IOError: イメージファイルを識別できない
-
'dict' オブジェクトには 'has_key' という属性がありません。
-
ImportError: Windows の Django でプロジェクトを作成するとき、django.core solution という名前のモジュールがない。
-
Python エラー: int() の引数は文字列、バイトのようなオブジェクト、または数値でなければならず、 'list' ではありません。
-
python 3.3.2 エラー。urllib2' という名前のモジュールがない ソリューション
-
移動平均のPython実装
-
アルゴリズム図 1.2 二項対立型ルックアップ TypeError: リストのインデックスは整数またはスライスでなければならず、float ではありません 解答
-
Pythonのjson.loadsで文字列のデコードに失敗しました。ValueError: JSONオブジェクトをデコードできませんでした
-
Python - pickleファイルの異なるPython環境への変換
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決済みお客様のCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
Pythonの実行時にSyntaxError: invalid syntaxが発生した場合の対処方法
-
Python: pyHook-1.5.1-cp37-cp37m-win_amd64.whl はこのプラットフォームでサポートされたホイールではありません。
-
python3 のモジュール "importlib._bootstrap" に "SourceFileLoader" という属性がない問題を解決する。
-
urlでMax retries exceededの問題を解決しました。
-
np.random.multivariate_normalメソッド解析
-
ValueErrorです。変数 `x` と `y` のどちらも数値でないように見えます。
-
Python3+BeautifulSoupがUnicodeEncodeErrorを報告:'charmap' codec can't encode characters in position
-
python 1e-5とはどういう意味ですか?
-
Python2.7のエンコード問題:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position... 解決方法