🕌

pythonコードを暗号化(難読化)【pyarmor】

2023/01/09に公開

https://www.youtube.com/watch?v=dTe2_j1qIYc

pythonファイルを共有するときに見られたくない部分があるかと思います。

「pyarmor」を利用することで、それを可能にすることができます。

python -m venv test
.\test\Scripts\Activate
pip install pyarmor

今回暗号化するのはこのarmor.pyファイル

import tkinter
import tkinter.ttk as ttk

class Application(tkinter.Frame):
    def __init__(self, root):
        super().__init__(root)
        root.title('Sample')
        root.geometry('400x300')
        self.set_widgets(root)

    def set_widgets(self, root):
        select_list = ['SelectA', 'SelectB']
        combobox = ttk.Combobox(root, values=select_list)
        combobox['values'] = ['SelectA', 'SelectB']
        combobox.pack()
        button = tkinter.Button(text="表示",command=lambda:print(combobox.get()))
        button.pack()

def main():
    root = tkinter.Tk()
    app = Application(root)
    root.mainloop()

if __name__ == "__main__":
    main()

難読化してみます。

pyarmor obfuscate armor.py

作成できたファイルは、distディレクトリ内に格納されているので、開いてみます。

問題ないく、難読化できていることが確認できました。
ただ、実行してみると日本語が文字化けしてしまいました。

ソースの最初に以下の文字コードを追加して再度難読化してみます。

# -*- coding: utf-8 -*-

次は問題なく、難読化することができました。

使い方がわからなくなった。
そんな場合は、どのライブラリでも--helpオプションが用意しているので、確認してみてね。

pyarmor --help

実行結果

usage: pyarmor [-h] [-v] [-q] [-d] [--home HOME] [--boot BOOT]  ...

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

optional arguments:
  -h, --help     show this help message and exit
  -v, --version  show program's version number and exit
  -q, --silent   Suppress all normal output
  -d, --debug    Print exception traceback and debugging message
  --home HOME    Change pyarmor home path
  --boot BOOT    Change boot platform

The most commonly used pyarmor commands are:

    obfuscate (o)
                 Obfuscate python scripts
    licenses (l)
                 Generate new licenses for obfuscated scripts
    pack (p)     Pack obfuscated scripts to one bundle
    init (i)     Create a project to manage obfuscated scripts
    config (c)   Update project settings
    build (b)    Obfuscate all the scripts in the project
    info         Show project information
    check        Check consistency of project
    hdinfo       Show all available hardware information
    benchmark    Run benchmark test in current machine
    register     Make registration keyfile work
    download     Download platform-dependent dynamic libraries
    runtime      Generate runtime package separately
    help         Display online documentation

See "pyarmor <command> -h" for more information on a specific command.

More usage refer to https://pyarmor.readthedocs.io

Discussion