返回列表 发新帖

让你的Python代码更难分析-Python控制流混淆(成品,可骗过gpt)

  [复制链接]

282

主题

4134

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
5852
好评
23
信誉
128

考神MT论坛新人MT论坛最佳新人MT论坛帅哥MT论坛活跃会员MT论坛灌水老大

发表于 2023-11-15 00:17:59 来自手机  | 显示全部楼层 | 阅读模式  来自 天津
本帖最后由 黄金 于 2023-11-16 23:02 编辑

₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏₏
骗过gpt.mp4

不隐藏都没几个回复的

混淆结果:
  1. #控制流混淆-黄金
  2. #MT论坛UID:124527
  3. import random as 黄金_MT124527
  4. 黄金_MT124527.seed(0.7923241621559751)
  5. 黄金_MT124527_随机数 = 黄金_MT124527.random()
  6. while True:
  7.         if 黄金_MT124527_随机数 == 0.4077074162629265: # 最后一个运行
  8.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  9.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  10.                 break
  11.         elif 黄金_MT124527_随机数 == 0.24717283237313226:
  12.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  13.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  14.                 b = a*2
  15.         elif 黄金_MT124527_随机数 == 0.8711408828017096:
  16.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  17.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  18.                 print(b/a)
  19.         elif 黄金_MT124527_随机数 == 0.749383904609798:
  20.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  21.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  22.                 b = 4
  23.         elif 黄金_MT124527_随机数 == 0.3163126255726494:
  24.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  25.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  26.                 print(a+b)
  27.         elif 黄金_MT124527_随机数 == 0.7381649251031686:
  28.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  29.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  30.                 print(a*b)
  31.         elif 黄金_MT124527_随机数 == 0.9071330490484193:
  32.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  33.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  34.                 a = b*2
  35.         elif 黄金_MT124527_随机数 == 0.34011616542522194:
  36.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  37.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  38.                 a = b/2
  39.         elif 黄金_MT124527_随机数 == 0.8068735705550132:
  40.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  41.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  42.                 b = a/2
  43.         elif 黄金_MT124527_随机数 == 0.9132736094261585:
  44.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  45.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  46.                 exit()
  47.         elif 黄金_MT124527_随机数 == 0.3924816608035776:
  48.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  49.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  50.                 print(a/b)
  51.         elif 黄金_MT124527_随机数 == 0.8015791348701278:
  52.                 黄金_MT124527.seed(黄金_MT124527_随机数)
  53.                 黄金_MT124527_随机数 = 黄金_MT124527.random()
  54.                 a = 4
复制代码
  1. 此版本不支持缩进处理和自定义不运行的代码
  2. 啥时候3个好评了发下一版(视频里那个)
  3. 转发需保留第一行
  4. 纯手写(格式化不算)
  5. 耗时约多0.2s(3行)
