PyArmor 这样的工具真的可以保护 Python 源代码吗?

2020-04-21 07:44:17 +08:00
 wzw

关于 PyArmor 第二次询问大家了.

询问的目的:

PyArmor 真的可以保护源代码吗?

其他相关信息

5366 次点击
所在节点    问与答
18 条回复
wzw
2020-04-21 07:44:29 +08:00
@fgg1991 麻烦你说一下, 你那边的使用情况. 谢谢
niubee1
2020-04-21 07:52:30 +08:00
一般都是服务端程序,如果是要出售给甲方使用,一般都会做个 C++的启动器,从 git 上加载完到内存后就自动删掉源码。同时也可以用来作为版权控制和远程升级,bugfix 等功能。
wzw
2020-04-21 08:01:48 +08:00
@niubee1 #2 现在讨论的就是要装在 甲方服务器上的.

(代码没有重要到值得他们这样搞, 只讨论技术的实现)
1. 你这个方案, 内存里面会被 dump 吧.
2. 每次启动都需要 git?
3. 有现成的启动器吗
bigtan
2020-04-21 08:23:00 +08:00
用 cython 把核心代码转换成二进制的 dll
wzw
2020-04-21 08:27:10 +08:00
@bigtan #4 暂先讨论 PyArmor, 实在重要, 可以用 Go 来写了
locoz
2020-04-21 08:42:28 +08:00
咦,这个不是之前 pycon china 上海站的一位讲师做的嘛😂那时候还跟他讨论过来着。
这东西做法可以的,能在一定程度上保护好你的代码,如果客户那边没有一定技术能力的话是无法使用通用的方式解出你代码的。
如果非常担心的话建议还是用编译型语言,搞完再加个壳、加点花指令,基本上逆的时候逻辑就变得很恶心了。
wzw
2020-04-21 09:04:57 +08:00
@locoz #6 我好想看懂你说的话了, 还是可以解开的?
niubee1
2020-04-21 09:14:21 +08:00
@wzw 1,内存里会被 dump ?你对程序的执行貌似有那里理解不对。
2,每次启动都要 git,实际上服务端程序为了无缝替换,重启过程都是先 git 新版本代码,启动新进程,等老进程执行完毕后用新进程替换。其实 Git 过程也有被窃取的风险,所以实际上用的时候是有个源码分发的服务,传输过程中源码是加密的。
3,启动器是自己写的,事关 money,花了时间和精力开发的,也不会免费放出来用,你最好也自己写,用别人的就算是花了钱也难保不会有后门窃取你代码什么的。
xuboying
2020-04-21 09:44:01 +08:00
用 gcore 可以 dump 出源码或者字节码么?
感觉只有真正能把代码编译成机器码的工具才是绝对的安全啊,如果工具能做到这个,完全可以换一个更高层次的卖点了(类似 webasm )?
m939594960
2020-04-21 09:59:26 +08:00
@niubee1 #8
1.太天真了,首先内存确实会被 dump,DNF 的 TP 就会 dump 注入到 dnf 里的 dll,当初有些不懂的开挂人员天真的把外挂放到 U 盘里,然后启动之后拔掉 U 盘,然而毛用没有。
2.这个太简单了,人家抓包都能玩死你,还放 Git 人家直接从你 git 上拿。
3.你敢放出来,我就敢弄死他。


再说几个思路
1.hook python load 开始加载的位置,直接拿到代码
2.hook git clone 的位置,直接拿到 git 地址
locoz
2020-04-21 13:58:50 +08:00
@wzw #7 解释型语言没办法的,最终总得解密出一个能运行的东西。虽然说有各种混淆方法能让代码晦涩难懂,但是如果只是为了拿到源码的话,解出来就够了,剩下的爱怎么反混淆就怎么反混淆。
lewis89
2020-04-21 14:35:41 +08:00
@m939594960 #10 内存里面肯定会被 dump 吧,就算没有原始代码,解析后的词法令牌树肯定是有的,反编译一下就出结果了
niubee1
2020-04-21 14:59:09 +08:00
@m939594960 内存 dump 出来的不是源码吧,就算反编译也得不到 Python 源码吧。 独立的加密文件分发服务替换掉 git
hook python load 这事没考虑到,独立加载 Python 不用系统的能破

剩下的时候就是从破解程序变化成了破解 Loader 的源码了。因为 Loader 程序比较小巧而且变化性小,所以比较容易做防护。
m939594960
2020-04-21 16:20:50 +08:00
@niubee1 #13
你在 U 盘里放一个 python 文件,运行之后拔掉 u 盘,你看还能正常运行不? pyc 可以反编译到 py 哦,python 应该不会翻译到其他代码了把,他又没有 jit 。

独立加载 Python ?没用的,你用啥 python,我也能 hook 你的 load 啊,我找不到你的 load 我找你读文件的 call 行了吧。


个人觉得最好的办法,就是自己编译一个 python 解释器,把里面的很多功能改写一下,还能提升一点难度
niubee1
2020-04-22 21:27:36 +08:00
@m939594960 你把所有 py 文件都 import 后是可以的。pyc 可以反编译到 py (部分)但是内存里不是 pyc 。

一直很好奇已经跑起来的程序你怎么从内存 dump 恢复到 python 源码的。来试试?
fgg1991
2020-04-28 17:38:05 +08:00
不好意思 几天没上论坛。
首先行业比较特殊,代码运行环境基本都是严格断网的,客户也是非互联网行业,一般情况 pyc 就足够保护了,客户缺少专门搞逆向的人员和动力,我们的产品还是公司软件,我的 python 只是附赠增强功能,所有 pyarmor 的强度足够了。如果有十足十的逆向动力和人才,我也不太确定 pyarmor 能否抗住,还是得看看 github 的代码评估一下。
fgg1991
2020-04-28 17:40:43 +08:00
或者说,在离线非互联网企业的生产环境里,应该是没有方法逆向的,因为部署逆向环境应该不会得到公司批准。
fgg1991
2020-04-28 17:43:07 +08:00
再或者说,我的使用环境基本只是要求尽量提高逆向难度,并不追求达到 C++编译一样的反破解难度,所以 pyarmor 对我绝对是够了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/664493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX