|
|
发表于
2023-11-24 23:24:53
来自手机
|
显示全部楼层
来自 天津
本帖最后由 黄金 于 2023-11-24 23:27 编辑
诶我编辑呢?
更新了(有个bug,第一个yi成elif了,删掉el就行)
- # -*- coding: utf-8 -*-
- # 推荐Python3.x以上版本(如果Bug在Python3.x以上版本无法复现,就不修了)
- # MT124527
- def log(记录的内容):
- from datetime import datetime
- 时间和日期 = datetime.now()
- 时间 = 时间和日期.strftime("%H:%M:%S")
- 日期 = 时间和日期.strftime("%Y-%m-%d")
- import sys
- 日志文件夹路径 = sys.argv[0]+f".log"
- import os
-
- 日志文件路径 =os.path.join(日志文件夹路径,f"{日期}.log")
- os.makedirs(日志文件夹路径, exist_ok=True)
- with open(日志文件路径, 'a') as 日志文件:
- 日志文件.write(f"{时间}\t{记录的内容}\n")
- def 检查缩进(代码):
- 可能作为缩进的文本 = {' ', '\t'}
- return any(缩进 in 可能作为缩进的文本 for 缩进 in 代码)
- def 生成随机值(生成量=20, 初始种子=None):
- import random as rd
- while True:
- def 查重(待查重列表):
- 出现过的 = set()
- for 列表内容 in 待查重列表:
- if 列表内容 in 出现过的:
- return True
- 出现过的.add(列表内容)
- return False
- 随机值_列表 = list() # 初始化结果列表
- if 初始种子 == None:
- 初始种子 = rd.random() # 设定初始种子
- else:
- None
- 随机值_列表.append(float(初始种子)) # 记录初始种子
- 随机种子 = float(初始种子) # 设定随机种子
- for i in range(生成量):
- rd.seed(随机种子)
- 随机种子 = rd.random()
- 随机值_列表.append(随机种子)
- if 查重(随机值_列表) == False:
- log(随机值_列表)
- return 随机值_列表 # 没有重复,跳出循环并返回列表
- def 控制流混淆(源代码, 不运行的代码=None): # 暂时不支持缩进(除非你写一行里,或许缩进可以单独混淆一次)
- """
- 源代码 类型:列表(以行为单位“.split("\n")”,变量不要写多行,不支持缩进)
- 不运行的代码 类型:列表(以行为单位“.split("\n")”,变量不要写多行,不支持缩进)
- 其他:最好不要加注释,如果非要加,就“None#xxxxxx”这样注释(不然也没事)
- """
- import random as rd
- 源代码 = [item for item in 源代码 if item != ""] # 去除空行
- if 不运行的代码 != None:
- 不运行的代码 = [item for item in 不运行的代码 if item != ""] # 去除空行
- 源代码.append("break") # 这个好写,先加这个吧(原理:正常代码退出后想干嘛干嘛)
- for i in 不运行的代码:
- 源代码.append(i)
- 需要量 = len(源代码)
- if 不运行的代码 == None:
- 需要量+=1
- 随机值 = 生成随机值(生成量=需要量)
- 混淆后类名 = "_"+str(rd.random() * 10).replace(".", "")
- 混淆后变量名 = "_"+str(rd.random() * 10).replace(".", "")
- 混淆主代码 = (
- "import random as "
- + 混淆后类名
- + "\n"
- + 混淆后类名
- + ".seed("
- + str(随机值[0])
- + ")\n"
- + 混淆后变量名
- + "="
- + 混淆后类名
- + ".random()\n"
- + "while True:\n"
- )
- 混淆分代码 = [
- " if "
- + 混淆后变量名
- + "=="
- + str(随机值[-1])
- + ":\n"
- + " "
- + 混淆后类名
- + ".seed("
- + 混淆后变量名
- + ")\n"
- + " "
- + 混淆后变量名
- + "="
- + 混淆后类名
- + ".random()\n"
- + " break\n",
- " elif "
- + 混淆后变量名
- + "=={随机值}:\n"
- + " "
- + 混淆后类名
- + ".seed("
- + 混淆后变量名
- + ")\n"
- + " "
- + 混淆后变量名
- + "="
- + 混淆后类名
- + ".random()\n",
- ]
- 混淆后代码 = "#控制流混淆-黄金\n#MT论坛UID:124527\n"
- 混淆后代码 += 混淆主代码
- 混淆后用户代码 = list()
- for i in range(len(源代码)):
- 混淆后用户代码.append(
- 混淆分代码[1].replace("{随机值}", str(随机值[i + 1])) + "\t\t" + 源代码[i] + "\n"
- )
- if 不运行的代码 == None:
- 混淆后用户代码.insert(0, 混淆分代码[0])
- rd.shuffle(混淆后用户代码) # 打乱顺序
- for i in 混淆后用户代码:
- 混淆后代码 += i
-
- return 混淆后代码
- 源码 = """
- """.split(
- "\n"
- )
- 干扰代码 = """
- """.split(
- "\n"
- )
- 干扰代码=[]
- print(控制流混淆(源码,干扰代码))
复制代码 |
|