首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
Coding
V2EX  ›  Python

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

  •  1
     
  •   JasonTsang · 33 天前 · 4576 次点击
    这是一个创建于 33 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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