【软件】PyArmor-Unpacker使用教程
Readme.md文件翻译
Pyarmor 是一款流行的 Python 源代码保护工具。它将 Python 脚本转换为二进制数据,这些数据可以看作是 pyc 文件的加密变体。它们可以通过一个共享库(pyarmor_runtime)解密,然后由 Python 解释器执行。
本项目旨在将受保护的(armored)数据转换回字节码汇编,并(实验性地)转换回源代码。我们复刻了优秀的 Decompyle++(又名 pycdc),并在其基础上添加了一些处理流程,例如修改抽象语法树。
[!IMPORTANT]
此工具仅应用于您拥有或已获授权分析的脚本。请尊重软件许可证和服务条款。作者不对因使用此工具造成的任何误用或损害负责。
[!NOTE]
与其他反编译器一样,此工具面向专业用户。您应对 Python 字节码有基本的了解。如果不是,您可能需要向了解的人寻求帮助。
[!WARNING]
反汇编结果是准确的,但反编译的代码可能不完整或不正确。 参见 issue #3
特性
静态分析
您无需执行加密的脚本。我们使用与 pyarmor_runtime 相同的算法来解密它们。这在脚本不可信时非常有用。
通用性强
目前我们正尝试支持 Pyarmor 8.0 到 9.1.x(最新版),Python 3.7 到 3.13,在所有操作系统上,并尽可能支持多种混淆选项。(然而,我们的测试有限。)
[!NOTE]
如果数据以
PY开头,后跟六位数字,则受支持。否则,如果它以PYARMOR开头,则是由 Pyarmor 7 或更早版本生成的,不受支持。
易于使用
您唯一需要做的是指定您混淆脚本的位置。该工具将完成所有工作,如检测受保护数据、解析、反汇编和反编译。请参阅下面的"使用方法"部分。
构建
mkdir build |
您也可以在发布页面下载预编译的二进制文件。
使用方法
python /path/to/oneshot/shot.py /path/to/scripts |
在运行 shot.py 之前,请确保 oneshot 目录中存在可执行文件 pyarmor-1shot(在 Windows 上是 pyarmor-1shot.exe)。
您只需要指定包含所有受保护数据和 pyarmor_runtime 的目录。该工具会尽可能地递归查找和处理它们。
必要时,可以使用 -r path/to/pyarmor_runtime[.pyd|.so|.dylib] 来指定一个 pyarmor_runtime 可执行文件。
所有由此工具生成的文件在其文件名中都包含 .1shot.。如果您想将它们保存到另一个目录而不是原地保存,请使用 -o another/path/。文件夹结构将保持不变。
注意:
-
如果文件夹名称恰好是 pycache 或 site-packages,或者它直接包含一个名为 .no1shot 的文件,则其子目录将不会被处理,并且符号链接不会被跟踪,以避免重复或无限循环并节省时间。如果您确实需要处理它们,请稍后在这些目录中运行脚本并指定运行时。
-
由 PyInstaller 等生成的归档文件、可执行文件等,必须在使用其他工具解包后再进行解密,否则您可能会遇到未定义的行为。
反馈
如果您有任何疑问、建议或问题,请随时提出 issue。如果可能,请不要忘记附上受保护的数据和 pyarmor_runtime 可执行文件。
待办事项(欢迎提交 PR!)
多平台 pyarmor_runtime 可执行文件支持
支持更多混淆选项
为其他后端重新生成 pyc
文档(不接受关于此部分的 PR)
致 CTF 挑战赛出题人
请不要制作那些关于寻找和使用现有工具的 CTF(夺旗赛)逆向挑战。这对任何人都没有乐趣。这更像是一场捉迷藏游戏,而不是对技能和创造力的考验。
理解 Pyarmor 或此工具的工作原理,并尝试改进它们,会更有意义。
Star 趋势图
https://starchart.cc/Lil-House/Pyarmor-Static-Unpack-1shot.svg?variant=adaptive
具体使用方法
- payload
python E:\app-down\ctf工具箱\ctf工具箱\pyarmor-1shot-v0.2.1-windows-x86_64\oneshot\shot.py (待解密文件位置) |
- 解密后的文件应该会生成在相同目录下,文件名会包含 .1shot. 标识,例如:
- start.1shot.dis.py (反汇编结果)
- start.1shot.py (反编译的源代码)



