不仅能防沉迷游戏的防沉迷软件(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方案设计…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
