这里主要介绍一下,python生成的pyo、pyc字节码文件的反编译工具uncompyle2(https://github.com/wibiti/uncompyle2).
python生成的字节码文件的反编译工具,有unpyclib和uncompyle2,发现uncompyle2可以直接转化为十分完美的python源码,并可以将反编译后的源码再次生成字节码文件!
安装uncompyle2
1.从github上获取uncompyle2然后进行配置。
2.sudo python setup.py install
3.解压的文件夹uncompyle2-master/scripts找到可以直接使用的脚本uncompyle2
反编译pyo、pyc
1../uncompyle2 ~/Desktop/abstract.pyc > ~/Desktop/abstract.py
2../uncompyle2 ~/Desktop/abstract.pyo > ~/Desktop/abstract.py
生成pyo
1.python -O -m py_compile abstract.py
注:如果不带选项-O则生成的是pyc文件,-O选项则可以在生成代码时进行一定的优化。
pyc的头8个字节
有经验的py程序员会在发布程序的时候修改pyc的头8个字节,这8个字节是有特殊含义的:
1.前四个字节magic number
2.后四个字节timestamp
头四个是magic number 很多pyc都在这个上面做文章,这修改成不合法的,然后你反编译就是败了,一般可以找自己编译成功的pyc头直接覆盖掉他的头8个字节就可以了, timestamp是文件的修改时间,主要是当源码有改变的时候python 就可以重新生成pyc 文件.
关于pyc文件,请参考http://www.iteye.com/topic/382423