也许是全球唯一能用的 Python 代码混淆器,新增支持 string literals 混淆 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
huntzhan
V2EX    分享创造

也许是全球唯一能用的 Python 代码混淆器,新增支持 string literals 混淆

  •  3
     
  •   huntzhan
    huntzhan 2022-02-27 10:11:57 +08:00 8406 次点击
    这是一个创建于 1388 天前的主题,其中的信息可能已经有所发展或是发生改变。

    pywhlobf 0.2.0 发布,也许是全球唯一能用的 Python 代码混淆器, 传送门

    这次发布新增支持 string literals 混淆,基于 adamyaxley/Obfuscate

    第 1 条附言    2022-02-27 15:34:46 +08:00
    各位点收藏的朋友,点收藏的同时也顺手帮忙点个 star 呀
    https://github.com/huntzhan/pywhlobf/stargazers
    第 2 条附言    2022-02-28 15:24:13 +08:00
    感谢大家的反馈,根据反馈优化了 logging 输出,发布新版本 0.2.2
    第 3 条附言    2022-02-28 19:22:44 +08:00
    0.2.3 版本,新增基于 Cython 3.0 prerelease 支持
    27 条回复    2022-03-04 10:32:10 +08:00
    shinession
        1
    shinession  
       2022-02-27 10:24:51 +08:00 via Android
    先收藏了,支持一下
    Kinnice
        2
    Kinnice  
       2022-02-27 10:50:59 +08:00 via Android
    balabalaguguji
        3
    balabalaguguji  
       2022-02-27 10:53:29 +08:00
    先收藏了,后面用到再看
    huntzhan
        4
    huntzhan  
    OP
       2022-02-27 11:05:30 +08:00
    @Kinnice 看来我们对“能用”的定义不一样哈哈
    duke807
        5
    duke807  
       2022-02-27 11:40:19 +08:00 via Android
    如果混淆得不保,可以把各或全部 py 文件成二制,完全不有源的那(你可以查中的 c 文件),譬如我一目,主 py 本成可行文件,被引用的 py 本成 so 文件
    出来的 so 也可以被普通 py 文件 import
    (的和的文件可以任意合搭配)


    echo "cython main"
    cython --embed -o main.c main.py
    gcc -Os -I /usr/iclude/python3.8 -o main main.c -lpython3.8 -lpthread -lm -lutil -ldl
    mv main.py main.py_bk

    echo "cython ae_"
    cython --embed -o ae_.c ae_.py
    gcc -Os -I /usr/include/python3.8 -o ae_.so ae_.c -shared -fPIC -lpython3.8 -lpthread -lm -lutil -ldl
    mv ae_.py ae_.py_bk
    huntzhan
        6
    huntzhan  
    OP
       2022-02-27 13:33:22 +08:00
    @duke807 是的,同样的原理
    0o0O0o0O0o
        7
    0o0O0o0O0o  
       2022-02-27 14:48:43 +08:00 via iPhone
    不熟悉 python ,不过既然能够 py to c ,接下来是不是可以直接用 ollvm 以及它的一些 fork 呢?
    huntzhan
        8
    huntzhan  
    OP
       2022-02-27 14:52:18 +08:00
    @0o0O0o0O0o 是的,有空打算把 https://github.com/obfuscator-llvm/obfuscator 也加进去
    0o0O0o0O0o
        9
    0o0O0o0O0o  
       2022-02-27 14:54:15 +08:00 via iPhone
    @huntzhan 这个原版有点老了,可以找一些新的 fork ,升级了 llvm 版本,混淆也强力很多
    huntzhan
        10
    huntzhan  
    OP
       2022-02-27 15:04:24 +08:00
    @0o0O0o0O0o 是的,一开始没上 ollvm 的原因也是因为看着 llvm 版本太老了,同时也没有找到比较多人用的替代选项。感觉这里面还是有一些坑的。可以帮忙推荐几个你觉得靠谱的新 fork 吗?
    huntzhan
        12
    huntzhan  
    OP
       2022-02-27 15:25:03 +08:00
    @0o0O0o0O0o mark ,谢谢
    xinyana
        13
    xinyana  
       2022-02-27 15:59:11 +08:00 via Android
    无论如何先支持一下
    Garasu
        14
    Garasu  
       2022-02-27 16:30:49 +08:00
    你好,我属于刚入门 python 的非专业相关的。。。 想问一下,关于 python 的混淆和加密这类的知识应该怎么学?有没有相关的博文或书之类的推荐(目前仅有 python 和部分计算机组成原理基础的知识
    huntzhan
        15
    huntzhan  
    OP
       2022-02-27 16:36:00 +08:00   1
    @Garasu 这部分知识与计算机专业本科的若干课程有关联,如 C/C++、编译原理、操作系统、信息安全等。如果是初学者,我的建议是先读 [CSAPP]( https://csapp.cs.cmu.edu/),这本书基本涵盖了上面的内容
    Garasu
        16
    Garasu  
       2022-02-27 17:24:12 +08:00
    @huntzhan 欧克,已找到。
    vicalloy
        17
    vicalloy  
       2022-02-28 20:37:38 +08:00
    楼主的这个是基于 cython 的?
    最近在看 python 代码保护方面的东西。就目前看下来,没有让人很满意的。
    1. cython 将 python 编译成 so 。试编译了一个小项目,编译可以成功,跑起来出错。
    2. Nuitka 将 python 编译成 so 。编译成功,可以跑,涉及到多线程 /async 的地方有一定概率报错。根据官方说明,lock 的实现太慢,被直接去掉了。
    3. 各类代码加密库。可用的不多,安全性也存疑。
    huntzhan
        18
    huntzhan  
    OP
       2022-02-28 20:45:44 +08:00
    @vicalloy 基于 Cython 。Nuitka 的性能问题比较严重,我之前调研过也放弃了。之前执行出错的原因有深入调查吗? Cython 确实是有一些限制导致运行时出错。这个工具我用在生产环境上的多个项目,已经稳定跑了超多一年,可靠程度上我觉得应该不会有太大问题。
    wzw
        19
    wzw  
       2022-02-28 21:39:51 +08:00 via iPhone
    以前需要,现在转 go 了……
    gengchun
        20
    gengchun  
       2022-03-01 10:40:52 +08:00
    这个能支持 alpine 那些 musl 吗?
    huntzhan
        21
    huntzhan  
    OP
       2022-03-01 13:18:05 +08:00   1
    @gengchun 原理上并没有问题,见

    https://www.python.org/dev/peps/pep-0656/
    https://github.com/pypa/cibuildwheel/pull/768
    https://github.com/pypa/manylinux/pull/1135

    等有用户在 issue 上提说需要 musllinux 时我会看看这个怎么加
    NanFengXiangWan
        22
    NanFengXiangWan  
       2022-03-02 00:18:48 +08:00 via iPhone
    本人 python 小白,请问这个工具的主要应用场景和功能是什么,混淆后怎么运行
    LeeReamond
        23
    LeeReamond  
       2022-03-02 07:24:47 +08:00
    童年时期曾幻想过相关项目,自己写了一些 ast 混淆感觉也是聊胜于无,自我安慰,到现在感觉也没什么分发还要加密的需求,纯粹收藏学习了。一个疑问是既然混淆工具开源那逆向不是也很简单。另外混淆部分有 api 可以直接看输出么,比较好奇混淆后的结果是什么样的
    huntzhan
        24
    huntzhan  
    OP
       2022-03-03 20:21:19 +08:00
    @NanFengXiangWan 比较常见是私有化部署场景,防止代码逻辑被客户逆向得到,确保商业授权可控。混淆后的 Python wheel 包可以通过 `pip install` 安装,与其他的包使用过程没有区别
    huntzhan
        25
    huntzhan  
    OP
       2022-03-03 20:25:13 +08:00
    @LeeReamond 只要有足够的利益,总是可以逆出来的。混淆的方式目的在于提升逆向的成本,不是保证不能被逆向。开源与否问题不大,即使知道了流程是怎么做的,背后还有一个 C++ 编译器优化的“黑盒”在,有足够的复杂度。至于输出是什么,可以看看 Cython 的文档
    LeeReamond
        26
    LeeReamond  
       2022-03-04 03:20:09 +08:00
    @huntzhan 我以为这个项目是解析 ast 然后混淆 python 代码再接入 cython 编译,所以你直接叫我看 cython 文档意思是这只是个 cython 快捷工具?
    huntzhan
        27
    huntzhan  
    OP
       2022-03-04 10:32:10 +08:00
    @LeeReamond 是的,没有什么技术含量
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3180 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 11:51 PVG 19:51 LAX 03:51 JFK 06:51
    Do have faith in what you're doing.
    ubao msn 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