如何防止python代码被盗
2022-07-18 # Python

不知道是否会用到,但还是先准备下,以免到时候手忙脚乱找不到。

要防止linux服务器中的python代码被盗,首先要从2点入手:

  1. 首先关闭ssh密码登陆,改用ssh秘钥登陆。
  2. 如果依然被攻破,将核心逻辑模块加入绑定MAC地址的判断,并编译为.pyd代码,删除对应的.py源码。

下面来细细地讲讲怎么操作。

关闭ssh密码登陆,改用ssh秘钥登陆的细节请参考 这里

先上用代码绑定IP和MAC地址的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# -*- coding: utf-8 -*-
import platform
import os
import requests
from bs4 import BeautifulSoup
import uuid
import time

#允许正常使用的MAC地址
ACCESS_MAC = ["29-9A-81-CD-95-93"]

def get_internet_ip():
"""
获取互联网IP
"""
ip = requests.get('http://ifconfig.me/ip', timeout=1).text.strip()
return ip

def get_mac():
"""
获取MAC地址
"""
"""
获取本机物理地址,获取本机mac地址
:return:
"""
mac = uuid.UUID(int=uuid.getnode()).hex[-12:].upper()
return "-".join([mac[e:e + 2] for e in range(0, 11, 2)])


start = time.perf_counter()
print(get_internet_ip())
print(f"获取ip用时 {time.perf_counter() - start} seconds")
start = time.perf_counter()
mac = get_mac()
print(mac)
print(f"获取mac地址用时 {time.perf_counter() - start} seconds")


assert mac in ACCESS_MAC,f"硬件信息不符合,无法运行"

然后把这段代码塞到核心逻辑模块中,最好只用mac地址,因为获取ip需要用到外网request而且很慢。用pip安装 easycython包来编译这个模块为 pyd文件。pyd文件类似于dll文件,是一个编译后的dll,基本无法反编译,比较安全。

首先

1
pip install easycython 

安装easycython

然后在目录命令行下 对想要被编译的py文件

1
easycython haizi.py

然后在当前目录下会生成2个文件haizi.c 和 haizi_XXXXXX.pyd 文件,删除.c和.py文件,然后把pyd文件重命名。这样就可以把这个pyd文件作为一个模块 import到其他文件里使用了。里面一般装一个函数方便调用。这个pyd文件是作为一个模块被import的,但直接运行貌似是不可以的。