推荐学习书目
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
JasonTsang
V2EX  ›  Python

Python 写商业软件时 如何保护代码不被泄漏?

  •  1
     
  •   JasonTsang · Nov 8, 2019 · 11410 views
    This topic created in 2387 days ago, the information mentioned may be changed or developed.

    最近用 python 开发商业软件,但不知道 如何保护这些代码不被轻易破译,当然肯定会有人能破得了 ,但就现在来看 ,python 的源码真的处于无保护状态。请问应该怎么做才能很好的保护商业源码?软著也只能在法律上保护。比如一些人开发了你的软件,你的软件根本就不能再商业了。

    51 replies    2019-11-12 15:01:34 +08:00
    blackwolf
        1
    blackwolf  
       Nov 8, 2019   ❤️ 5
    直接把 python 编译成二进制包,网上搜搜,教程大把
    现在开源是大趋势,转一下思维吧
    说了不好听,只要代码在机器上跑,就一定可以被汇编,一定是能被破解的,只不过成本高低而已
    非专业的软件不提了,专业的软件从 PS,到高端的芯片版图的 candence 都有破解版
    连 apple 这种大厂,最严密的 bootrom 最近都能被人 dump 出来
    所以保护好代码,不如把把服务放在云端或者服务器端,以服务的形式体现或者转向卖服务
    如果软件里包含了核心的算法,还是不要提供到本地了吧,怎么搞都是可以被破解的,以云端 api 的形式是目前看起来最稳妥的方法了。
    Mutoo
        2
    Mutoo  
       Nov 8, 2019
    密钥有密码学,加密狗。算法、创意有专利法。源码尽管开源呗。
    est
        3
    est  
       Nov 8, 2019   ❤️ 11
    代码跑起来之后,把本地文件删了。

    重启一次给 100 元钱。
    chempotato
        4
    chempotato  
       Nov 8, 2019 via Android
    用 cython 加密
    wzw
        5
    wzw  
       Nov 8, 2019 via iPhone
    虚拟机,全盘加密
    Cooky
        6
    Cooky  
       Nov 8, 2019 via Android
    @blackwolf 混淆,编译,加壳🐸
    panpanhtai
        7
    panpanhtai  
       Nov 8, 2019 via iPhone
    @est
    sadfQED2
        8
    sadfQED2  
       Nov 8, 2019 via Android   ❤️ 1
    我说一个我见过的,用户服务器上面装虚拟机,代码全部在虚拟机里面,虚拟机操作系统设置密码,这样别人就破解不了了,另外部署也简单,一个 u 盘拷过去,虚拟机运行起来搞定
    xiaofengchen
        9
    xiaofengchen  
       Nov 8, 2019 via Android
    cython +1
    DonaidTrump
        10
    DonaidTrump  
       Nov 8, 2019 via iPhone
    @sadfQED2 把虚拟机停了,然后开另外一台虚拟机把有代码的虚拟机磁盘挂载上去,这样不就能读到代码了嘛?
    singerll
        11
    singerll  
       Nov 8, 2019 via Android
    @tulongtou 磁盘可以加密
    ericgui
        12
    ericgui  
       Nov 8, 2019 via Android   ❤️ 1
    别想太多,很可能你在写的代码根本没任何价值,没人破解你。

    即便真有价值,人家大概率会抄一份你的所有 feature,破解太费劲了
    dongyulin353
        13
    dongyulin353  
       Nov 8, 2019 via iPhone
    @sadfQED2 linux 的话,单用户模式可破密码
    set01
        14
    set01  
       Nov 8, 2019
    @est 这个想法真神奇
    DonaidTrump
        15
    DonaidTrump  
       Nov 8, 2019
    @singerll 现在虚拟机磁盘也可以加密了?
    secsilm
        16
    secsilm  
       Nov 8, 2019 via Android
    Windows 的话打包成 pyd,Linux 打成 so
    stevenkang
        17
    stevenkang  
       Nov 8, 2019
    SaaS 化
    wqzjk393
        18
    wqzjk393  
       Nov 8, 2019
    python 好像没多少人拿 python 写软件的吧,都是 web 后端+数据分析+ai。web 后端只开放 api 那只要服务器不被攻破就没什么被破解代码一说,数据分析这些几乎都是脚本文件或者 web 服务器后台处理的,也没啥破解的意义。ai 的话更没啥意思了,拿 python 写的 ai 基本上都是跟着论文写出来的实例而已,也就是说关键是在论文而不是代码。。
    est
        19
    est  
       Nov 8, 2019
    @set01 其实甚至可以远程加载 python+zip 代码。
    Yamtt
        20
    Yamtt  
       Nov 8, 2019 via Android
    放到 bsv 上
    EminemW
        21
    EminemW  
       Nov 8, 2019 via iPhone
    代码有什么关键技术吗。。。大部分重要的是数据吧。
    daiqiangbudainiu
        22
    daiqiangbudainiu  
       Nov 8, 2019
    这个问题 Java 也有
    handong970123
        23
    handong970123  
       Nov 8, 2019
    我们这边都是转成二进制文件
    ClericPy
        24
    ClericPy  
       Nov 8, 2019
    基本别想了, 多少人恰恰就是因为这问题转别的语言去了

    以前玩过 curl 一句一次性 https url 来执行, 也就是打包好 pyz 然后 xargs 那种, 代码和环境因为是在内存里的, 所以只要第一次没抓包到, 就没事, 然而抓包就拿到也没什么用

    所以还是做成 CS 服务吧
    singerll
        25
    singerll  
       Nov 8, 2019 via Android
    @tulongtou 磁盘全盘加密跟是不是虚拟机没关系吧
    liuzhiyong
        26
    liuzhiyong  
       Nov 8, 2019 via Android
    只有一个办法:业务的关键逻辑在自己的服务器上面。其他的办法,只要利益足够大,都能有牛人破解掉。
    binux
        27
    binux  
       Nov 8, 2019 via Android
    @est #3 内存 dump 如何?
    zhuangzhuang1988
        28
    zhuangzhuang1988  
       Nov 8, 2019
    代码写得烂点就好了.
    guanhui07
        29
    guanhui07  
       Nov 8, 2019
    转二进制
    hakono
        30
    hakono  
       Nov 8, 2019 via iPhone
    @singerll 磁盘加密也没用。虚拟机要跑起来必定需要对磁盘解密,而解密必定要秘钥,虚拟机都在客户手上了秘钥必定也一定藏在哪里,找到秘钥虚拟机就等于是裸奔了

    除非做法是虚拟机启动后就销毁秘钥再也不关闭虚拟机,每次关机后想启动虚拟机必须联系公司人员上门去启动导入秘钥
    hkitdog
        31
    hkitdog  
       Nov 8, 2019 via iPhone
    @guanhui07 Python 还能转二进制?
    anonymous256
        32
    anonymous256  
       Nov 8, 2019
    1. 大多数情况没有加密的必要性, 你的烂代码没多少闲人会看.
    2. 想要编译成二进制包, 参考知名开源项目:
    https://github.com/volatilityfoundation/volatility/wiki/Compiling-Binaries-with-Pyinstaller#compiling-with-pyinstaller
    3. 只是纯粹想保护代码, 使用 cython 编译成 C 扩展, 这样代码就不可读了.
    est
        33
    est  
       Nov 8, 2019
    @binux 当然可以。。。这就是双方对抗升级的过程了。23333
    blackwolf
        34
    blackwolf  
       Nov 8, 2019
    @Cooky 如果真有人愿意逆向,花点力气,费点时间,还是可以逆向出来的,混淆加壳,代码加花,大部分情况下只能延迟被逆向的时间,看看好多姿势水平极高木马,病毒,最后还不是被一波搞安全的把底裤脱得光光的。。。
    augustheart
        35
    augustheart  
       Nov 8, 2019
    别多想,你都选择 python 了,就不要再考虑保护代码不被破译的问题,毕竟生命苦短嘛。
    当然,如果只是字节码的层次,可以考虑字节码混淆工具。

    但是不要妄想在逆向层次对抗,任何公司,想对抗整个黑产都是痴心妄想,谷歌微软都不例外。有花在对抗上的心思把业务做好一点。
    crab
        36
    crab  
       Nov 8, 2019
    加密狗要么法律手段。
    leavic
        37
    leavic  
       Nov 8, 2019
    pyinstaller 这种所谓的打包,你们是来搞笑的吗?
    singerll
        38
    singerll  
       Nov 9, 2019 via Android
    @hakono 你可以看下类似 bitlocker,是可以套多层壳的,虽然是可以解,但有生之年。。。
    mamahaha
        39
    mamahaha  
       Nov 9, 2019 via Android
    必须联网才能使用。在服务器上进行加密。
    JasonTsang
        40
    JasonTsang  
    OP
       Nov 9, 2019
    @blackwolf 要的就是成本破解成本高,当成本高过我软件的价值,就没人掂记了。。
    JasonTsang
        41
    JasonTsang  
    OP
       Nov 9, 2019
    @sadfQED2 你是指 Docker????
    hakono
        42
    hakono  
       Nov 9, 2019 via iPhone
    @singerll 我寻思即便是 bitlocker 有秘钥也一样解密啊。难道 bitlocker 还存在有秘钥都无法解密的情况?那所有者是怎么解密的。。。。
    MartinWu
        43
    MartinWu  
       Nov 9, 2019
    @est #3 是个狼人
    MartinWu
        44
    MartinWu  
       Nov 9, 2019
    @est #3 但是如果非要说的话,从内存里 dump 出来也不是不可能。
    Achilless
        45
    Achilless  
       Nov 9, 2019
    @leavic 我也觉得,竟然这么多人推荐打包成可执行文件。。很容易被反编译的,无成本那种。。服了
    singerll
        46
    singerll  
       Nov 9, 2019 via Android
    @hakono 从系统引导时就开始加密了,理论上是可以解,实际上你要搞定好几层,理论上算法都是能破解的,实际上你要投入的精力真的是有生之年。
    而且,我的意思是,跟虚拟机没关系,即便是物理机,也能把硬盘拆下来。
    est
        47
    est  
       Nov 9, 2019
    @MartinWu 可是可能,但是看雪什么地方能抄着实践的教程就少了。很多人就放弃了。。。
    qile1
        48
    qile1  
       Nov 9, 2019 via Android
    现在好像是用 0oO 做混淆,生成 pyd,我也一直没啥办法,之后就是大包 exe 程序魔改编译器等,在之后好像是用其他语言写核心比如用 c 写核心调用接口!
    hkitdog
        49
    hkitdog  
       Nov 9, 2019 via iPhone
    @qile1 C 麻烦啊,用 libcurl 写个请求也要几百行的代码量,Python 一行搞定
    yuyanglive
        50
    yuyanglive  
       Nov 9, 2019 via Android
    Cython
    iMath
        51
    iMath  
       Nov 12, 2019
    用 Nuitka 打包就能实现你的要求
    github.com/Nuitka/Nuitka
    和 Cython 一样,都是先将 py 代码转成 C++,但是 Nuitka 在用来打包方面比 Cython 好用
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5073 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 139ms · UTC 09:37 · PVG 17:37 · LAX 02:37 · JFK 05:37
    ♥ Do have faith in what you're doing.