.pyc .pyo反编译

6 篇文章 0 订阅
3 篇文章 0 订阅

From: python 反编译 pyc 一些心得

现在用python的人也多了起来,代码安全始终是我们要考虑的问题,比如说我们要将我们的成果发布出去,py直接发布肯定是不行的(除非你是开源的),那么我们就只能考虑发布pyc文件了,

 

今天讨论的就是怎么反编译pyc到源代码的技术,从道理上来讲,这个是完全没问题的,而且反编译出来的代码质量应该相当高才对(参考java class的原理),在百度里面搜索的话,信息量不够,只有2.2以下版本的反编译

 

利用google的话有个短小的讨论比较有含金量http://stackoverflow.com/questions/8189352/decompile-python-2-7-pyc他提出了几个开源的反编译实现,其中比较知名的是uncompyle,经过git查询我们可以发现uncompyle2这个是一个基于uncompyle的加强版本,所以可以考虑使用这个

 

https://github.com/wibiti/uncompyle2 下载,安装  python setup.py install 没什么好说的

 

 安好后怎么用呢,这里要注意,文档写的不详细,实际上是去找python目录下/Scripts/uncompyle2 文件执行,其实打开 uncomple2就可以看到这个实际上是个py文件,具体参数 -h可以看到,给大家一个我写的小py可以减少些手动工作。

import os
import sys
               
def displayFile(file):
    unPath = sys.executable
    unPath = unPath[0:unPath.rfind(os.sep)]
    newname = file[0:file.rfind('.')] + '.py'
    command = "python -u "+unPath+"\scripts\uncompyle2 " + file + ">" + newname
    try:
        os.system(command)
    except e:
        print file
    
if __name__ == '__main__':
    
    #print unPath
    print 'init'
    displayFile('E:\\test.pyc')
    print 'finished'

有经验的py程序员会在发布程序的时候修改pyc的头8个字节,这8个字节是有特殊含义的

  1. 四个字节的magic number
  2. 四个字节的timestamp

头四个是magic number 很多pyc都在这个上面做文章,这修改成不合法的,然后你反编译就是败了,一板你可以找你自己编译成功的pyc头直接覆盖掉他的头8个字节就可以了, timestamp是文件的修改时间,主要是当源码有改变的时候python 就可以重新生成pyc 文件.

我说的比较简单,详细的可以看看这个http://www.iteye.com/topic/382423


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值