复制代码
求好评QWQ
  1. # MT124527
  2. def 生成随机值(生成量=20, 初始种子=None):
  3.     import random as rd

  4.     while True:

  5.         def 查重(待查重列表):
  6.             出现过的 = set()
  7.             for 列表内容 in 待查重列表:
  8.                 if 列表内容 in 出现过的:
  9.                     return True
  10.                 出现过的.add(列表内容)
  11.             return False

  12.         随机值_列表 = list()  # 初始化结果列表
  13.         if 初始种子 == None:
  14.             初始种子 = rd.random()  # 设定初始种子
  15.         else:
  16.             None
  17.         随机值_列表.append(初始种子)  # 记录初始种子
  18.         随机种子 = 初始种子  # 设定随机种子
  19.         for i in range(生成量):
  20.             rd.seed(随机种子)
  21.             随机种子 = rd.random()
  22.             随机值_列表.append(随机种子)
  23.         if 查重(随机值_列表) == False:
  24.             return 随机值_列表  # 没有重复,跳出循环并返回列表


  25. def 控制流混淆(源代码, 不运行的代码=None):  # 暂时不支持缩进(除非你写一行里,或许缩进可以单独混淆一次)
  26.     """
  27.     源代码 类型:列表(以行为单位“.split("\n")”,不支持缩进,缩进统一“\t”)
  28.     不运行的代码 开发中。。。
  29.     """

  30.     需要量 = len(源代码) + 1  # 要算上开始的种子
  31.     随机值 = 生成随机值(生成量=需要量)
  32.     混淆主代码 = (
  33.         "import random as 黄金_MT124527\n"
  34.         + "黄金_MT124527.seed("
  35.         + str(随机值[0])
  36.         + ")\n"
  37.         + "黄金_MT124527_随机数 = 黄金_MT124527.random()\n"
  38.         + "while True:\n"
  39.         + "        if 黄金_MT124527_随机数 == "
  40.         + str(随机值[-1])
  41.         + ": # 最后一个运行\n"
  42.         + "                黄金_MT124527.seed(黄金_MT124527_随机数)\n"
  43.         + "                黄金_MT124527_随机数 = 黄金_MT124527.random()\n"
  44.         + "                break\n"
  45.     )
  46.     混淆分代码 = (
  47.         "        elif 黄金_MT124527_随机数 == {随机值}:\n"
  48.         + "                黄金_MT124527.seed(黄金_MT124527_随机数)\n"
  49.         + "                黄金_MT124527_随机数 = 黄金_MT124527.random()\n"
  50.     )
  51.     混淆后代码 = "#控制流混淆-黄金\n#MT论坛UID:124527\n"
  52.     混淆后代码 += 混淆主代码
  53.     混淆后用户代码 = list()
  54.     for i in range(len(源代码)):
  55.         if i == None:
  56.             i = "None"  # 防止空代码影响运行
  57.         混淆后用户代码.append(
  58.             混淆分代码.replace("{随机值}", str(随机值[i + 1]))
  59.             + "\t\t" + 源代码[i] + "\n"
  60.         )
  61.     import random as rd

  62.     rd.shuffle(混淆后用户代码)  # 打乱顺序
  63.     for i in 混淆后用户代码:
  64.         混淆后代码 += i
  65.     if 不运行的代码 == None:
  66.         return 混淆后代码
  67.     else:
  68.         print("#此功能正在开发中。。。")
  69.         return 混淆后代码


  70. 源码 = """
  71. a = "python控制流混淆"
  72. b = "黄金"
  73. print(a+"-"+b)
  74. """
  75. print(控制流混淆([源码.split("\n")]))
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

282

主题

4134

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
5852
好评
23
信誉
128

考神MT论坛新人MT论坛最佳新人MT论坛帅哥MT论坛活跃会员MT论坛灌水老大

发表于 2023-11-15 00:28:21 来自手机  | 显示全部楼层  来自 天津
自己的沙发自己坐
回复

使用道具 举报

282

主题

4134

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
5852
好评
23
信誉
128

考神MT论坛新人MT论坛最佳新人MT论坛帅哥MT论坛活跃会员MT论坛灌水老大

发表于 2023-11-24 23:24:53 来自手机  | 显示全部楼层  来自 天津
本帖最后由 黄金 于 2023-11-24 23:27 编辑

