1. 程式人生 > >windows 系統U盤驗證開機,python+tk

windows 系統U盤驗證開機,python+tk

 

被好多大神批評,,

再次宣告,,只用於電腦小白,或者自己玩玩,

下面有同學甚至提出了PE,,試問有什麼驗證能擋住PE,,

PE本來就是一個獨立的系統呀(就好比我的電腦密碼能鎖住你的電腦嗎?)

在論壇看見有人用.bat批處理來實現 U盤驗證開機,,。。

 

馬上就有靈感用Python來做一個同樣的程式,

1.用Python 自帶的庫 base64 加密一段文字或字母,

  1. import base64
  2. keys = 'jiamisuanfa123的生成亂碼' * 10
  3. s1 = base64.b64encode(keys.encode(encoding='utf-8'))

複製程式碼

2.將加密後的資訊儲存為一個111檔案。

  1. fus = r'D:\111' # 生成鑰匙檔案地址(也就是U盤根目錄下 的一個檔案)
  2. with open(fus, 'wb') as f:
  3. f.write(s1)

複製程式碼

3.將檔案儲存在U盤個目錄,,然後讀取這個檔案的資訊。

4.如果讀取不到檔案,或者檔案裡面的資訊與你加密資訊不一致,

5.出發windows的自動關機命令。(os.system("shutdown -s -t 0"))

6.程式設定是驗證失敗10秒後自動關機,

-注意,我沒有用shutdown -s -t 10命令是因為,計劃關機會提示你10秒後自動關機。

-我用的是time.sleep來實現

沒有環境的同學也可以用,我已經打包好了,(或者比較懶得同學)

https://www.lanzous.com/i2kfgwf(64位系統哦)

關機時間可以自己來設定,感覺10秒比較合適

下面附上全部原始碼

import base64
from tkinter import *
import time
import os
 
# os.system("shutdown -s -t  0")
# os.system("shutdown -a")  # 取消關機命令
fus = r'D:\111'  # 生成鑰匙檔案地址
fu = [r'D:\111', r'E:\111', r'F:\111', r'G:\111', r'H:\111', r'I:\111', r'J:\111']  # u盤的路徑
keys = 'jiamisuanfa123的生成亂碼' * 10
 
 
def shengchengkey():
    s1 = base64.b64encode(keys.encode(encoding='utf-8'))  # 加密
    # s2 = base64.b64decode(s1)  # 解密
    with open(fus, 'wb') as f:
        f.write(s1)
 
 
def hedui():
    for i in fu:
        if os.path.exists(i):  # 判斷U盤檔案是否存在,
            fu.append('yes')
            dd = open(i, 'rb').read()  # 開啟加密檔案
            if dd == base64.b64encode(keys.encode(encoding='utf-8')):  # 對比加密檔案
                ff['text'] = '驗證通過'  # 通過對比後,3秒退出程式
                ff.update()
                time.sleep(3)
                quit()
            else:
                print('驗證失敗')  # 對比失敗後,10秒後關機
                ff['text'] = '驗證失敗'
                ffff['text'] = '加金鑰匙錯誤'
                for ii in range(10, 0, -1):
                    fff['text'] = '倒計時關機:{}'.format(i)
                    fff.update()
                    time.sleep(1)
                os.system("shutdown -s -t  0")
 
    if fu[-1] != 'yes':  # 如U盤檔案不存在或U盤不存在,則10秒後關機,
        print('驗證失敗')
        ffff['text'] = '未找到加金鑰匙'
        ff['text'] = '驗證失敗'
        for i in range(10, 0, -1):
            fff['text'] = '倒計時關機:{}'.format(i)
            fff.update()
            time.sleep(1)
        os.system("shutdown -s -t  0")
 
 
top = Tk()
top.geometry('200x200+850+400')  # 視窗的大小,位置
top.attributes('-topmost', True)  # 視窗置頂
top.overrideredirect(True)  # 脫離系統架構,無標題欄程式,
ff = Button(top, text="開始開始", font=("Times", 23, "bold"))
fff = Label(top)
ffff = Label(top,fg='red')
ff.place(relx=0.02, rely=0.34)
fff.place(relx=0.25, rely=0.74)
ffff.place(relx=0.25, rely=0.2)
hedui()
top.mainloop()