wzw
V2EX  ›  问与答

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

  •  2
     
  •   wzw · Apr 21, 2020 · 6300 views
    This topic created in 2235 days ago, the information mentioned may be changed or developed.

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

    询问的目的:

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

    其他相关信息

    18 replies    2020-04-28 17:43:07 +08:00
    wzw
        1
    wzw  
    OP
       Apr 21, 2020
    @fgg1991 麻烦你说一下, 你那边的使用情况. 谢谢
    niubee1
        2
    niubee1  
       Apr 21, 2020
    一般都是服务端程序,如果是要出售给甲方使用,一般都会做个 C++的启动器,从 git 上加载完到内存后就自动删掉源码。同时也可以用来作为版权控制和远程升级,bugfix 等功能。
    wzw
        3
    wzw  
    OP
       Apr 21, 2020
    @niubee1 #2 现在讨论的就是要装在 甲方服务器上的.

    (代码没有重要到值得他们这样搞, 只讨论技术的实现)
    1. 你这个方案, 内存里面会被 dump 吧.
    2. 每次启动都需要 git?
    3. 有现成的启动器吗
    bigtan
        4
    bigtan  
       Apr 21, 2020 via Android
    用 cython 把核心代码转换成二进制的 dll
    wzw
        5
    wzw  
    OP
       Apr 21, 2020
    @bigtan #4 暂先讨论 PyArmor, 实在重要, 可以用 Go 来写了
    locoz
        6
    locoz  
       Apr 21, 2020 via Android   ❤️ 1
    咦,这个不是之前 pycon china 上海站的一位讲师做的嘛😂那时候还跟他讨论过来着。
    这东西做法可以的,能在一定程度上保护好你的代码,如果客户那边没有一定技术能力的话是无法使用通用的方式解出你代码的。
    如果非常担心的话建议还是用编译型语言,搞完再加个壳、加点花指令,基本上逆的时候逻辑就变得很恶心了。
    wzw
        7
    wzw  
    OP
       Apr 21, 2020
    @locoz #6 我好想看懂你说的话了, 还是可以解开的?
    niubee1
        8
    niubee1  
       Apr 21, 2020
    @wzw 1,内存里会被 dump ?你对程序的执行貌似有那里理解不对。
    2,每次启动都要 git,实际上服务端程序为了无缝替换,重启过程都是先 git 新版本代码,启动新进程,等老进程执行完毕后用新进程替换。其实 Git 过程也有被窃取的风险,所以实际上用的时候是有个源码分发的服务,传输过程中源码是加密的。
    3,启动器是自己写的,事关 money,花了时间和精力开发的,也不会免费放出来用,你最好也自己写,用别人的就算是花了钱也难保不会有后门窃取你代码什么的。
    xuboying
        9
    xuboying  
       Apr 21, 2020
    用 gcore 可以 dump 出源码或者字节码么?
    感觉只有真正能把代码编译成机器码的工具才是绝对的安全啊,如果工具能做到这个,完全可以换一个更高层次的卖点了(类似 webasm )?
    m939594960
        10
    m939594960  
       Apr 21, 2020
    @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
        11
    locoz  
       Apr 21, 2020
    @wzw #7 解释型语言没办法的,最终总得解密出一个能运行的东西。虽然说有各种混淆方法能让代码晦涩难懂,但是如果只是为了拿到源码的话,解出来就够了,剩下的爱怎么反混淆就怎么反混淆。
    lewis89
        12
    lewis89  
       Apr 21, 2020
    @m939594960 #10 内存里面肯定会被 dump 吧,就算没有原始代码,解析后的词法令牌树肯定是有的,反编译一下就出结果了
    niubee1
        13
    niubee1  
       Apr 21, 2020
    @m939594960 内存 dump 出来的不是源码吧,就算反编译也得不到 Python 源码吧。 独立的加密文件分发服务替换掉 git
    hook python load 这事没考虑到,独立加载 Python 不用系统的能破

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

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


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

    一直很好奇已经跑起来的程序你怎么从内存 dump 恢复到 python 源码的。来试试?
    fgg1991
        16
    fgg1991  
       Apr 28, 2020
    不好意思 几天没上论坛。
    首先行业比较特殊,代码运行环境基本都是严格断网的,客户也是非互联网行业,一般情况 pyc 就足够保护了,客户缺少专门搞逆向的人员和动力,我们的产品还是公司软件,我的 python 只是附赠增强功能,所有 pyarmor 的强度足够了。如果有十足十的逆向动力和人才,我也不太确定 pyarmor 能否抗住,还是得看看 github 的代码评估一下。
    fgg1991
        17
    fgg1991  
       Apr 28, 2020
    或者说,在离线非互联网企业的生产环境里,应该是没有方法逆向的,因为部署逆向环境应该不会得到公司批准。
    fgg1991
        18
    fgg1991  
       Apr 28, 2020
    再或者说,我的使用环境基本只是要求尽量提高逆向难度,并不追求达到 C++编译一样的反破解难度,所以 pyarmor 对我绝对是够了。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3118 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 13:43 · PVG 21:43 · LAX 06:43 · JFK 09:43
    ♥ Do have faith in what you're doing.