Python 3コードエンジニアリング暗号化
ここ数日、会社のPython 3は暗号化が必要で、ネット上の文章は構想を提供してコードを提供しないか、暗号化してから自分では使えません.仕方なく自分で書くしかない
文章全体の構想.
1、pythonソースコードopcodeをランダム値に変更する
ダウンロードしたPythonソースパッケージのopcode値を変更します(opcodeはpythonがコードを読み取る座標と理解できます.例えば、1つの変数のopcodeが5であれば、cpythonがこの変数を読み取るときは5番目の文字列から読みます).変更すると重要な変数のopcodeが混乱し、自分の環境を除いて他の人は実行して解読できません
2、opcodeのpython環境を修正し、すべてのpyファイルをpycにコンパイルし、元のpyファイルを削除する
文章全体の構想.
1、pythonソースコードopcodeをランダム値に変更する
ダウンロードしたPythonソースパッケージのopcode値を変更します(opcodeはpythonがコードを読み取る座標と理解できます.例えば、1つの変数の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)
for line in infos:
rex = re.compile(reg).match(line)
if rex:
if rex.group('name') in ['CALL_FUNCTION', 'CALL_FUNCTION_KW', 'CALL_FUNCTION_EX', 'CALL_FUNCTION_VAR',
'CALL_FUNCTION_VAR_KW']:
continue
elif int(rex.group('code'))
cd /opt/
wget
tar xJf Python-3.5.3.tar.xz
opcodeの を するpython scramble-opcodes.py --python-source=/opt/Python-3.5.3
# のステップは、 なpythonインストール です.
cd/opt/Python-3.5.3
./configure --prefix=/opt/python-3.5.3 && make && make install
システムへのアクセスexport PATH=/opt/python-3.5.3/bin/:$PATH
python3 python3.5.3 opcode
Pythonコードの (opcodeを したPython で する があります.そうしないと になりません)#!/usr/bin/env python2.7
# encoding:utf-8
__author__ = 'mafei'
import os
import subprocess
import argparse
import sys
def compile_py3(source_dir):
g = os.walk(source_dir)
# compileall.compile_dir(source_dir, maxlevels=100)
subprocess.check_output('{} -m compileall -b {}'.format(sys.executable,source_dir),shell=True)
for path,d,filelist in g:
for filename in filelist:
# py
if os.path.splitext(filename)[-1] =='.py':
os.remove(os.path.join(path, filename))
print('compile {}'.format(os.path.join(path, filename)))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Scramble python opcodes table')
parser.add_argument('--python-source', dest='src', type=str,
help='Python source code', required=True)
args = parser.parse_args()
source_directory = os.path.abspath(args.src)
compile_py3(source_directory)
https://blog.51cto.com/mapengfei/1976189