不仅能防沉迷游戏的防沉迷软件(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方案设计…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...