windows 系統U盤驗證開機,python+tk
阿新 • • 發佈:2018-12-31
被好多大神批評,,
再次宣告,,只用於電腦小白,或者自己玩玩,
下面有同學甚至提出了PE,,試問有什麼驗證能擋住PE,,
PE本來就是一個獨立的系統呀(就好比我的電腦密碼能鎖住你的電腦嗎?)
在論壇看見有人用.bat批處理來實現 U盤驗證開機,,。。
馬上就有靈感用Python來做一個同樣的程式,
1.用Python 自帶的庫 base64 加密一段文字或字母,
- import base64
- keys = 'jiamisuanfa123的生成亂碼' * 10
- s1 = base64.b64encode(keys.encode(encoding='utf-8'))
複製程式碼
2.將加密後的資訊儲存為一個111檔案。
- fus = r'D:\111' # 生成鑰匙檔案地址(也就是U盤根目錄下 的一個檔案)
- with open(fus, 'wb') as f:
- 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()