这几天公司的Python3需要加密,网上的文章要么提供思路不提供代码,要么加密之后自己都没法用了。。没办法只能自己写了
文章整体思路
1、修改python源码opcode为随机值
修改下载后的Python源码包中opcode值(opcode可以理解为python读取代码的坐标,比如一个变量的opcode是5,则cpython读取这个变量时是从第5个字符串开始读的),修改后会导致关键变量的opcode混乱,除了自己的环境外,其他人都执行和解密不了了
2、在修改好opcode的python环境,把所有py文件编译成pyc,然后删除原始py文件
修改opcode的脚本:
#!/usr/bin/env python2.7
# encoding:utf-8
#FileName scramble-opcodes.py
__author__ = 'mafei'
import argparse
import re
import random
import os
python_version = 'Python-3.5.3'
regex_for_opcode_h = r'^#define\s+(?P[A-Z_]+)\s+(?P\d+)(?P.*)'
regex_for_opcode_py = r'^(?P[a-z_]+)+\(\'+(?P[A-Z_]+)+\'+\,\s+(?P\d+)(?P.*)'
try:
from importlib.machinery import SourceFileLoader
except ImportError:
import imp
class replace_opcode(object):
def __init__(self):
self.replace_dict = {}
self.not_have_argument_code_list = []
self.have_argument_code_list = []
def set_list(self, reg, file):
f1 = open(file, 'r+')
infos = f1.readlines()
f1.seek(0, 0)