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
JasonTsang
V2EX    Python

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

  •  1
     
  •   JasonTsang 2019-11-08 02:36:54 +08:00 10904 次点击
    这是一个创建于 2167 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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