MENU
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
あらゆるモノにHackする、探究者の読み物。
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
  1. ホーム
  2. プログラミング
  3. 言語別
  4. Python
  5. Pythonスクリプトの難読化

Pythonスクリプトの難読化

2023 2/02
Python
2019-10-212023-02-02
Pythonスクリプトの難読化 Pyarmor

PyInstallerだけだとちょっとこなれた程度の人には効きますが、それでも比較的簡単にデコンパイルされてしまいます。

何としても表に出したくないコードがあったため、必死にPythonスクリプトの難読化を調べました。

単純に全部難読化するだけならちょっとググるだけでどこにでも情報は出てくるのですが、各種条件全部適用させるために割と時間食ったのでメモ書き。

目次

PyArmorの pack コマンドで一気にexeファイル化までいける

超結論からです。

PyArmorのpackコマンドからPyInstallerが立ち上がります。
そのまま放っておいたら勝手に難読化した上でexeファイル化出来る事が分かりました。

リバースエンジニアリング不可レベルの難読化かけれるのはPyArmorくらいみたいですね。ほぼ一択。

それでもその気になれば解析できるのかもしれませんが、とりあえずデコンパイルしようとする相手の心を折って、戦意喪失させるのが目的ですの。

ぱっと調べた限りPyArmorのdecryptツール的なものは見当たらなかったので、これで行こうと思います。

リバースエンジニアリングも、結局時間かければ出来るのは間違いなんでしょうが、そこはもうコストとリターンの話なので。

packコマンドの実行内容

Execute pyarmor obfuscate to obfuscate myscript.py
Execute pyinstaller myscipt.py to create myscript.spec
Update myscript.spec, replace original scripts with obfuscated ones
Execute pyinstaller myscript.spec to bundle the obfuscated scripts

https://pyarmor.readthedocs.io/en/latest/usage.html

順次これらの操作を実行している模様。シームレスでこれらの作業をやってくれるコマンドですね。

ちなみにPyarmor自体はあくまでスクリプト自体を難読化するためのツールですので、packコマンドを使うためには別途PyInstallerのインストールは必須です。
両方ともpipで入るので、インストールは割愛。

とりあえず、簡単にやるならパッケージのトップの.pyファイルを指定して以下のコマンドでOK。

pyarmor pack *****.py

これだけで難読化→exe化まで一気に行けます。

が、いっぱい余計なファイルが生成されたり、GUIで作ってるのにexeから起動したら黒いコンソール立ち上がったりしてちょっとウザい。

PyArmorから立ち上がるPyInstallerにそこら辺のオプション渡せてないのが原因ですね。

PyInstallerにonefileとnoconsoleを渡す

PyInstallerで作ったexeファイル起動時に、依存関係にあるファイルを全てまとめて単一のexeファイルにするコマンドオプションが “–onefile” 、黒いコンソールを立ち上げないようにするコマンドオプションが “–noconsole” です。

pyarmor pack -e " --onefile --noconsole" *****.py

-eオプションでPyInstallerに渡すオプションを指定できるようです。
ダブルクォーテーションで囲っているのと、はじめにスペースが入るのがミソです。

https://buildmedia.readthedocs.org/media/pdf/pyarmor/latest/pyarmor.pdf

引数で渡すファイル名はPythonパッケージファイル群の最上位になるファイルです。__main__.py とかが多いんですかね?それさえ渡せば後は勝手に解析してやってくれます。

僕はあまりそういった作り方しないので、疎いです。

にしても、PyInstallerめっちゃ重たいですね。–onefile指定すると特に重たくなります。py2exeはちょっと軽いらしいけどPython3.4くらいまでしか対応していないっぽいのでこれも辛いところです。

重たい原因判明しました↓

あわせて読みたい
【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる 表題の通り、PyInstallerを使って出力したexeファイルがとにかく巨大に膨れ上がる現象に悩まされました。 これ、めちゃくちゃ起動遅くなるし、原因不明だし、ほんと参っ...

pyarmor Python3.8で使えない問題

最近pyarmorの相棒PyInstaller4.0が正式版としてリリースされ、公式的には3.7までのアナウンスなんですがどうやら3.8も動くとのこと。

「exeファイルまでいけないなら無理にpythonのバージョン上げなくてもイイか」と考えてPython3.7を使っていたのですが、exe化対応とあっちゃあ、3.8まで上げざるを得ません。

やっぱ新しいの使いたいじゃないですか。

ところが今度はPyarmorが動かねぇ

一応Pyarmorの方はと言いますと、比較的早い段階で公式にPython3.8への対応はアナウンスされていました。

が、何故か僕の環境では難読化したファイルが実行できない。

いっつもpackコマンドで一気にexe化まで行ってるもんですから、exeファイルが動かない原因がpyarmorあるってことに気づくまで2時間かかりました。

勿論、PyInstaller 単体でexe化したら動いてました(苦笑)

OSError: exception: access violation reading

OSError: exception: access violation reading

さて、問題のPyarmorさんこんな感じの謎のエラー。

最早絶対分からんヤツです。

なんせ難読化しただけのスクリプトの実行が妨げられています。

「Python3.7で難読化した_pytransformの影響でも受けてるのか」とか思ってPath内にある3.7で難読化時に生成された_pytransform削除してみたりしましたが一向に改善しません。

自分では絶対に分からないviolation reading解決方法

やっぱりなんだかんだ言っても同じ問題で困ってるヤツは居るもんです。

で、制作者の方が解決してるやり取りがGitHubにあったので、解決方法だけ、転載しておきます。

Pyarmorインストールフォルダ直下pytransform.py

    # Disable advanced mode if required
    # m.set_option(5, c_char_p(1))

ここ、探します。

僕の使ってるPyarmorのバージョン6.4.2では328行目でした。

でこのコメントアウトを外します。

    # Disable advanced mode if required
    m.set_option(5, c_char_p(1))

これで動きました!(こんなん作ったヤツしかわからんやろ・・・。)

やっと3.8デビューできるぅ。(世間はもう今3.9…)

pyarmorもPyInstaller も素晴らしいツールですので、ちゃんと金払って使いましょう。支援。

Python
Python
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』
人気記事
  • IQテストいくつか受けてみました
    ネット上で信憑性がありそうなIQテスト、5種類まとめて受けた結果…
  • hayate
    メルカリの商品を世界最速で購入するためだけのアラートツール
  • 【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング
  • Pythonファイルのexe化
    【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
  • Amazon Echo アレクサのコマンドまとめ
    AmazonEchoの使い方とできる事、アレクサへの指示コマンド一覧
最近の投稿
  • 正規表現処理の濁点でハマった話2024-12-12
  • 保護中: 疾風v2更新履歴2024-05-31
  • 【自営・経営者向け・税金も】クレジットカードガチ勢による最強クレカ解説2023-10-23
  • PyQt5 QListWidget の item削除でtextBoxのフォーカスが奪われる2023-03-05
  • WordPressからのメールが届かない時の調査と解決法2023-02-27
目次
目次