不仅能防沉迷游戏的防沉迷软件(Python)
介绍
一个有那么一点功能但是又不太保险的防沉迷工具
我脑子进水了才会写这玩意儿 为了变强,我不择手段(笑出zhu jiao
代码
好像没什么用的设定界面
# -*- coding: utf-8 -*-
# Environment PyCharm
# File_name login |User Pfolg
# 2024/8/3 13:05""" 想这样的,但是石粒不济,弄了个残废品出来可以用
有加密技术,能持续监管线程,能防止自身被击杀,能防止自身被删除,还能自主关闭
"""import hashlib
import json
import os
import random
from tkinter import messagebox
from tkinter import ttk
import tkinter as tk
import timecount = 0
flag = False
bol = Truedef mainControl(frame):# 目标程序 这里可以翻任务管理器找程序名appDict = {"米哈游启动器": "HYPHelper.exe","原神": "YuanShen.exe","绝区零": "ZenlessZoneZero.exe","Bilibili": "哔哩哔哩.exe","网易云音乐": "cloudmusic.exe","腾讯视频": "QQLive.exe","雷神加速器": "leigod.exe","Steam": "steam.exe","QQ": "QQ.exe","微信": "WeChat.exe","Edge": "msedge.exe","QQ浏览器": "QQBrowser.exe","Chrome": "chrome.exe",}appList = list(appDict.keys())BooleanVars = [tk.BooleanVar() for _ in range(len(appList))]def selectAllApp(x):if x:for obj in BooleanVars:obj.set(True)else:for obj in BooleanVars:obj.set(False)selectApp = tk.BooleanVar()ttk.Checkbutton(frame, text="全选", variable=selectApp, command=lambda: selectAllApp(selectApp.get())).place(relx=.02, rely=.05)for i in range(len(appList)):ttk.Checkbutton(frame, text=appList[i], variable=BooleanVars[i]).place(relx=.02, rely=.05 * i + .12)# 时间段starTime, endTime = tk.StringVar(), tk.StringVar()allTime = tk.BooleanVar()def selectAllTime(x):if x:starTime.set(0.0)endTime.set(24.0)else:starTime.set("")endTime.set("")timeList = [i * .5 for i in range(48)]timeList.append(24.0)ttk.Label(frame, text="Start").place(relx=.7, rely=.1)ttk.Label(frame, text="end").place(relx=.7, rely=.2)ttk.Combobox(frame, values=timeList, textvariable=starTime, width=6).place(relx=.75, rely=.1)ttk.Combobox(frame, values=timeList, textvariable=endTime, width=6).place(relx=.75, rely=.2)ttk.Checkbutton(frame, text="全时段封禁", variable=allTime, command=lambda: selectAllTime(allTime.get())).place(relx=.72, rely=.3)try:readf = open("Cache.txt", "r", encoding="utf-8")settingList = json.load(readf)for i in range(len(appList)):BooleanVars[i].set(settingList[0].get(appList[i])[1])starTime.set(settingList[1])endTime.set(settingList[2])c = settingList[3]readf.close()except BaseException:print(404)def getvalue():global bol, bif bol:for j in range(len(BooleanVars)):appDict[appList[j]] = [appDict.get(appList[j]), BooleanVars[j].get()]bol = FalsefileNameKeys = "究竟要不要在这里写上原理啥的呢,写了会怎么样,不写又会有什么结果?额,思来想去,我觉得我这个程序漏洞比较大,于是我决定加强主次程序间关系,废话一段,就这样吧。原理什么的别想了。"myKeys = ""for _ in range(3):a = random.randint(0, len(fileNameKeys) - 1)myKeys += fileNameKeys[a]b = hashlib.md5(myKeys.encode()).hexdigest()savef = open("Cache.txt", "w", encoding="utf-8")json.dump([appDict, starTime.get(), endTime.get(), b], savef, ensure_ascii=False, indent=4)messagebox.showinfo(title="message", message="Success")savef.close()try:os.remove(f".\\{c}.txt")except FileNotFoundError:passlb1 = ttk.Label(frame, text="正在运行")def startUp():file = open(f".\\{b}.txt", "w", encoding="utf-8")file.close()os.system("start .\\killPID.pyw")lb1.pack()def stopAPP():try:os.remove(f".\\{b}.txt")except NameError:passos.remove(f".\\{c}.txt")lb1.pack_forget()ttk.Button(frame, text="Start", width=8, command=startUp).place(relx=.7, rely=.7)ttk.Button(frame, text="Stop", width=8, command=stopAPP).place(relx=.8, rely=.7)ttk.Button(frame, text="Help", width=8,command=lambda: messagebox.showinfo(title="message", message="一选二保存三运行四停止")).place(relx=.9, rely=.8)ttk.Button(frame, text="保存", command=getvalue, width=8).place(relx=.9, rely=.9)try:if os.path.isfile(f".\\{c}.txt"):lb1.pack()except UnboundLocalError:pass# 判断用户名和密码是否正确,用的sha256
# 这里自己设置,我的用户名和密码就当模板罢,这玩意逆向不出来。(暴力破解、差分攻击……
def judge(x, y):global count, flagif (hashlib.sha256(x.encode()).hexdigest()== "00cfe4cfcd27c0c2f658560a2068b1e7e9ae8ca64a93b8d8cad84c9d2603c18b"and hashlib.sha256(y.encode()).hexdigest()== "dc96921b3a27e6a8b257d6e6a2a3b083549e1bcd09b497b7f8cdd5a95867e2e3"):messagebox.showinfo(title="Success", message="You are successfully logged in!")frameLogin.place_forget()window.title("游戏管理系统")with open("log.txt", "a", encoding="utf-8") as f:f.write(f"<Success-{count}>{time.strftime('%Y/%m/%d-%H:%M:%S', time.localtime())}\n")frameControl.place(relx=0, rely=0, width=w, height=h)returnelif count == 4:messagebox.showerror(title="Fail", message="Sorry, your opportunity has been exhausted!")with open("log.txt", "a", encoding="utf-8") as f: # 不管登录成功或失败都要记录日志f.write(f"<Fail-{count}>{time.strftime('%Y/%m/%d-%H:%M:%S', time.localtime())}\n")returnelse:messagebox.showerror(title="Fail", message="Something error,please try again!\n"f"left:{4 - count},all:5")count += 1# 登录界面
def pwdAndUser(frame):user, pwd = tk.StringVar(), tk.StringVar()ttk.Label(frame, text="WELCOME", font=("msyh.ttc", 30)).place(relx=.38, rely=.2)ttk.Label(frame, text="UserName").place(relx=.3, rely=.4)ttk.Label(frame, text="Password").place(relx=.3, rely=.5)ttk.Entry(frame, width=20, textvariable=user).place(relx=.4, rely=.4)ttk.Entry(frame, width=20, textvariable=pwd).place(relx=.4, rely=.5)ttk.Button(frame, text="Login", command=lambda: judge(user.get(), pwd.get())).place(relx=.43, rely=.6)if __name__ == '__main__':window = tk.Tk()window.title("Login")screen_w, screen_h = window.winfo_screenwidth(), window.winfo_screenheight()w, h = int(screen_w / 2), int(screen_h / 2)window.geometry(f'{w}x{h}+{int(screen_w / 4)}+{int(screen_h / 4)}')window.resizable(False, False)frameLogin = ttk.Frame(window)frameLogin.place(relx=0, rely=0, width=w, height=h)pwdAndUser(frameLogin)frameControl = ttk.Frame(window)mainControl(frameControl)window.mainloop()
主要运行程序
原理嘛,寻找并击杀线程
# -*- coding: utf-8 -*-
# Environment PyCharm
# File_name killPID |User Pfolg
# 2024/8/4 17:46
import json
import psutil
import time
import os
from plyer import notificationflag = Truedef find_and_kill_process(process_name):# 查找所有名为process_name的进程for proc in psutil.process_iter(['name']):if proc.info['name'] == process_name:# 记录优化日志f = open(".\\log.txt", "a", encoding="utf-8")f.write(f"{time.strftime('%Y/%m/%d-%H:%M:%S', time.localtime())}\t{process_name}\t{proc.pid}\n")f.close()print(f"找到进程: {proc.info['name']} (PID: {proc.pid})")# 尝试关闭进程try:proc.terminate() # 发送终止信号proc.wait(timeout=10) # 等待进程结束print(f"进程 {proc.pid} 已被终止。")# messagebox.showerror(title="Windows", message="未知错误!")except psutil.NoSuchProcess:print(f"进程 {proc.pid} 已经不存在。")except psutil.AccessDenied:notification.notify(title='Reminder',message="No power to end"+str(proc.pid),timeout=10, # 通知显示时间,单位为秒)print(f"没有权限终止进程 {proc.pid}。")except Exception as e:print(f"终止进程 {proc.pid} 时发生错误: {e}")break # 如果只需要关闭一个进程,找到后即可退出循环def mainProcess():global flagfile = open(".\\Cache.txt", "r", encoding="utf-8")setInf = json.load(file)appInf = setInf[0]begin = setInf[1]over = setInf[2]name = setInf[3]file.close()app = []# 筛选可禁用的应用for i in appInf.keys():x = appInf.get(i)if x[1]:app.append(x[0])notification.notify(title='Reminder',message="System Start Running",timeout=3, # 通知显示时间,单位为秒)while flag:may_now = time.strftime("%H:%M", time.localtime()).split(":")now = int(may_now[0]) + int(may_now[1]) / 60if float(begin) <= now <= float(over):for i in app:find_and_kill_process(i)time.sleep(.1) # 减速减内存if os.path.isfile(f".\\{name}.txt"):passelse:flag = Falsenotification.notify(title='Reminder',message="System End Running",timeout=3, # 通知显示时间,单位为秒)if __name__ == '__main__':mainProcess()
效果
上个视频看看吧>
额,那个弹窗我后面删了,程序就显得比较隐蔽了。
不足
功能不强,想禁的程序只能在代码里添加;
删掉md5码生成的txt文件后程序就退出运行了;
太简陋朴实了。
其他
可以手动设置开机自启动,把程序2放到startup文件夹内就可以了;
可以生成日志,登录啥的、线程击杀啥的;
CPU占用一般在0-10%间,最多时间在1%-2%;
改改代码就能自己用了。
相关文章:
不仅能防沉迷游戏的防沉迷软件(Python)
介绍 一个有那么一点功能但是又不太保险的防沉迷工具 我脑子进水了才会写这玩意儿 为了变强,我不择手段(笑出zhu jiao 代码 好像没什么用的设定界面 # -*- coding: utf-8 -*- # Environment PyCharm # File_name login |User Pfolg # 2024/…...
数学建模--智能算法之鱼群算法
目录 核心原理 应用与实现 实现步骤 性能分析与改进 鱼群算法在解决哪些具体优化问题方面表现最佳? 如何根据不同的应用场景调整鱼群算法的参数设置以提高其性能? 鱼群算法与其他群体智能优化算法(如遗传算法、粒子群优化)…...
html+css+js前端作业qq音乐官网5个页面 带js
htmlcssjs前端作业qq音乐官网5个页面 带js 有轮播图,tab切换等多种效果 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编…...
【mars3d】加载超图s3m模型说明
建议替换Cesium库,换成 超图版本Cesium mars3d mars3d-supermap ,需要引入的资源为: "mars3d": ["Cesium-supermap/Widgets/widgets.css", //超图版本Cesium "Cesium-supermap/Cesium.js","mars3d/plu…...
LeetCode Hot100 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出:1示例 2: 输入…...
CBK-D5-安全测试与开发osg15、20、21
CBK-D5-安全测试与开发osg15、20、21 安全评估与测试 构建安全评估和测试方案 安全测试 旨在验证某项控制措施是否正常运行。 包括自动化扫描、工具辅助的渗透测试、破坏安全性的手动测试。 渗透测试可以每年开展一次,以最大限度地降低费用并减小业务中断的影响。 仅简…...
期权杠杆与期货杠杆的区别是什么?
期权与股指期货在杠杆性上展现出截然不同的特性,这些特性对投资者的策略选择具有深远影响。首先,股指期货采用保证金制度,其杠杆比例是恒定的,无论市场如何波动,投资者在月初设定的十倍杠杆到月尾仍保持不变。相比之下…...
数字人解决方案——音频驱动机器人
音频集成 机器人 标志着 人工智能(AI)。 想象一下,机器人可以通过视觉和听觉导航并与周围环境互动。音频驱动的机器人使这成为可能,提高了它们更高效、更直观地执行任务的能力。这一发展可能会影响到各个领域,包括家庭…...
Linux Tcp 连接 状态 检测 处理
查看不同状态的链接数 netstat -na | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]} 输出如下: TIME_WAIT 2 CLOSE_WAIT 2149 LISTEN 18 ESTABLISHED 214...
String respIson = objectMapper.writeValueAsString(response);
**一、代码解释** 这段代码的作用是使用ObjectMapper(假设是 Jackson 的ObjectMapper)将一个 Java 对象response转换为 JSON 格式的字符串。 1. ObjectMapper: 它是 Jackson 库中用于在 Java 对象和 JSON 之间进行序列化和反序列化的核心类。…...
git squash、merge 、 rebase
Git Merge、Rebase 和 Squash 之间的区别_git squash-CSDN博客...
案例开发-日程管理2第一期(超详细教程、配备图文和源代码注释,没学过也能看懂)
文章目录 一、 项目前期准备1.数据库准备2.导入依赖3.pojo包处理4.dao包处理5.service包处理6.controller包处理7.加密工具类的使用8.页面文件的导入 总结 一、 项目前期准备 1.数据库准备 创建schedule_system数据库并执行如下语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHE…...
c# 逻辑运算符和条件运算符
前言 在 C# 中,&&、|| 用于处理布尔值(true 和 false),而&、|、^ 位运算符可以用于按位操作整数。 后者总是计算其两个操作数 而前者可能不会计算第二个操作数,这取决于第一个操作数的值。 非短路逻辑运…...
Linux驱动开发—设备树传递给内核,匹配驱动过程分析
文章目录 总体流程图传递DTB过程编译设备树源文件将 .dtb 文件与内核或引导加载程序集成 内核初始化阶段解析DTB内核启动阶段解析 DTB注册设备树节点驱动程序绑定 内核解析设备树二进制文件(DTB)的过程主要分为几个步骤,从设备树的传递到最终…...
深入理解 Go 语言信号量 Semaphore
1. 什么是信号量 信号量的概念是荷兰计算机科学家 Edsger Wybe Dijkstra 在 1963 年左右提出来的,被广泛应用在不同的操作系统中。在操作系统中,会给每一个进程分配一个信号量,代表每个进程目前的状态。未得到控制权的进程,会在特定的地方被迫停下来,等待可以继续进行的信…...
git——删除远程仓库中的文件或文件夹步骤图解(只是从远程仓库中删除,本地文件不受影响、不会被删除)
目录 一、删除远程仓库中的文件或文件夹1.1、 以删除远程仓库jetcache-demo项目中的logs文件夹为例1.2、 删除远程仓库jetcache-demo项目中的logs文件夹步骤图解 一、删除远程仓库中的文件或文件夹 1.1、 以删除远程仓库jetcache-demo项目中的logs文件夹为例 删除远程仓库jet…...
详解贪心算法
贪心算法(Greedy Algorithm) 概述: 贪心算法是一种在求解最优化问题时采取的一种常用算法策略。贪心算法的基本思想是,每次选择当前情况下的局部最优解,并相信这个局部最优解能够导致全局最优解。贪心算法通过迭代的方式一步步地…...
LabVIEW工件表面瑕疵识别系统
开发了一种利用LabVIEW和IMAQ Vision视觉工具进行工件表面瑕疵识别的系统。该系统通过图像处理技术识别并分类工件表面的裂纹、划痕等缺陷,从而提升生产线的分拣效率和产品质量。 项目背景 工业生产中,工件表面的缺陷直接影响产品质量和生产效率。传统人…...
LabVIEW水下根石监测系统
开发了一种基于LabVIEW平台开发的水下根石监测系统。该系统利用高精度姿态传感器与位移传感器,实现了水下根石状态的实时自动监测,提高了水利工程安全管理的现代化和精细化水平,具有高精度、高稳定性和良好的操作性。 项目背景: …...
探索全光网技术 | 全光网络技术方案选型建议三(医院场景)
目录 一、场景设计需求二、医院场景拓扑三、部署方式四、产品相关规格说明五、方案优势与特点 注:本文章参考资料为:华三官方资料 - “新华三全光网络3.0解决方案(教育)”与 锐捷官方资料 - “【锐捷】高校极简以太全光3.X方案设计…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
