不仅能防沉迷游戏的防沉迷软件(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方案设计…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
