同学请我帮他反编译下几个pyc文件,生成pyc文件的python版本是2.6.6
尝试了以下几个工具:
【1】uncompyle2
github:https://github.com/wibiti/uncompyle2
之前用过,但是有个限制是必须是python2.7以上生成的pyc
怀着试试的心理,还是按照说明使用了:
E:\kkxue文档\python\反编译\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\x00Z\x00\x00e\x01\x00e\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 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 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版本不一致导致
如我现在的版本就是python2.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.
>>>
安装了python 2.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
here:
http://www.codeproject.com/Messages/3506499/how-to-convert-pyc-files-to-py-files-in-python.aspx
直接有个免费的反编译的网站可以使用:http://depython.com/index.php
但是注意版本只支持python 2.0到2.6.
我上传测试pyc之后ok,出来了!!!
版权声明:本文为zuopaide原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。