PyArmor で難読化 – Obfuscated Code

PyArmor を使用して Django プロジェクトのアプリを難読化します。

PyArmor の仕様については公式ページを参照願います
https://pypi.org/project/pyarmor/

ここでは、簡単に試してみた内容です。

Django プロジェクトを難読化すると wsgi.py でエラーが発生した為、今回はプロジェクト全体を難読化するのではなくプロジェクト内のアプリを個別に PyArmor で難読化して実装してみます

アプリ毎に難読化した方が後々、組み合わせも自由にリリース可能となったりしますので便利です。

PyArmor のインストール

まずは、 PyArmor を pip でインストールします。

※インストール済の場合は、省略

$ pip install pyarmor

PyArmor の使用方法:https://pyarmor.readthedocs.io/en/latest/usage.html

難読化コマンド

# カレントディレクトリをプロジェクト直下に移動する
$ cd mysite

# myapp アプリ以下を再帰的に難読化して dist/myapp へ出力する
$ pyarmor obfuscate --recursive --output dist/myapp myapp/__init__.py

# 成功すれば dist ディレクトリが生成されている
$ cd dist

$ ls -l
# dist の中に難読化されたアプリが生成されている。
drwxrwxr-x 11 sayabo sayabo 299  7月  1 00:00 myapp

コマンドの説明

基本コマンド
pyarmor obfuscate ○○.py:難読化

オプション:
–recursive:再帰的に実行
–output:出力先を指定(初期値、dist)

注意事項:
.py ファイル以外は、難読化されないので template フォルダなどにある画像等 static なファイルは、個別に対応する。

実装例

先の難読化された myapp アプリをプロジェクトの既存アプリへ上書き(置き換え)する。

$ cd dist
$ cp -R myapp ../
# ※上書きコピーの場合 yes で上書きする。
...yes
...yes
...
$ cd ..
# Apache wsgi 連携の場合、リロードしてプロジェクトを反映する。
$ sudo systemctl reload httpd.service

動作検証

プロジェクト構成例

– mysite
— manage.py(非難読化)
— myapp(上記、難読化済み)
— mysite(非難読化)
— public_html(非難読化)
— uploads(非難読化)

実質、設定ファイル、テンプレートの類は、難読化されないことになるがビジネスロジック(モデル、フォーム、ビュー)は、守られるので良しとする。

運用時の注意事項

元のプロジェクトソースコードと実装(難読化後)プロジェクトは別々にして管理する。

物理的に分けないと難読化した意味がないので開発用端末と実行環境サーバーなどで分離する。

現時点では、リバースエンジニアリングを困難とする最も有効な手段では、ありますが時とともに破られる事は念頭においてください。

以上

【蛇足】

ソフトウェア開発の契約での留意点

難読化されたソースコードは、納品物として事前に顧客との確認が必要と思われる。

自社開発のパッケージ製品としての配布ぶつとしては、有効な手段の一つとなります。

Was this helpful?

1 / 0

コメントを残す 0

Your email address will not be published.