爱意满满的作品展示区。
huntzhan

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

  •  3
     
  •   huntzhan ·
    huntzhan · Feb 27, 2022 · 8807 views
    This topic created in 1543 days ago, the information mentioned may be changed or developed.

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

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

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