【PyArmor】Pythonコードを他者から読めなくする(難読化)

スポンサーリンク
Python/DeepLearning

みなさん、こんにちは!みやしんです!

今回はPythonコードを他人から読めないようにする「PyArmorについてご紹介します!

みやしん
みやしん

秘密を知られたくないにゃ!!!

PythonやAIをもっと勉強したい方🤗

Pyサブスクール:サブスク8,030円/月でPythonを始められるプログラミングスクール
サブスク8,030円/月でPythonを始められるプログラミングスクール。現役エンジニアへの質問も自由に出来ます。話題のPythonを学びたいけどスクールに60万円は高すぎる!でも独学だと挫折が恐い。そんな不満と不安を解決するサブスク型のプ...

スポンサーリンク

PyArmorとは?

PyArmorとは、Pythonコードを難読化して他人から読まれなくするライブラリです。

他人に知られたくない情報がスクリプトに記載されている場合はPyArmorがおススメです。

PyArmorはコマンドラインツールになります。

有料版もあるようですが、無料版で十分活用できます。

無断での商用製品への活用は禁止されているようですので、ご注意ください。

PyArmorをインストール

下記のコマンドを入れます。

> pip install pyarmor

比較的早くインストールが完了すると思います。

今回のPyArmorのバージョンを確認しておきます。

> pyarmor --version

pyarmor 7.0.2 であることが確認できました。

それでは、PyArmorを使って難読化してみましょう!

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

今回は、簡単なPythonスクリプトを準備します。

こんなスクリプトを作ってみました。めっちゃ簡単です。

test.py

print("PyArmorで難読化成功!")

test

このスクリプトを難読化していきます。

test.pyファイルがあるフォルダまでcdコマンドで移動して以下のコマンドを入力します。

> pyarmor obfuscate test.py

ちなみに、obfuscateが難読化という意味です。

すると、こんな感じで処理が走ります。

処理を実行すると「dist」フォルダが作成されます。

test

distに移動すると、test.pyが作られています。

test/dist

distフォルダ内のtest.pyを確認してみます。

難読化されていますね!

この難読化されたPythonスクリプトを実行してみましょう!

難読化されているスクリプトでも、問題なく実行できました!

使用期限を付与することも可能!

もう一度、最初から処理をします。下記のようなコマンドを入力します。

> pyarmor licenses --expired 2022-01-01 test1

test1の部分は好きに決めてOKです。その名前でフォルダが作られます。

実行するとこんな感じです。

するとlicensesというフォルダが作られます。

test

licensesフォルダの中を覗いてみるとこんな感じです。

test/licenses

先程、命名したtest1フォルダがありますね!

最後に、先程行ったように、pyarmor obfuscateコマンドでファイルを難読化しますが、今回は下記のようにオプションを付けます。

> pyarmor obfuscate --with-license licenses/test1/license.lic test.py

すると同様に「dist」フォルダが出現し、使用期限付きで難読化することができました。

test

test/dist

使用期限付きで難読化したtest.pyを試しに実行してみます。

ちゃんと実行できました。

複数ファイルでも難読化できる

これまで1ファイルのみ難読化してきましたが、複数ファイルが存在すると全て難読化してくれます。

> pyarmor obfuscate test.py

test

test/dist

test1.pyも難読化されておりました!

サブディレクトリ内の.pyファイルも難読化する場合

次は配下サブディレクトリ内の.pyファイルも含めて難読化する方法になります。

ファイルは簡単なスクリプトを2つ準備しました!

まずはフォルダ構成はこちらです。

スクリプトはこちら!

まずは、main.py

from subdirectory.test_class import PrintClass

PrintClass = PrintClass()

a = "こんにちは!"
PrintClass.Hello(a)

続いてtest_class.py

class PrintClass():
    def Hello(self, x):
        print(x)

サブディレクトリまで難読化するときは下記のコマンドを実行します。

> pyarmor obfuscate --recursive main.py

実行します。

すると、これまで通りに「dist」フォルダが出現。

distフォルダ内にはmain.pyとsubdirectoryがありました。

main.pyとtest_class.pyを確認してみるとしっかり難読化されていました。

main.py

test_class.py

distフォルダ内の難読化されたmain.pyを実行してみると、しっかり動きました。

難読化と暗号化の違い

難読化は人間に読みにくくすることです。暗号化は人間に読めなくすることです。

難読化は時間を掛けて解読すれば読むことができますがかなり大変ですので普通はしないでしょう。

暗号化は鍵(キー)を持っている人のみ読むことが出来ます。

情報の機密性の高さに応じて難読化と暗号化を適切に選ぶようにしましょう!

PythonやAIをもっと勉強したい方🤗

Pyサブスクール:サブスク8,030円/月でPythonを始められるプログラミングスクール
サブスク8,030円/月でPythonを始められるプログラミングスクール。現役エンジニアへの質問も自由に出来ます。話題のPythonを学びたいけどスクールに60万円は高すぎる!でも独学だと挫折が恐い。そんな不満と不安を解決するサブスク型のプ...

合わせて読みたい

Python/DeepLearning
スポンサーリンク
記事が良かったらSNSでシェアを宜しくお願いします!
みやしんをフォローすると役立つ情報がいっぱいにゃ!
スポンサーリンク

コメント

  1. n より:

    こんにちは。

    個人情報の類をコードに直接埋め込むことは避けるべきですし、仮に難読化を施したとしても個人情報保護法の対象となります。
    https://it-trend.jp/encryption/article/64-0081

    個人情報を含むコードもPyArmorにかければ大丈夫、というような表現は危険かと思います。

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