[Python 转载] 简易版,目录安全锁,防人手滑点进你的某个重要目录。

精品源码7天前更新 小编
4 0

首先声明,你别指望它能对付我们论坛里的人!!稍微有那么一点技术的人,都可以轻易绕开。切记切记!
这个东西,纯粹是为了防止某些人手滑,一不小心点进了你的某个特别重要的目录(我不是说的小姐姐照片、苍老师这些)。
密码是当前时间,如现在14:50,那么密码就是1450。
同样有编译好的EXE和源码。

[Python 转载] 简易版,目录安全锁,防人手滑点进你的某个重要目录。
[Python 转载] 简易版,目录安全锁,防人手滑点进你的某个重要目录。

  1. import os
  2. import sys
  3. import atexit
  4. import signal
  5. import subprocess
  6. import threading
  7. import tkinter as tk
  8. from tkinter import ttk, messagebox, filedialog, simpledialog
  9. LOCKED_DIRS = []
  10. DEFAULT_LOCK_DIR = "C:\\test"
  11. VIRTUAL_DRIVE = "Z:"
  12. VERIFIED = False
  13. def run_cmd(cmd):
  14.     try:
  15.         subprocess.run(cmd, shell=True, check=True, capture_output=True, encoding="gbk", timeout=120)
  16.         return True
  17.     except:
  18.         return False
  19. def lock_directory(path):
  20.     run_cmd(f'takeown /f "{path}" /r /d y')
  21.     run_cmd(f'icacls "{path}" /reset /t')
  22.     run_cmd(f'icacls "{path}" /inheritance:r /t')
  23.     run_cmd(f'icacls "{path}" /grant "%username%:(OI)(CI)(F)" /t')
  24.     run_cmd(f'icacls "{path}" /grant "NT AUTHORITY\\SYSTEM:(OI)(CI)(F)" /t')
  25.     run_cmd(f'icacls "{path}" /deny "Everyone:(OI)(CI)(F)" /t')
  26. def unlock_directory(path):
  27.     run_cmd(f'icacls "{path}" /reset /t')
  28.     run_cmd(f'icacls "{path}" /inheritance:e /t')
  29. def mount_virtual_drive(real_path, drive_letter):
  30.     run_cmd(f'subst {drive_letter} /d')
  31.     run_cmd(f'subst {drive_letter} "{real_path}"')
  32.     import time
  33.     time.sleep(0.5)
  34.     try:
  35.         os.startfile(drive_letter)
  36.     except:
  37.         pass
  38. def unmount_drive(drive_letter):
  39.     run_cmd(f'subst {drive_letter} /d')
  40. def re_lock_all():
  41.     for path in LOCKED_DIRS:
  42.         if os.path.isdir(path):
  43.             try:
  44.                 lock_directory(path)
  45.             except:
  46.                 pass
  47.     LOCKED_DIRS.clear()
  48. def cleanup():
  49.     unmount_drive(VIRTUAL_DRIVE)
  50.     re_lock_all()
  51. atexit.register(cleanup)
  52. def signal_handler(sig, frame):
  53.     sys.exit(0)
  54. signal.signal(signal.SIGINT, signal_handler)
  55. signal.signal(signal.SIGTERM, signal_handler)
  56. def get_current_password():
  57.     from datetime import datetime
  58.     return datetime.now().strftime("%H%M")
  59. def verify_password():
  60.     for _ in range(3):
  61.         pwd = simpledialog.askstring("密码验证", "请输入操作密码:", show="*")
  62.         if pwd == get_current_password():
  63.             return True
  64.         elif pwd is None:
  65.             return False
  66.         messagebox.showerror("错误", "密码不正确!")
  67.     messagebox.showwarning("提示", "验证次数已用完")
  68.     return False
  69. def select_dir():
  70.     dir_path = filedialog.askdirectory()
  71.     if dir_path:
  72.         entry_dir.delete(0, tk.END)
  73.         entry_dir.insert(0, dir_path)
  74.         update_status()
  75. def is_directory_locked(path):
  76.     try:
  77.         result = subprocess.run(f'icacls "{path}"', shell=True, capture_output=True, encoding="gbk", timeout=10)
  78.         output = result.stdout
  79.         if "Everyone:(OI)(CI)(N)" in output or "Everyone:(N)" in output or \
  80.            "Everyone:(OI)(CI)(DENY)" in output or "Everyone:(DENY)" in output:
  81.             return True
  82.         return False
  83.     except:
  84.         return False
  85. def set_buttons_state(enabled):
  86.     btn_lock.config(state="normal" if enabled else "disabled")
  87.     btn_unlock.config(state="normal" if enabled else "disabled")
  88. def update_status():
  89.     path = entry_dir.get().strip()
  90.     if not path or not os.path.isdir(path):
  91.         status_label.config(text="状态:未知", foreground="gray")
  92.         warning_label.config(text="")
  93.         set_buttons_state(False)
  94.         return
  95.     try:
  96.         if is_directory_locked(path):
  97.             status_label.config(text="状态:已锁定", foreground="red")
  98.             warning_label.config(text="")
  99.         else:
  100.             status_label.config(text="状态:已解锁", foreground="green")
  101.             warning_label.config(text="⚠️ 解锁后,记得重新加锁!")
  102.     except:
  103.         status_label.config(text="状态:未知", foreground="gray")
  104.         warning_label.config(text="")
  105.     set_buttons_state(True)
  106. def do_lock():
  107.     path = entry_dir.get().strip()
  108.     if not os.path.isdir(path):
  109.         messagebox.showwarning("提示", "目录不存在")
  110.         return
  111.     status_label.config(text="处理中...", foreground="blue")
  112.     warning_label.config(text="")
  113.     set_buttons_state(False)
  114.     def worker():
  115.         unmount_drive(VIRTUAL_DRIVE)
  116.         lock_directory(path)
  117.         if path not in LOCKED_DIRS:
  118.             LOCKED_DIRS.append(path)
  119.         root.after(0, on_lock_complete)
  120.     threading.Thread(target=worker, daemon=True).start()
  121. def on_lock_complete():
  122.     update_status()
  123. def do_unlock_and_mount():
  124.     path = entry_dir.get().strip()
  125.     if not os.path.isdir(path):
  126.         messagebox.showwarning("提示", "目录不存在")
  127.         return
  128.     status_label.config(text="处理中...", foreground="blue")
  129.     warning_label.config(text="")
  130.     set_buttons_state(False)
  131.     def worker():
  132.         unlock_directory(path)
  133.         mount_virtual_drive(path, VIRTUAL_DRIVE)
  134.         if path in LOCKED_DIRS:
  135.             LOCKED_DIRS.remove(path)
  136.         root.after(0, on_unlock_complete)
  137.     threading.Thread(target=worker, daemon=True).start()
  138. def on_unlock_complete():
  139.     update_status()
  140. def on_close():
  141.     if LOCKED_DIRS:
  142.         if messagebox.askyesno("确认退出", f"还有 {len(LOCKED_DIRS)} 个目录已锁定。\n退出后将保持锁定状态。\n\n确定要退出吗?"):
  143.             cleanup()
  144.             root.quit()
  145.             sys.exit(0)
  146.     else:
  147.         root.quit()
  148.         sys.exit(0)
  149. root = tk.Tk()
  150. root.title("目录安全锁")
  151. root.geometry("580x300")
  152. root.resizable(False, False)
  153. root.protocol("WM_DELETE_WINDOW", on_close)
  154. frame = ttk.Frame(root, padding=20)
  155. frame.pack(expand=True, fill=tk.BOTH)
  156. ttk.Label(frame, text="保护目录:").grid(row=0, column=0, sticky="w", pady=8)
  157. entry_dir = ttk.Entry(frame, width=45)
  158. entry_dir.grid(row=0, column=1, padx=5, pady=8)
  159. entry_dir.insert(0, DEFAULT_LOCK_DIR)
  160. ttk.Button(frame, text="选择目录", command=select_dir).grid(row=0, column=2, padx=5, pady=8)
  161. status_label = ttk.Label(frame, text="状态:未知", foreground="gray", font=("Arial", 11, "bold"))
  162. status_label.grid(row=2, column=1, sticky="w", pady=4)
  163. warning_label = ttk.Label(frame, text="", foreground="red", font=("Arial", 12, "bold"), anchor="center")
  164. warning_label.grid(row=3, column=0, columnspan=3, sticky="ew", pady=4)
  165. frame.grid_columnconfigure(1, weight=1)
  166. btn_frame = ttk.Frame(frame)
  167. btn_frame.grid(row=4, column=0, columnspan=3, pady=15)
  168. btn_lock = ttk.Button(btn_frame, text="🔒 一键上锁", command=do_lock, width=20)
  169. btn_lock.pack(side=tk.LEFT, padx=10)
  170. btn_unlock = ttk.Button(btn_frame, text="🔓 解锁 + 挂载虚拟盘", command=do_unlock_and_mount, width=24)
  171. btn_unlock.pack(side=tk.LEFT, padx=10)
  172. ttk.Label(frame, text="说明:", font=("Arial", 9)).grid(row=5, column=0, sticky="nw", pady=5)
  173. ttk.Label(frame, text="  上锁:仅自己和系统可访问,其他人无法打开", font=("Arial", 9), foreground="gray").grid(row=5, column=1, sticky="w")
  174. ttk.Label(frame, text="  解锁+挂载:临时解锁并通过虚拟盘访问,需重新上锁", font=("Arial", 9), foreground="gray").grid(row=6, column=1, sticky="w")
  175. update_status()
  176. entry_dir.bind("<KeyRelease>", lambda e: update_status())
  177. if not verify_password():
  178.     root.withdraw()
  179.     messagebox.showwarning("提示", "验证失败,程序即将退出")
  180.     sys.exit(0)
  181. root.deiconify()
  182. root.mainloop()
复制代码

下载地址

https://www.alipan.com/s/w2eqoL2fZbw

https://1818667434.share.123865.com/123pan/UX6hjv-xOFId

© 版权声明

相关文章