阅读后如何保护 Python 代码?,我决定在 Windows 上尝试一个非常简单的扩展模块。我之前在 Linux 上编译过自己的扩展模块,但这是我第一次在 Windows 上编译。我期待得到一个 .dll 文件,但我得到了一个 .pyd 文件。Docs说它们是一样的,但它必须有一个init[insert-module-name]()
功能。
可以安全地假设,对它们进行逆向工程就像对 dll 文件一样困难。如果不是,从 .pyc 文件到 .dll 文件的逆向工程难度如何?
阅读后如何保护 Python 代码?,我决定在 Windows 上尝试一个非常简单的扩展模块。我之前在 Linux 上编译过自己的扩展模块,但这是我第一次在 Windows 上编译。我期待得到一个 .dll 文件,但我得到了一个 .pyd 文件。Docs说它们是一样的,但它必须有一个init[insert-module-name]()
功能。
可以安全地假设,对它们进行逆向工程就像对 dll 文件一样困难。如果不是,从 .pyc 文件到 .dll 文件的逆向工程难度如何?
正如您已经发现的那样,它们等同于具有特定结构的 DLL 文件。原则上,它们同样难以逆向工程,它们是机器代码,只需要很少的元数据,而且代码可能已经被优化得面目全非。
但是,所需的结构,并且知道许多函数将处理PyObject *
s 和其他明确定义的 CPython 类型,可能会产生一些影响。它不会真正帮助将汇编代码映射到 C(如果有的话,由于 CPython 特定的宏,它会变得更难)。主要与 Python 类型交互的代码看起来与操作 C 结构的代码完全不同(并且相对臃肿)。这可能会使它更难理解,或者它可能会泄露一些没有什么有趣的代码,并允许逆向工程师跳过它并更早地获取您的商业机密。
这些问题都不适用于纯 C 代码(即不与 Python 交互)的代码片段。你可能有很多这样的。因此,它最终不应该产生重大影响。
它们基本上是本机代码。但是因为每个函数都有有趣的参数列表,所以可能很难看到每个函数的作用。我会说它们和 dll 一样难,如果不是更难的话。