python2.6 pyc反编译

来源:互联网 发布:照片数据恢复 编辑:程序博客网 时间:2024/05/29 13:24

同学请我帮他反编译下几个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.pycError:  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.pyTraceback (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 linux2Type "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,出来了!!!


0 0
原创粉丝点击