【Python】Cythonでの難読化をやってみた

「.pyファイルと.pyxファイルの違いは?」

「.soファイルができるらしいけど、できたのは.pyd?」

「pyinstallerでのexe作成とcythonの順番は?」

Cythonとは

■cythonのインストール


pip install cython

.pyと.pyxの違いは?

.pyのままでよいという説明と、.pyxに名前を変えてから難読化するという説明があります。
どちらが正しいのですか?

■.pyと.pyx

項目 .py から.pyx から
利用目的主に難読化難読化 + 高速化
Cython構文の利用不可
型ヒントのサポート必須ではない可(高速化に寄与)
元ファイルの互換性元のPythonコードをそのまま利用Cython向けの変更が必要

Cythonでの難読化

■Cythonビルドスクリプト(setup.py)の作成例

from setuptools import setup
from Cython.Build import cythonize

setup(
ext_modules=cythonize(["module1.py", "module2.py"], compiler_directives={"language_level": "3"})
)

■コンパイルコマンドの実行 :setup.pyによる.so(もしくは.pyd)の作成

コンパイルのコマンド

python setup.py build_ext --inplace

.so作成の説明があったけど、できたのは.pydなのですが?

.pyd ファイルとは
.pyd ファイルは Pythonの拡張モジュール です。
CまたはCythonでコンパイルされたコードをPythonから直接インポートできる形にしたもので、Windows環境では共有ライブラリ(DLL)に似ています。
通常、.so ファイル(LinuxやmacOS用)に相当します。

.soではなくて、.sというファイルもあるけど?

.c ファイルの役割
CythonはPythonコード(.py または .pyx)をC言語コード(.c)に変換。
その後、Cコンパイラで .pyd(Windows)または .so(Linux, macOS)を生成します。
.c ファイルはコンパイルプロセスの一部であり、Cコンパイラが必要とする中間生成物です。

つまり、ソフトの起動には関係ありません。

エラー

error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools

C関連のコンパイラが必要なため、インストールします。

・Build toolのダウンロード

Microsoft C++ Build Tools - Visual Studio

インストーラを起動。
「C++ によるデスクトップ開発」ワークロードを選択。
以下のコンポーネントを必ず含める
「MSVC v143 – VS 2022 C++ x64/x86 ビルドツール」
「Windows 11 SDK」

PyInstallerとCython

pyinstallerでのexe作成とcythonの順番は?
exe化を、メインのmain.pyだけにすることもできますか。

PyInstallerとCythonを併用してPythonスクリプトを難読化しつつ、最終的に実行可能なEXEファイルを作成することが可能です。
project/

├── main.py # メインスクリプト(難読化せずそのまま)
├── module1.py # 難読化したいモジュール
├── module1.pyd # 難読化されたモジュール
├── module2.py # 難読化したいモジュール
├── module1.pyd # 難読化されたモジュール
└── setup.py # Cython用のビルドスクリプト

先にCythonで難読化して、最後にPyInstallerでEXEファイルにする。

.pyd ファイルは通常「モジュール」として利用される設計のため、直接実行することはできない。
つまり、ランチャーとする難読化されていないmain.pyが必要。

コメント

タイトルとURLをコピーしました