诶我编辑呢?
更新了(有个bug,第一个yi成elif了,删掉el就行)
  1. # -*- coding: utf-8 -*-
  2. # 推荐Python3.x以上版本(如果Bug在Python3.x以上版本无法复现,就不修了)
  3. # MT124527
  4. def log(记录的内容):
  5.     from datetime import datetime
  6.     时间和日期 = datetime.now()
  7.     时间 = 时间和日期.strftime("%H:%M:%S")
  8.     日期 = 时间和日期.strftime("%Y-%m-%d")
  9.     import sys

  10.     日志文件夹路径 = sys.argv[0]+f".log"
  11.     import os

  12.    
  13.     日志文件路径 =os.path.join(日志文件夹路径,f"{日期}.log")
  14.     os.makedirs(日志文件夹路径, exist_ok=True)

  15.     with open(日志文件路径, 'a') as 日志文件:
  16.         日志文件.write(f"{时间}\t{记录的内容}\n")

  17. def 检查缩进(代码):
  18.     可能作为缩进的文本 = {' ', '\t'}
  19.     return any(缩进 in 可能作为缩进的文本 for 缩进 in 代码)

  20. def 生成随机值(生成量=20, 初始种子=None):
  21.     import random as rd

  22.     while True:

  23.         def 查重(待查重列表):
  24.             出现过的 = set()
  25.             for 列表内容 in 待查重列表:
  26.                 if 列表内容 in 出现过的:
  27.                     return True
  28.                 出现过的.add(列表内容)
  29.             return False

  30.         随机值_列表 = list()  # 初始化结果列表
  31.         if 初始种子 == None:
  32.             初始种子 = rd.random()  # 设定初始种子
  33.         else:
  34.             None
  35.         随机值_列表.append(float(初始种子))  # 记录初始种子
  36.         随机种子 = float(初始种子)  # 设定随机种子
  37.         for i in range(生成量):
  38.             rd.seed(随机种子)
  39.             随机种子 = rd.random()
  40.             随机值_列表.append(随机种子)
  41.         if 查重(随机值_列表) == False:
  42.             log(随机值_列表)
  43.             return 随机值_列表  # 没有重复,跳出循环并返回列表


  44. def 控制流混淆(源代码, 不运行的代码=None):  # 暂时不支持缩进(除非你写一行里,或许缩进可以单独混淆一次)
  45.     """
  46.     源代码 类型:列表(以行为单位“.split("\n")”,变量不要写多行,不支持缩进)
  47.     不运行的代码 类型:列表(以行为单位“.split("\n")”,变量不要写多行,不支持缩进)
  48.     其他:最好不要加注释,如果非要加,就“None#xxxxxx”这样注释(不然也没事)
  49.     """
  50.     import random as rd

  51.     源代码 = [item for item in 源代码 if item != ""]  # 去除空行
  52.     if 不运行的代码 != None:
  53.         不运行的代码 = [item for item in 不运行的代码 if item != ""]  # 去除空行
  54.         源代码.append("break")  # 这个好写,先加这个吧(原理:正常代码退出后想干嘛干嘛)
  55.         for i in 不运行的代码:
  56.             源代码.append(i)

  57.     需要量 = len(源代码)
  58.     if 不运行的代码 == None:
  59.         需要量+=1
  60.     随机值 = 生成随机值(生成量=需要量)
  61.     混淆后类名 = "_"+str(rd.random() * 10).replace(".", "")
  62.     混淆后变量名 = "_"+str(rd.random() * 10).replace(".", "")
  63.     混淆主代码 = (
  64.         "import random as "
  65.         + 混淆后类名
  66.         + "\n"
  67.         + 混淆后类名
  68.         + ".seed("
  69.         + str(随机值[0])
  70.         + ")\n"
  71.         + 混淆后变量名
  72.         + "="
  73.         + 混淆后类名
  74.         + ".random()\n"
  75.         + "while True:\n"
  76.     )
  77.     混淆分代码 = [
  78.         "        if "
  79.         + 混淆后变量名
  80.         + "=="
  81.         + str(随机值[-1])
  82.         + ":\n"
  83.         + "                "
  84.         + 混淆后类名
  85.         + ".seed("
  86.         + 混淆后变量名
  87.         + ")\n"
  88.         + "                "
  89.         + 混淆后变量名
  90.         + "="
  91.         + 混淆后类名
  92.         + ".random()\n"
  93.         + "                break\n",
  94.         "        elif "
  95.         + 混淆后变量名
  96.         + "=={随机值}:\n"
  97.         + "                "
  98.         + 混淆后类名
  99.         + ".seed("
  100.         + 混淆后变量名
  101.         + ")\n"
  102.         + "                "
  103.         + 混淆后变量名
  104.         + "="
  105.         + 混淆后类名
  106.         + ".random()\n",
  107.     ]
  108.     混淆后代码 = "#控制流混淆-黄金\n#MT论坛UID:124527\n"
  109.     混淆后代码 += 混淆主代码
  110.     混淆后用户代码 = list()
  111.     for i in range(len(源代码)):
  112.         混淆后用户代码.append(
  113.             混淆分代码[1].replace("{随机值}", str(随机值[i + 1])) + "\t\t" + 源代码[i] + "\n"
  114.         )
  115.     if 不运行的代码 == None:
  116.         混淆后用户代码.insert(0, 混淆分代码[0])

  117.     rd.shuffle(混淆后用户代码)  # 打乱顺序
  118.     for i in 混淆后用户代码:
  119.         混淆后代码 += i
  120.    
  121.     return 混淆后代码


  122. 源码 = """
  123. """.split(
  124.     "\n"
  125. )

  126. 干扰代码 = """
  127. """.split(
  128.     "\n"
  129. )
  130. 干扰代码=[]
  131. print(控制流混淆(源码,干扰代码))
