Hazno-dev/PyAmore

GitHub: Hazno-dev/PyAmore

针对 PyArmor V8 加壳保护的 Python 脚本运行时去混淆工具,通过注入 hook 无需执行目标代码即可提取干净的 .pyc 文件。

Stars: 0 | Forks: 0

# PyAmore PyAmore 是一个 PyArmo(u)r 运行时去混淆工具,旨在从加密的 python 产物中提取/生成 PYC 文件。 ## 支持的功能 PyAmore 已在 PyArmour **V8** 和 Python `3.7` 环境下测试通过,但由于 PyArmour 的配置项非常多,无法保证在所有配置环境下都能正常工作。 - 自动从字节码中剥离 PyArmour - 递归去混淆代码对象 (code objects) - 将 `.pyc` 文件生成到子文件夹中,以便在 [Uncompyle6](https://github.com/rocky/python-uncompyle6)、[Decompyle3](https://github.com/rocky/python-decompile3)、[PycDC](https://github.com/zrax/pycdc) 或 [PyLingual](https://github.com/syssec-utd/pylingual) 等反编译器中使用 - **无需**执行即可去混淆方法 对以下 PyArmour 功能提供(不同程度的)支持: - Wrapped 模式 ``` LOAD_GLOBALS N (__armor_enter__) N = length of co_consts CALL_FUNCTION 0 POP_TOP SETUP_FINALLY X (jump to wrap footer) X = size of original byte code ... ... Here it's obfuscated bytecode of original function ... LOAD_GLOBALS N + 1 (__armor_exit__) CALL_FUNCTION 0 POP_TOP END_FINALLY ``` - Unwrapped 模式 ``` 0 JUMP_ABSOLUTE n = 3 + len(bytecode) 3 ... ... Here it's obfuscated bytecode of original function ... n LOAD_GLOBAL ? (__armor__) n+3 CALL_FUNCTION 0 n+6 POP_TOP n+7 JUMP_ABSOLUTE 0 ``` - 混淆模式 "1" ``` __pyarmor__(__name__, __file__, b'\x02\x0a...', 1) ``` ## 用法 ### Linux: 预加载该对象并执行你的脚本(例如 `LD_PRELOAD=/home/../PyAmore.so sh init.sh`) ### Windows: 待定 ## 构建 PyAmore 在 `clang version 19.1.7`、目标平台 `x86_64-pc-linux-gnu`、`Python 3.7` 以及 cmake `4.3.1` 环境下构建并测试。 *注意:* PyAmore 使用了 C++20 modules。需要使用现代且最新的编译器。 ### 命令: - `cmake .` - `cmake build .` 使用构建产物 `lib/PyAmore` 进行注入。 ### 更改 Python 版本 使用目标版本编辑 CMakeLists.txt。 你可能需要从源码构建 Python,以便该项目能够链接作为共享对象 (shared object) 的 Python,不过坦白说这可能不是必须的,我没有测试过,所以具体情况可能会有所不同 (YMMV)。 ``` find_package(Python 3.7 # YOUR PYTHON VERSION HERE! EXACT COMPONENTS Interpreter Development.Embed ) ``` ## PyAmore 的工作原理是什么? PyArmour 附带了一个 `pyTransform.so/.dll/etc` 库,它实现了 PyArmour 背后的核心功能。 PyAmore 使用 dlsym(为了避开推测的摘要检查?)或运行时 hook 对其中一些导出函数进行了 shim(垫片)处理。 它利用了 PyArmour 会直接从 `PyEval_GetFrame` 中提取目标代码的这一特性,强制其解密在给定模块中找到的所有代码对象,然后将它们全部复制到一个新的层级结构中,以便提取为同名的 `.pyc` 文件。 ## 来源 - [8dcc/LibDetour](https://github.com/8dcc/libdetour) - [Leonard Rapp, Melissa Eckardt @ cyber.wtf/unpacking-pyarmor](https://cyber.wtf/2025/02/12/unpacking-pyarmor-v8-scripts/) - [pyarmor.readthedocs.io](https://pyarmor.readthedocs.io/en/stable/topic/obfuscated-script.html)
标签:Bash脚本, C++20, Clang, CMake, PyArmor, PYC提取, Python, VPS部署, 云安全监控, 云资产清单, 代码保护破解, 代码混淆, 反混淆, 字节码操作, 无后门, 脱壳, 解密工具, 软件分析, 逆向工程, 静态分析