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部署, 云安全监控, 云资产清单, 代码保护破解, 代码混淆, 反混淆, 字节码操作, 无后门, 脱壳, 解密工具, 软件分析, 逆向工程, 静态分析