本文主要是介绍python学习笔记——python转exe免杀,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:
将敏感代码转码,使用时解码再执行。
参考:
Python免杀火绒、360和Defender_江左盟宗主的博客-CSDN博客
一、敏感代码使用base64编码
#-*- coding: utf-8 -*-
import base64str = """
print('123')
"""
#编码
encode = base64.b64encode(str.encode('utf-8'))
print(encode)
结果:
b'CnByaW50KCcxMjMnKQo='
二、将编码后的数据,放在新文件里,使用前解码,再执行
#-*- coding: utf-8 -*-
import base64a = b'CnByaW50KCcxMjMnKQo='#解码
decode = base64.b64decode(a)
#执行
exec(decode)
三、注意事项
导入库的代码(import XXX),请勿进行编码。生成exe的时候,会加载所需要的的库。
四、一键转exe(单个文件)
文件布局
import os
import chardet
import base64"""
0.源文件,导入库的部分,都在顶部集中写。
1.源文件目录,只保留一个待处理文件。
2.结果文件夹,每次最好清空一下内容。
"""
# ===================1.读取文件名=======================
file_name = ""
for i in os.listdir("源文件/"):if ".py" in i:file_name = iif file_name == "":raise Exception("文件没有读取")# ===================2.获取文件的编码格式=======================
file = open("源文件/" + file_name, "rb")
encoding = chardet.detect(file.read())['encoding']# ===================3.读取数据=======================
import_message = ""
code_message = ""file = open("源文件/" + file_name, "r", encoding=encoding)
lines = file.readlines()for i in lines:if i[:6] == "import" or i[:4] == "from":import_message += ielse:code_message += i# ===================4.编码=======================
encode = base64.b64encode(code_message.encode('utf-8'))# ===================5.解码文件=======================file = open("结果/" + file_name, "w", encoding="utf-8")
# 写入导入
file.write(import_message)
file.write("import base64" + "\n")# 写入内容
file.write("\n")
file.write("a = " + str(encode) + "\n")
file.write("decode = base64.b64decode(a)" + "\n")
file.write("exec(decode)")
file.close()# # ===================6.转exe=======================
os.chdir("结果")
# os.system("pyinstaller -F " + file_name)#黑窗口版,无图标,一个exe文件
# os.system("pyinstaller -F -w " + file_name)#GUI界面版,无图标,一个exe文件
# os.system("pyinstaller -F -w --icon=图标.ico " + file_name)#GUI界面版,有图标,一个exe文件
os.system("pyinstaller -D -w --icon=图标.ico " + file_name)#GUI界面版,有图标,一个文件文件夹
五、一键转exe(多个单个文件)
文件布局
import os
import chardet
import base64"""
0.源文件,导入库的部分,都在顶部集中写。
1.源文件目录,只保留一个待处理文件。
2.结果文件夹,每次最好清空一下内容。
"""
# ===================1.读取文件名=======================for file_name in os.listdir("源文件/"):# ===================2.获取文件的编码格式=======================file = open("源文件/" + file_name, "rb")encoding = chardet.detect(file.read())['encoding']# ===================3.读取数据=======================import_message = ""code_message = ""file = open("源文件/" + file_name, "r", encoding=encoding)lines = file.readlines()for i in lines:if i[:6] == "import" or i[:4] == "from":import_message += ielse:code_message += i# ===================4.编码=======================encode = base64.b64encode(code_message.encode('utf-8'))# ===================5.解码文件=======================file = open("结果/" + file_name, "w", encoding="utf-8")# 写入导入file.write(import_message)file.write("import base64" + "\n")# 写入内容file.write("\n")file.write("a = " + str(encode) + "\n")file.write("decode = base64.b64decode(a)" + "\n")file.write("exec(decode)")file.close()# # ===================6.转exe=======================os.chdir("结果")os.system("pyinstaller -F " + file_name)#黑窗口版,无图标,一个exe文件os.chdir("../")#返回上一级目录# aaaa = r" --add-data H:\软件\Python\python_install\Lib\site-packages\pyecharts\render\templates;pyecharts/render/templates --add-data H:\软件\Python\python_install\Lib\site-packages\pyecharts\datasets;pyecharts/datasets"# os.system(r"pyinstaller -F " + file_name+aaaa)#黑窗口版,无图标,一个exe文件# os.system("pyinstaller -F -w " + file_name)#GUI界面版,无图标,一个exe文件# os.system("pyinstaller -F -w --icon=图标.ico " + file_name)#GUI界面版,有图标,一个exe文件# os.system("pyinstaller -D -w --icon=图标.ico " + file_name) # GUI界面版,有图标,一个文件文件夹
这篇关于python学习笔记——python转exe免杀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!