复制代码
回复

使用道具 举报

23

主题

3302

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
7696
好评
26
信誉
102
发表于 2023-11-15 00:32:05 来自手机  | 显示全部楼层  来自 浙江
大佬牛逼
回复

使用道具 举报

334

主题

4112

回帖

1万

积分

博士生

一介独特的草民

Rank: 7Rank: 7Rank: 7

金币
3343
好评
155
信誉
224

考神MT论坛活跃会员MT论坛侠客MT论坛最佳新人MT论坛新人MT论坛灌水老大

发表于 2023-11-15 00:48:31 来自手机  | 显示全部楼层  来自 四川
前排围观,大佬厉害
回复

使用道具 举报

1

主题

3987

回帖

2万

积分

博士后

刘亦菲

Rank: 8Rank: 8

金币
6461
好评
13
信誉
150

考神MT论坛帅哥MT论坛最佳新人MT论坛新人挂机大佬

发表于 2023-11-15 00:51:02 来自手机  | 显示全部楼层  来自 山东
厉害厉害,谢谢分享.
回复

使用道具 举报

4

主题

327

回帖

708

积分

初中生

Rank: 3Rank: 3

金币
369
好评
0
信誉
98
发表于 2023-11-15 01:12:02 来自手机  | 显示全部楼层  来自 广东
看下
回复

使用道具 举报

45

主题

3512

回帖

8926

积分

硕士生

无聊

Rank: 6Rank: 6

金币
5404
好评
18
信誉
78

考神MT论坛活跃会员

发表于 2023-11-15 01:13:18 来自手机  | 显示全部楼层  来自 广东
看一看
回复

使用道具 举报

0

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
6877
好评
1
信誉
100
发表于 2023-11-15 07:40:24 来自手机  | 显示全部楼层  来自 河北
学习了
回复

使用道具 举报

0

主题

3808

回帖

9577

积分

硕士生

Rank: 6Rank: 6

金币
6749
好评
8
信誉
113
发表于 2023-11-15 07:40:50 来自手机  | 显示全部楼层  来自 广西
大佬厉害
回复

使用道具 举报

372

主题

1万

回帖

3万

积分

博士后

       

Rank: 8Rank: 8

金币
3329
好评
175
信誉
118
发表于 2023-11-15 07:49:58 来自手机  | 显示全部楼层  来自 广东
  支持支持  
回复

使用道具 举报

41

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
6148
好评
3
信誉
98
发表于 2023-11-15 08:14:54 来自手机  | 显示全部楼层  来自 山东
感谢分享
回复

使用道具 举报

4

主题

4129

回帖

8264

积分

硕士生

Rank: 6Rank: 6

金币
1004
好评
3
信誉
90

MT论坛新人MT论坛帅哥考神MT论坛最佳新人

发表于 2023-11-15 08:17:47 来自手机  | 显示全部楼层  来自 四川
虽然看不懂,但是很牛逼
回复

使用道具 举报

1

主题

6564

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
8722
好评
3
信誉
100
发表于 2023-11-15 08:32:35 | 显示全部楼层  来自 湖北
路过看看。
回复

使用道具 举报

8

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
5147
好评
1
信誉
100
发表于 2023-11-15 08:44:22 来自手机  | 显示全部楼层  来自 山东
大佬厉害
回复

使用道具 举报

1

主题

5275

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4379
好评
0
信誉
99
发表于 2023-11-15 08:49:21 | 显示全部楼层  来自 天津

谢谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表