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
cd build
cmake ../pycdc
cmake --build .
cmake --install .

您也可以在发布页面下载预编译的二进制文件。

使用方法

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. 标识,例如: