利用pyarmor进行动态加解密python源代码

利用pyarmor进行动态加解密python源代码

当我们需要对python代码加密的时候,pyarmor是一个很好的选择。它能够在运行时时刻保护python脚本的二进制代码不被泄露,可以设置加密后python源代码的有效期限,绑定加密后python源代码到硬盘、网卡等硬件设备。

1 目录结构

利用pyarmor进行动态加解密python源代码_第1张图片

2 代码实现
import os
import time

source_flag = "test"
dest_flag = "test4"

def load_dir(rootDir):
    for root,dirs,files in os.walk(rootDir):
        for file in files:
            file_name = os.path.join(root, file)
            if file_name.split('.')[-1] == "py":
                new_file_name = file_name.replace(source_flag, dest_flag)
                obfuscate_file(file_name, new_file_name)
        for dirname in dirs:
            load_dir(dirname)

def obfuscate_file(file_name, new_file_name):
    base_dir = os.path.join(os.path.dirname(__file__), "dist")
    new_file_dir = os.path.dirname(new_file_name)
    if not os.path.exists(new_file_dir):
        os.makedirs(new_file_dir)
    # 执行py文件加密操作
    try:
        os.system("pyarmor obfuscate {}".format(file_name))
        time.sleep(5)
    except RuntimeError as e:
        print("obfuscate error !!!", e)
    obfuscate_file_name = os.path.join(base_dir, os.path.basename(file_name))
    print(obfuscate_file_name)
    fr = open(obfuscate_file_name, "r", encoding="utf-8")
    fw = open(new_file_name, "w", encoding="utf-8")
    # 执行加密文件读写操作
    try:
        print("read file start ----->")
        content = fr.readlines()[2:]
        print("read file end ----->{}".format(content))
        print("write file start ----->")
        fw.writelines(content)
        print("write file end")
        time.sleep(10)
    except FileNotFoundError as e:
        print("file not found",e)
    finally:
        fr.close()
        fw.close()


if __name__ == '__main__':
    rootDir = r"D:\\python_runner\\test"
    load_dir(rootDir)
3 生成加密文件

执行加密程序,自动在dist目录下,生成4个运行加密代码依赖文件

利用pyarmor进行动态加解密python源代码_第2张图片

4 加密后的python文件

利用pyarmor进行动态加解密python源代码_第3张图片

新的工程目录下,都是python加密后代码,如cc.py

__pyarmor__(__name__, __file__, b'\xec\x50\x8c\x64\x26\x42\xd6\x01\x10\x54\xca\x9c\xb6\x36\x84\x05\x6a\x0b\xf3\xc4\x16\x01\xb8\x41\xc4\xf1\x0b\xa9\x3e\xbe\x09\x36\x8f\x82\x24\x3c\x5a\x2f\x1f\x92\xfb\x10\xfe\x04\x90\xaf\x3c\x2d\xbb\x09\x1b\xa3\x71\xc4\x07\x12\x1e\x9a\x36\xe6\xab\xf5\xa2\x03\xf1\xb0\x63\x03\xa4\xeb\x1c\xbe\x87\x3b\xd3\xc4\x01\x1f\x57\xd8\xb8\xb8\xf6\xcf\x61\x4c\xe3\x4a\xc2\xb0\x24\xa9\xfc\xf0\x8b\xde\x88\xa5\x25\x63\x6b\x49\x3b\xcb\x51\x36\x3e\x7f\x70\xae\xa1\xc2\xd5\xde\x71\xff\x91\xa4\x3a\x97\x5b\x57\x07\x70\x9b\x53\xc1\xa6\xb9\x8d\x2d\x0d\x2b\x7b\x61\x1b\xa6\x2f\xbe\xe5\xba\x8d\x41\x4b\x0e\x67\xbf\x23\xbb\xdd\x9d\x89\xff\x85\x4f\x1a\x72\x3d\x5a\xf2\x4a\x12\x28\x69\x66\x9b\x51\x40\x22\x62\xe1\x94\xf0\x71\x04\x28\x79\x5e\xc5\xbc\xa5\x72\x7b\x3f\xad\x3c\x6c\x9c\x5e\xd3\x47\xa7\x01\xaf\xf6\xb8\xe9\x7c\x0d\xa1\x4c\x72\x85\x72\x0f\xd3\x51\x23\xf0\x09\x4b\xda\x47\xa8\xc1\xb7\xbf\x40\xee\xa3\xc6\x2e\x2b\xea\x12\x57\xc7\x67\x30\xd2\xbd\x62\xde\xfc\x0f\xc9\x49\x5d\x64\xd6\xe6\xf0\x8f\x7b\xaa\xd4\x4e\x48\x93\xd8\x2d\xc9\x8a\x19\xa6\xaf\xd0\x18\xe4\xed\xf3\x45\xb9\x5e\xbd\xf4\x9a\x57\xa8\x84\x38\x7c\x07\x5e\xbb\xd7\x01\x90\xfa\xf8\x19\x34\xb6\x90\x3b\x06\xc5\x3c\x02\x98\xac\xf1\x18\x04\x01\xbb\x37\xbe\xe9\x4d\xa9\xb8\x7f\x53\xee\x08\x1b\xf3\xcd\x1b\x53', 1)
5 测试加密后代码
from pytransform import pyarmor_runtime
pyarmor_runtime()

from test4.aa.cc.cc import cc

cc() # cc

你可能感兴趣的:(python代码加密,python)