推荐学习书目
› 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 · 11859 views
    This topic created in 2558 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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