Pythonスクリプト(ソースコード)の難読化をPyArmorで行う

Pythonスクリプト(ソースコード)の難読化をPyArmorで行う プログラミング

Pythonのソースコードを難読化するためのPyArmorに関する記事です。
この記事を読めば、PyArmorに関して大体のことを理解できます。

本記事の内容

  • PyArmorとは?
  • PyArmorのシステム要件
  • PyArmorのインストール
  • PyArmorでPythonスクリプトを難読化する

それでは、上記に沿って解説していきます。

PyArmorとは?

PyArmorは、Pythonスクリプトの難読化に関するコマンドラインツールです。

最も重要なことは、無料体験版と有料版があるということです。
基本的には、PyArmorは企業が販売している製品だと考えてよいでしょう。

だからこそ、機能的には充実しています。
しかし、ここではそれらを一つ一つ説明しません。

Pythonスクリプトの難読化」、これだけに絞ります。
Pythonスクリプトの難読化は、無料体験版でも可能です

また、体験版といっても有効期限は存在しません
つまり、無料で使い続けることが可能ということです。

もちろん、無料体験版には制約があります。
その制約とは、以下。

  • コードオブジェクトの最大サイズは32756バイトまで
  • 難読化されたスクリプトは非公開ではない
  • 1つのモジュールに32個程度の関数の個数制約がある
  • 無断で商用製品のPythonスクリプトに使用できない

「非公開ではない」に関して、説明しておきます。

難読化する際にキー(ライセンスと表現されている)のようなモノがあります。
このキーがあれば、難読化されたスクリプトを動かすことが可能になります。

このキーが、無料体験版ではすべて同じということです。
そのため、「非公開ではない」という表現になるのでしょう。

PyArmorのシステム要件

PyArmorは、企業が開発して販売している製品です。
そのため、OSは以下のすべてで対応しています。

  • Windows
  • macOS
  • Linux

加えて、組み込み系の環境でも動くようです。
そして、Pythonのバージョンもカバー範囲が広いです。

  • Python 2.5
  • Python 2.6
  • Python 2.7
  • Python 3

Python 2.7に対応しているオープンソースは、そこそこ存在しています。
しかし、Python 2.6や2.5に対応しているモノはなかなか見ませんね。
やはり、有料だと簡単にはサポートを打ち切れないのでしょう。

では、PyArmorのインストールを行います。
もちろん、無料体験版です。

PyArmorのインストール

PyArmor公式サイト
https://pyarmor.dashingsoft.com/

公式サイトを参考にして、インストールしていきます。
まず、現状のインストール済みパッケージを確認しておきます。

>pip list
Package    Version
---------- -------
pip        20.3.3
setuptools 51.1.1

必要最低限のパッケージしか入っていない状況です。
とりあえず、pipを更新しておきます。
pipコマンドを使う場合には、常に以下のコマンドを実行しておきます。

python -m pip install --upgrade pip

現時点では、pipは更新されませんでした。
では、PyArmorのインストールコマンドを実行します。

pip install pyarmor

処理自体は、一瞬で終わりました。
インストール済みのパッケージ状況を確認しておきます。

>pip list
Package    Version
---------- -------
pip        20.3.3
pyarmor    6.5.6
setuptools 51.1.1

PyArmorは、他のライブラリに依存しないことがわかります。
その意味では、シンプルですね。

インストールの確認として、次のコマンドを実行しておきます。

>pyarmor --version
INFO     Create pyarmor home path: C:\Users\username\.pyarmor
INFO     Create trial license file: C:\Users\username\.pyarmor\license.lic
PyArmor Trial Version 6.5.6

PyArmor is a command line tool used to obfuscate python scripts, bind
obfuscated scripts to fixed machine or expire obfuscated scripts.

For more information, refer to https://pyarmor.readthedocs.io

とりあえず、動いているのは確認できました。
では、次では実際に難読化してみます。

PyArmorでPythonスクリプトを難読化する

Pythonのプログラムを書いたスクリプトファイルを用意します。

test.py

print("test")

モノ凄く適当です。
では、このPythonスクリプトを難読化します。

>pyarmor obfuscate test.py
INFO     PyArmor Trial Version 6.5.6
INFO     Target platforms: Native
~~~省略~~~
INFO     Start obfuscating the scripts...
INFO            test.py -> dist\test.py
INFO     Insert bootstrap code to entry script dist\test.py
INFO     Obfuscate 1 scripts OK.

実行すると、「dist」ディレクトリが作成されています。

この「dist」に移動。

「dist」フォルダにあるtest.pyの内容は、以下。

from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x08\x00\x55\x0d\x0d\x0a\x06\x26\xa0\x01\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x18\xee\x1f\x6e\xde\xc7\x17\x75\xa9\xb1\x62\x82\xb5\x7d\xf1\x75\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x60\x51\x14\xc4\xcd\x35\x11\x45\x0f\xbb\xe3\xf1\x23\x87\x44\x67\x14\x14\x10\x1a\x6c\xff\x05\x73\xbb\xd8\x1f\x8a\x61\x8e\xe6\x1c\x3a\xd4\x87\x5f\x7a\xa7\xf2\x1b\xb3\x74\x05\x8e\xb2\x65\x8c\xcd\x0c\x88\x15\x9c\x86\xf6\xe0\x4f\xe8\xc0\x36\xef\xc3\x1e\x9b\xce\x61\x2c\x47\xc1\x67\x09\x6b\x87\xa5\x55\xb7\x06\x15\x19\x2c\xa4\xef\x3e\xc3\xf3\x9a\x84\x93\x2e\x9c\x5a\x34\x0a\x20\x87\xed\x36\x45\xd4\xc5\xa5\xd0\xf2\x8f\xc3\xbc\x58\x5c\x25\xa3\xe7\x95\x27\xb1\xde\xc2\x15\x99\xa7\xf6\x85\x4a\xb9\x6c\x8b\x35\xa6\x53\x3a\x5c\x3f\xb1\x3e\xde\x83\x0c\xf6\xff\xe5\x68\x50\x27\xcf\xa7\x33\x78\x21\x8c\xcf\x7f\xce\x25\xc9\xc2\xd9\x53\x7f\x1c\xea\x04\xa8\x2f\x74\xeb\xc6\x62\x0f\x73\x85\x13\x1b\xd8\x85\x30\x7a\x7e\xea\x39\xba\x93\xf6\xdb\x87\x90\x98\x9c\x14\xf3\xf5\x67\xe4\x40\x25\x08\xed\x08\xcd\x65\x96\xe3\x25\x1f\x49', 2)

見事に難読化されています。
では、この難読化されたPythonスクリプトを実行してみます。

>cd dist
>python test.py
test

難読化されたスクリプトが、問題なく動いていますね。

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