最近用 python 开发商业软件,但不知道 如何保护这些代码不被轻易破译,当然肯定会有人能破得了 ,但就现在来看 ,python 的源码真的处于无保护状态。请问应该怎么做才能很好的保护商业源码?软著也只能在法律上保护。比如一些人开发了你的软件,你的软件根本就不能再商业了。
![]() | 1 blackwolf 2019-11-08 04:17:49 +08:00 ![]() 直接把 python 编译成二进制包,网上搜搜,教程大把 现在开源是大趋势,转一下思维吧 说了不好听,只要代码在机器上跑,就一定可以被汇编,一定是能被破解的,只不过成本高低而已 非专业的软件不提了,专业的软件从 PS,到高端的芯片版图的 candence 都有破解版 连 apple 这种大厂,最严密的 bootrom 最近都能被人 dump 出来 所以保护好代码,不如把把服务放在云端或者服务器端,以服务的形式体现或者转向卖服务 如果软件里包含了核心的算法,还是不要提供到本地了吧,怎么搞都是可以被破解的,以云端 api 的形式是目前看起来最稳妥的方法了。 |
![]() | 2 Mutoo 2019-11-08 05:46:19 +08:00 密钥有密码学,加密狗。算法、创意有专利法。源码尽管开源呗。 |
![]() | 3 est 2019-11-08 06:2040 +08:00 ![]() 代码跑起来之后,把本地文件删了。 重启一次给 100 元钱。 |
4 chempotato 2019-11-08 07:43:56 +08:00 via Android 用 cython 加密 |
![]() | 5 wzw 2019-11-08 08:02:41 +08:00 via iPhone 虚拟机,全盘加密 |
7 panpanhtai 2019-11-08 08:05:16 +08:00 via iPhone @est 服 |
![]() | 8 sadfQED2 2019-11-08 08:27:50 +08:00 via Android ![]() 我说一个我见过的,用户服务器上面装虚拟机,代码全部在虚拟机里面,虚拟机操作系统设置密码,这样别人就破解不了了,另外部署也简单,一个 u 盘拷过去,虚拟机运行起来搞定 |
![]() | 9 xiaofengchen 2019-11-08 08:29:56 +08:00 via Android cython +1 |
![]() | 10 DonaidTrump 2019-11-8 08:39:39 +08:00 via iPhone @sadfQED2 把虚拟机停了,然后开另外一台虚拟机把有代码的虚拟机磁盘挂载上去,这样不就能读到代码了嘛? |
![]() | 12 ericgui 2019-11-08 08:43:58 +08:00 via Android ![]() 别想太多,很可能你在写的代码根本没任何价值,没人破解你。 即便真有价值,人家大概率会抄一份你的所有 feature,破解太费劲了 |
13 dongyulin353 2019-11-08 08:50:22 +08:00 via iPhone @sadfQED2 linux 的话,单用户模式可破密码 |
![]() | 15 DonaidTrump 2019-11-08 09:15:50 +08:00 @singerll 现在虚拟机磁盘也可以加密了? |
![]() | 16 secsilm 2019-11-08 09:21:24 +08:00 via Android Windows 的话打包成 pyd,Linux 打成 so |
![]() | 17 stevenkang 2019-11-08 09:21:52 +08:00 SaaS 化 |
18 wqzjk393 2019-11-08 09:32:39 +08:00 python 好像没多少人拿 python 写软件的吧,都是 web 后端+数据分析+ai。web 后端只开放 api 那只要服务器不被攻破就没什么被破解代码一说,数据分析这些几乎都是脚本文件或者 web 服务器后台处理的,也没啥破解的意义。ai 的话更没啥意思了,拿 python 写的 ai 基本上都是跟着论文写出来的实例而已,也就是说关键是在论文而不是代码。。 |
20 Yamtt 2019-11-08 09:39:01 +08:00 via Android 放到 bsv 上 |
21 EminemW 2019-11-08 09:39:12 +08:00 via iPhone 代码有什么关键技术吗。。。大部分重要的是数据吧。 |
22 warcraft1236 2019-11-08 09:47:29 +08:00 这个问题 Java 也有 |
23 handong970123 2019-11-08 09:49:07 +08:00 我们这边都是转成二进制文件 |
![]() | 24 ClericPy 2019-11-08 09:50:45 +08:00 基本别想了, 多少人恰恰就是因为这问题转别的语言去了 以前玩过 curl 一句一次性 https url 来执行, 也就是打包好 pyz 然后 xargs 那种, 代码和环境因为是在内存里的, 所以只要第一次没抓包到, 就没事, 然而抓包就拿到也没什么用 所以还是做成 CS 服务吧 |
![]() | 26 liuzhiyong 2019-11-08 12:30:55 +08:00 via Android 只有一个办法:业务的关键逻辑在自己的服务器上面。其他的办法,只要利益足够大,都能有牛人破解掉。 |
![]() | 28 zhuangzhuang1988 2019-11-08 12:46:21 +08:00 代码写得烂点就好了. |
![]() | 29 guanhui07 2019-11-08 12:48:21 +08:00 转二进制 |
30 hakono 2019-11-08 12:56:19 +08:00 via iPhone @singerll 磁盘加密也没用。虚拟机要跑起来必定需要对磁盘解密,而解密必定要秘钥,虚拟机都在客户手上了秘钥必定也一定藏在哪里,找到秘钥虚拟机就等于是裸奔了 除非做法是虚拟机启动后就销毁秘钥再也不关闭虚拟机,每次关机后想启动虚拟机必须联系公司人员上门去启动导入秘钥 |
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 扩展, 这样代码就不可读了. |
![]() | 34 blackwolf 2019-11-08 14:24:29 +08:00 @Cooky 如果真有人愿意逆向,花点力气,费点时间,还是可以逆向出来的,混淆加壳,代码加花,大部分情况下只能延迟被逆向的时间,看看好多姿势水平极高木马,病毒,最后还不是被一波搞安全的把底裤脱得光光的。。。 |
35 augustheart 2019-11-08 14:35:56 +08:00 别多想,你都选择 python 了,就不要再考虑保护代码不被破译的问题,毕竟生命苦短嘛。 当然,如果只是字节码的层次,可以考虑字节码混淆工具。 但是不要妄想在逆向层次对抗,任何公司,想对抗整个黑产都是痴心妄想,谷歌微软都不例外。有花在对抗上的心思把业务做好一点。 |
![]() | 36 crab 2019-11-08 16:37:32 +08:00 加密狗要么法律手段。 |
![]() | 37 leavic 2019-11-08 16:41:23 +08:00 pyinstaller 这种所谓的打包,你们是来搞笑的吗? |
![]() | 38 singerll 2019-11-09 00:29:33 +08:00 via Android @hakono 你可以看下类似 bitlocker,是可以套多层壳的,虽然是可以解,但有生之年。。。 |
![]() | 39 mamahaha 2019-11-09 00:56:43 +08:00 via Android 必须联网才能使用。在服务器上进行加密。 |
40 JasonTsang OP @blackwolf 要的就是成本破解成本高,当成本高过我软件的价值,就没人掂记了。。 |
41 JasonTsang OP @sadfQED2 你是指 Docker???? |
42 hakono 2019-11-09 10:40:58 +08:00 via iPhone @singerll 我寻思即便是 bitlocker 有秘钥也一样解密啊。难道 bitlocker 还存在有秘钥都无法解密的情况?那所有者是怎么解密的。。。。 |
![]() | 46 singerll 2019-11-09 12:19:53 +08:00 via Android @hakono 从系统引导时就开始加密了,理论上是可以解,实际上你要搞定好几层,理论上算法都是能破解的,实际上你要投入的精力真的是有生之年。 而且,我的意思是,跟虚拟机没关系,即便是物理机,也能把硬盘拆下来。 |
48 qile1 2019-11-09 15:32:16 +08:00 via Android 现在好像是用 0oO 做混淆,生成 pyd,我也一直没啥办法,之后就是大包 exe 程序魔改编译器等,在之后好像是用其他语言写核心比如用 c 写核心调用接口! |
50 yuyanglive 2019-11-09 16:31:06 +08:00 via Android Cython |
51 iMath 2019-11-12 15:01:34 +08:00 用 Nuitka 打包就能实现你的要求 github.com/Nuitka/Nuitka 和 Cython 一样,都是先将 py 代码转成 C++,但是 Nuitka 在用来打包方面比 Cython 好用 |