大家有好的Python代码保护方案吗,希望不要有人说我不支持开源。。。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
oldgun
V2EX    Python

大家有好的Python代码保护方案吗,希望不要有人说我不支持开源。。。

  •  
  •   oldgun 2011-12-23 23:28:50 +08:00 9307 次点击
    这是一个创建于 5107 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在google上搜了一圈暂时没发现靠谱成熟的方案,不知道这里有没有人有经验?
    28 条回复    1970-01-01 08:00:00 +08:00
    c
        1
    c  
       2011-12-23 23:33:03 +08:00
    我原来也想加密自己代码,后来想想自己写的乱代码有人看吗?所以就无所谓了
    vicalloy
        2
    vicalloy  
       2011-12-23 23:39:04 +08:00
    只发布pyc
    laihj
        3
    laihj  
       2011-12-23 23:40:45 +08:00
    别发布
    oldgun
        4
    oldgun  
    OP
       2011-12-24 01:17:44 +08:00
    @vicalloy pyc可以轻易被反编译的
    alsotang
        5
    alsotang  
       2011-12-24 01:35:23 +08:00
    @vicalloy @oldgun pyc理论上很容易反编译。你看看能不能用ironpython或者jython来生成对应的.class文件?不过说起来.class文件也是可以反编译,比C++的二进制方便多了。
    可能说起来这些解释型的语言都很难保密吧。
    and,你可以把系统里面关键的部分用C++改写,然后python调用生成的二进制.so或.a,这样应该就跟C++写的程序一个保密级别了吧?毕竟要保密的部分不是整个代码啊。但这也只能保密关键算法部分,要是想保密逻辑...可能就真的要C++全部改写了。
    不知我的回答有没有帮助。
    windhunter
        6
    windhunter  
       2011-12-24 01:35:44 +08:00
    我也有类似的苦恼。

    有时候不是不想开源,而是客观条件不允许。比如某些客户的某些内部数据规范无法公开。通常情况下,只好放弃使用python。选择其他的解决方案。

    目前我所知道的比较靠谱的方法是:
    修改python源码,改写生成pyc的部分,造成生成的pyc只能在自己的python解释器上使用。

    而代价是:程序离开了定制的解释器就跑不了。(有源码还是可以的,pyc不行)

    我理解社区对于python开源的心态。
    不过,我想知道的是,同样php也是开源,但有不少混淆器出现。(商业的非商业的都有)
    perl也是开源,貌似也有不错的混淆器(可惜perl不好读写)

    相比而言,只是php有zend这个公司支持,python没有。仅仅是这个区别就造成了python没有优秀混淆器的出现么?
    windhunter
        7
    windhunter  
       2011-12-24 01:38:17 +08:00
    @alsotang load c库的办法看来也不错。
    lijia18
        8
    lijia18  
       2011-12-24 04:38:01 +08:00
    混淆用处不大,别人想看照看。再者说网站逻辑需要很高的保密吗?大的网站给你代码你也看不懂,小的网站不用代码别人就能copy的一模一样。与其保护代码不如花心思在保护数据上吧。
    tioover
        9
    tioover  
       2011-12-24 15:16:49 +08:00
    我记得有本书叫python黑帽客讲的就是反编译python,应该有解决方法
    reducm
        10
    reducm  
       2011-12-24 15:36:21 +08:00 via Android
    用非脚本语言编译成二进制包装下行么
    oldgun
        11
    oldgun  
    OP
       2011-12-24 17:37:27 +08:00
    @alsotang 保护关键代码这个是常用办法,但正如你说的有时候需要保护的还有逻辑。
    @windhunter 你说的是修改字节码吧,但我想有你的解释器,一样可以看的。
    @lijia18 python不是只用来写网站的
    dndx
        12
    dndx  
       2011-12-24 18:13:23 +08:00
    纯Python没这潜力,最靠谱的还是C extension。
    skywinger
        13
    skywinger  
       2011-12-24 18:59:41 +08:00
    加壳吧,加一个bin可执行码的壳。
    bhuztez
        14
    bhuztez  
       2011-12-24 19:04:29 +08:00
    据说只要改用Perl写一遍就可以了
    skydark
        15
    skydark  
       2011-12-24 19:17:17 +08:00
    用cython快速改装成C模块?
    mywaiting
        16
    mywaiting  
       2011-12-24 20:24:19 +08:00
    @bhuztez 这是讽刺Perl的么.....完全亮了......
    alsotang
        17
    alsotang  
       2011-12-25 15:27:08 +08:00
    @mywaiting @bhuztez 确实亮。
    Hyperion
        18
    Hyperion  
       2011-12-25 15:42:54 +08:00
    @dndx +1 记得, 有篇文章里说过: python要保密, 就去写块c...
    ant_sz
        19
    ant_sz  
       2011-12-25 22:10:27 +08:00
    @skydark cython?还有这种神器?我去google下
    oldgun
        20
    oldgun  
    OP
       2011-12-26 23:52:09 +08:00
    小程序,桌面应用,决定换c#,实现起来应该不python容易。
    讨论到此结束,谢谢大家!
    oldgun
        21
    oldgun  
    OP
       2011-12-26 23:52:31 +08:00
    比python容易。
    likuku
        22
    likuku  
       2011-12-27 00:00:08 +08:00
    法制环境,用户习惯,固有文化。技术因素影响很少了。
    skywinger
        23
    skywinger  
       2011-12-27 00:01:24 +08:00
    楼主C#的也不安全,照样可以反编译出来,除非用c、c++、delphi这类的原生编译型语言。
    oldgun
        24
    oldgun  
    OP
       2011-12-27 00:10:52 +08:00
    @skywinger 至少比python好点,而且实现起来容易,并且用户比较固定,问题不大。
    python太裸奔了。
    oldgun
        25
    oldgun  
    OP
       2011-12-27 00:12:21 +08:00
    @skywinger 题外话,delphi现在状况如何?
    skywinger
        26
    skywinger  
       2011-12-27 00:45:07 +08:00
    @oldgun delphi据说目前可以跨平台可开发ios应用,具体的不大清楚。
    so898
        27
    so898  
       2011-12-27 00:47:25 +08:00
    JAVA也是面临一样的问题,好在JAVA这边的混淆器这么多年已经成熟了
    PYTHON的话,纯服务器端,只给交互接口的话是个比较好的保护方案,不过这个只能给服务器应用……
    jint
        28
    jint  
       2012-01-04 16:20:32 +08:00
    其实代码的价值没有想象的那么大,如果真是有广大市场的领域,再复杂的加密都有人能破解,
    你去卖盗版盘那里一看,什么软件都有。这是从你的客户层面说。
    从竞争者层面说,如果潜在利益够大,照着你的软件山寨一个都可以。
    真正的价值,在于你对相关业务逻辑或者商业模型的理解,以及融合到软件中的能力,这才是壁垒。
    我只是说说对大部分没太多技术含量的软件的看法,OS之类高难的不论。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1570 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:22 PVG 00:22 LAX 08:22 JFK 11:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86