【Python代码/程序综合防护系列第 3 期】代码混淆 ( 网站混淆 & Pyarmor库 混淆)

【Python代码/程序综合防护系列第 3 期】代码混淆 ( 网站混淆 & Pyarmor库 混淆)_第1张图片

什么是代码混淆?

代码混淆是指将代码进行加密、压缩、乱序等操作,使得代码难以被阅读和理解,从而达到保护代码的目的。代码混淆可以有效地防止代码被反编译和盗用,提高代码的安全性

Python代码混淆宏观思路

1: 重命名变量名和函数名

2: 删除注释和空格,使用加密算法对代码进行加密.

3: 使用反编译工具对代码进行反编译,查看代码是否容易被破解。

4: 使用代码混淆工具对代码进行混淆,使得代码难以被反编译和盗用。

5: 使用代码压缩工具对代码进行压缩,减小代码的体积,提高代码的运行效率。

6: 使用代码优化工具对代码进行优化,提高代码的运行效率。

在线网站混淆Python代码:

网址: https://pyob.oxyry.com

可以一键无脑混淆,请自行摸索

混淆前:

__all__ = []

class Foo(Bar):
    class_public_var = 'class_public_var'
    _class_public_var = '_class_public_var'
    __class_private_var = 'class_private'
    
    def __init__(self, private):
        self.__class_private_var = private
        
    def public_method(self, arg):
        self.class_public_var = arg
        
    def __class_priv_method(self, arg):
        self.__class_private_var = arg

foo = Foo()
foo.public_method()

混淆后:

__all__ =[]#line:1
class O0OOOO0OO0OOOOO0O (Bar ):#line:3
    class_public_var ='class_public_var'#line:4
    _class_public_var ='_class_public_var'#line:5
    __O00O0O0O000O0O000 ='class_private'#line:6
    def __init__ (OO00O0OOOOOOO0000 ,O00OOO000O0O0000O ):#line:8
        OO00O0OOOOOOO0000 .__O00O0O0O000O0O000 =O00OOO000O0O0000O #line:9
    def public_method (OO0OOO0O000O0O00O ,OO0000O000000000O ):#line:11
        OO0OOO0O000O0O00O .class_public_var =OO0000O000000000O #line:12
    def __O0OOOOO0O00OO0000 (OOO0O0OOOO0O00OOO ,O0O00O0OO00OOOOOO ):#line:14
        OOO0O0OOOO0O00OOO .__O00O0O0O000O0O000 =O0O00O0OO00OOOOOO #line:15
OO0O0OO0O0OOOO0O0 =O0OOOO0OO0OOOOO0O ()#line:17
OO0O0OO0O0OOOO0O0 .public_method ()#line:18

使用 Pyarmor 库进行混淆

安装Pyarmor

pip install pyarmor

加密混淆

pyarmor obfuscate --recursive --output=dist_dir src_dir

–recursive 可选参数,表示递归加密子目录中的Python代码

–output=dist_dir参数表示加密后的Python代码输出到dist_dir目录中

src_dir表示要加密的Python代码所在目录

# 比如一次性加密两个脚本
pyarmor obfuscate a.py b.py
# 运行后自动在目录下生成dist文件夹
# 用来存放加密后的脚本

运行混淆代码

# cd dist 进入刚刚生成的文件夹
# python a.py

加密脚本给别人不需要Pyarmor库


Pyarmor生成许可文件

许可文件可以指定过期时间指定的机器运行.

假如我们设置名称为L1的license,功能为限制程序在2023年3月27日过期,在未加密脚本目录下运行如下命令:

pyarmor licenses --expired 2023-03-27 L1

假如我们设置名称为L2的license,功能为绑定硬盘信息以及MAC网卡信息,在未加密脚本目录下运行如下命令:

# 获取硬件信息
pyarmor hdinfo
# 此时会打印出hardisk信息和MAC信息

# 生成 L2 license
pyarmor licenses --bind-disk "xxx" --bind-mac "xxx" L2
# xxx 填写你刚刚打印出来的硬盘信息和MAC网卡信息

假如我们设置名称为L3的license,综合以上限制时间和绑定机器这两个功能,在未加密脚本目录下运行如下命令:

pyarmor licenses --bind-disk "xxx" --bind-mac "xxx" --expired 2023-03-27 L3

用生成的license对代码进行加密

比如说我要用上面最强的L3license对2个Python脚本加密

pyarmor obfuscate --with-license licenses/L3/license.lic a.py b.py

效果展示

Before:

print("Hello World")

After:

from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x09\x00\x61\x0d\x0d\x0a\x09\x34\xe0\x02\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\xd3\x00\x00\x00\x00\x00\x00\x18\xf3\xd0\x2e\xdf\x73\xa4\x07\x19\x67\x81\x80\xcf\x64\x7b\x02\xc7\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x57\x52\x60\x7d\x36\x4f\xc9\xa2\xc5\x6a\x62\xa1\x16\x70\x97\xb9\x68\xda\x9f\x30\xec\x19\x6a\x83\x10\xb9\x14\xdc\x6a\x3a\x28\x57\x59\x10\x53\x5a\xd2\x4e\xa1\x1f\x4d\x1f\x10\x50\x09\x64\x51\x13\xfc\x70\xbf\x4a\xc3\x7c\xb5\xac\x6a\x71\xad\x6a\xda\x9f\xeb\x32\xf5\x98\x97\xe9\x49\x8f\xa6\x11\xe0\x17\x7c\xd4\x5c\xb4\x7f\x25\x49\xa2\x20\xb2\x65\x46\x95\x47\xdc\x13\x4c\x20\x24\xd2\x6e\xcf\x83\x8b\x11\x26\x8c\xae\x37\x65\x3a\x4c\x79\x36\x44\x20\x4c\x2f\x77\x4b\x22\x34\x7d\x57\xd4\xa9\xf1\x16\x35\x59\xed\x6b\xfd\x2d\xd2\x09\x3e\x0c\x25\x33\x01\x61\x18\x90\xde\xaa\xd2\x59\xe6\x65\x46\x2d\x19\xf1\x31\x36\x4d\x64\xaa\xee\x7b\x52\x26\x82\x1e\x23\x15\x2e\x0e\xe2\xb7\x2a\x82\x84\xc8\x9c\xea\x79\x85\x5b\xea\x41\x62\xaf\xb5\x30\x37\xb1\x39\x83\x0d\x74\x34\x42\xc5\xa2\x76\x8f\xda\x45\x25\xc2\xd6\x75\xa9\x6e\xfe\xa5\xde\x44\x43\xd5\xb5\x08\xdb\x21', 2)

今天的分享就到这里结束了,老铁们记得thumbs up

第一时间获取更多信息,联系本人进行答疑,请关注公主号:HardcoreTech硬核科技

你可能感兴趣的:(python,开发语言)