V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
huntzhan
V2EX  ›  分享创造

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

  •  2
     
  •   huntzhan ·
    huntzhan · 168 天前 · 4184 次点击
    这是一个创建于 168 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    第 1 条附言  ·  167 天前
    各位点收藏的朋友,点收藏的同时也顺手帮忙点个 star 呀😄
    https://github.com/huntzhan/pywhlobf/stargazers
    第 2 条附言  ·  166 天前
    感谢大家的反馈,根据反馈优化了 logging 输出,发布新版本 0.2.2
    第 3 条附言  ·  166 天前
    0.2.3 版本,新增基于 Cython 3.0 prerelease 支持
    27 条回复    2022-03-04 10:32:10 +08:00
    shinession
        1
    shinession  
       168 天前 via Android
    先收藏了,支持一下
    Kinnice
        2
    Kinnice  
       168 天前 via Android
    balabalaguguji
        3
    balabalaguguji  
       168 天前
    先收藏了,后面用到再看
    huntzhan
        4
    huntzhan  
    OP
       168 天前
    @Kinnice 看来我们对“能用”的定义不一样哈哈
    duke807
        5
    duke807  
       168 天前 via Android
    如果混淆覺得還不夠保險,可以把各別或全部 py 文件編譯成二進制,完全不會有源碼的那種(你可以檢查中間的 c 文件),譬如我一個項目,主 py 腳本編譯成可執行文件,被引用的 py 腳本編譯成 so 文件
    編譯出来的 so 也可以被普通 py 文件 import
    (編譯過的和沒編譯的文件可以任意組合搭配)


    echo "cython main"
    cython --embed -o main.c main.py
    gcc -Os -I /usr/include/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
       168 天前
    @duke807 是的,同样的原理
    0o0O0o0O0o
        7
    0o0O0o0O0o  
       167 天前 via iPhone
    不熟悉 python ,不过既然能够 py to c ,接下来是不是可以直接用 ollvm 以及它的一些 fork 呢?
    huntzhan
        8
    huntzhan  
    OP
       167 天前
    @0o0O0o0O0o 是的,有空打算把 https://github.com/obfuscator-llvm/obfuscator 也加进去
    0o0O0o0O0o
        9
    0o0O0o0O0o  
       167 天前 via iPhone
    @huntzhan 这个原版有点老了,可以找一些新的 fork ,升级了 llvm 版本,混淆也强力很多
    huntzhan
        10
    huntzhan  
    OP
       167 天前
    @0o0O0o0O0o 是的,一开始没上 ollvm 的原因也是因为看着 llvm 版本太老了,同时也没有找到比较多人用的替代选项。感觉这里面还是有一些坑的。可以帮忙推荐几个你觉得靠谱的新 fork 吗?
    huntzhan
        12
    huntzhan  
    OP
       167 天前
    @0o0O0o0O0o mark ,谢谢
    xinyana
        13
    xinyana  
       167 天前 via Android
    无论如何先支持一下
    Garasu
        14
    Garasu  
       167 天前
    你好,我属于刚入门 python 的非专业相关的。。。 想问一下,关于 python 的混淆和加密这类的知识应该怎么学?有没有相关的博文或书之类的推荐(目前仅有 python 和部分计算机组成原理基础的知识
    huntzhan
        15
    huntzhan  
    OP
       167 天前   ❤️ 1
    @Garasu 这部分知识与计算机专业本科的若干课程有关联,如 C/C++、编译原理、操作系统、信息安全等。如果是初学者,我的建议是先读 [CSAPP]( https://csapp.cs.cmu.edu/),这本书基本涵盖了上面的内容
    Garasu
        16
    Garasu  
       167 天前
    @huntzhan 欧克,已找到。
    vicalloy
        17
    vicalloy  
       166 天前
    楼主的这个是基于 cython 的?
    最近在看 python 代码保护方面的东西。就目前看下来,没有让人很满意的。
    1. cython 将 python 编译成 so 。试编译了一个小项目,编译可以成功,跑起来出错。
    2. Nuitka 将 python 编译成 so 。编译成功,可以跑,涉及到多线程 /async 的地方有一定概率报错。根据官方说明,lock 的实现太慢,被直接去掉了。
    3. 各类代码加密库。可用的不多,安全性也存疑。
    huntzhan
        18
    huntzhan  
    OP
       166 天前
    @vicalloy 基于 Cython 。Nuitka 的性能问题比较严重,我之前调研过也放弃了。之前执行出错的原因有深入调查吗? Cython 确实是有一些限制导致运行时出错。这个工具我用在生产环境上的多个项目,已经稳定跑了超多一年,可靠程度上我觉得应该不会有太大问题。
    wzw
        19
    wzw  
       166 天前 via iPhone
    以前需要,现在转 go 了……
    gengchun
        20
    gengchun  
       166 天前
    这个能支持 alpine 那些 musl 吗?
    huntzhan
        21
    huntzhan  
    OP
       166 天前   ❤️ 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  
       165 天前 via iPhone
    本人 python 小白,请问这个工具的主要应用场景和功能是什么🤔,混淆后怎么运行
    LeeReamond
        23
    LeeReamond  
       165 天前
    童年时期曾幻想过相关项目,自己写了一些 ast 混淆感觉也是聊胜于无,自我安慰,到现在感觉也没什么分发还要加密的需求,纯粹收藏学习了。一个疑问是既然混淆工具开源那逆向不是也很简单。另外混淆部分有 api 可以直接看输出么,比较好奇混淆后的结果是什么样的
    huntzhan
        24
    huntzhan  
    OP
       163 天前
    @NanFengXiangWan 比较常见是私有化部署场景,防止代码逻辑被客户逆向得到,确保商业授权可控。混淆后的 Python wheel 包可以通过 `pip install` 安装,与其他的包使用过程没有区别
    huntzhan
        25
    huntzhan  
    OP
       163 天前
    @LeeReamond 只要有足够的利益,总是可以逆出来的。混淆的方式目的在于提升逆向的成本,不是保证不能被逆向。开源与否问题不大,即使知道了流程是怎么做的,背后还有一个 C++ 编译器优化的“黑盒”在,有足够的复杂度。至于输出是什么,可以看看 Cython 的文档
    LeeReamond
        26
    LeeReamond  
       163 天前
    @huntzhan 我以为这个项目是解析 ast 然后混淆 python 代码再接入 cython 编译,所以你直接叫我看 cython 文档意思是这只是个 cython 快捷工具?
    huntzhan
        27
    huntzhan  
    OP
       163 天前
    @LeeReamond 是的,没有什么技术含量
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2399 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:16 · PVG 14:16 · LAX 23:16 · JFK 02:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.