דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. מחשבים וטכנולוגיה
  3. עזרה הדדית - מחשבים וטכנולוגיה
  4. להורדה | ShieldBox Pro - הכירו את נועל הקבצים החדש!!!!!!

להורדה | ShieldBox Pro - הכירו את נועל הקבצים החדש!!!!!!

מתוזמן נעוץ נעול הועבר עזרה הדדית - מחשבים וטכנולוגיה
34 פוסטים 11 כותבים 601 צפיות 13 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מתכנת חובבמ מתכנת חובב

    רק להבהיר משהו
    אין אפשרות עקרונית לחסום גישה לקבצים במשתמש מנהל (אפשר להסתיר אבל זה לא שווה כלום)
    בווינדוס האופציה היחידה היא לשנות הרשאות אלא שזה ניתן לשינוי בקלות במשתמש מנהל וגם רלוונטי רק למחיצות בפורמט NTFS
    האופציות שכן קיימות הם לקחת את כל עץ התיקיות והקבצים ולהמיר אותו לפורמט שרק תוכנה מסויימת תדע לקרוא והיא תפתח את זה רק בהינתן הסיסמה (ואם יש אבטחה נורמלית אז זה גם יצפין את הקבצים) וזה בעצם מה שארכיון מוצפן (ואפשר גם דחוס) עושה והבעיה בזה היא שלוקח הרבה זמן לדחוס וגם הפענוח אפילו פר קובץ עלול לקחת זמן מה גם שלהוסיף קבצים לארכיון כזה זה לא אפשרי
    התוכנה שהעולתה פה נראה שהיא גם מצפינה וגם מסתירה שזאת צורת חסימה מעולה אבל תיקח הרבה זמן וגם יש בה חוסר יעילות קיצוני (טוענת את כל הקובץ לראם - זה יכשל בקבצים גדולים מאוד, תהליך ההצפנה רץ על ה thread הראשי של הממשק מה שאומר שהיא תקפא בעת ההצפנה, במקרה שבו יסגרו את התוכנה או שהמחשב יכבה או כל תקלה שהיא שתקרה בתוכנה בעת כתיבת הקובץ המוצפן - המידע יעלם)

    י מנותק
    י מנותק
    יהודי זה הכי
    כתב נערך לאחרונה על ידי
    #25

    @מתכנת-חובב אני אבהיר מה ציתי
    אני צרך תוכנה נורמלית שכשאני נותן לו נתיב הוא משנה לי הרשאות גישה כמו בחלון הזה
    e00fae23-122d-4338-8629-00a162a27fb5-image.png

    כי אין לי כוח ללכת כל פעם לתיקיה ולהתחיל לפתוח
    אני מחפש כזאת תוכנה ואשח אם מישהו יכווין אותי

    מתכנת חובבמ תגובה 1 תגובה אחרונה
    0
    • י יהודי זה הכי

      @מתכנת-חובב אני אבהיר מה ציתי
      אני צרך תוכנה נורמלית שכשאני נותן לו נתיב הוא משנה לי הרשאות גישה כמו בחלון הזה
      e00fae23-122d-4338-8629-00a162a27fb5-image.png

      כי אין לי כוח ללכת כל פעם לתיקיה ולהתחיל לפתוח
      אני מחפש כזאת תוכנה ואשח אם מישהו יכווין אותי

      מתכנת חובבמ מנותק
      מתכנת חובבמ מנותק
      מתכנת חובב
      מדריכים
      כתב נערך לאחרונה על ידי
      #26

      @יהודי-זה-הכי זה יעבוד לך רק במחיצות NTFS
      בכל אופן בניתי משהו עם ג'מיני (2 פרומפטים סך הכל)
      לא ממליץ להשתמש בזה אבל הנה זה כאן

      import os
      import threading
      import queue
      import customtkinter as ctk
      from tkinter import filedialog, messagebox
      import win32security
      import win32api
      import win32net
      import win32con
      import ntsecuritycon as ntc
      
      # --- הגדרות עיצוב ---
      ctk.set_appearance_mode("Dark")
      ctk.set_default_color_theme("blue")
      
      # --- מנוע הליבה (Native Win32 Security) ---
      class WinApiEngine:
          PERMISSIONS_MAP = {
              "F": ntc.GENERIC_ALL,
              "M": ntc.GENERIC_WRITE | ntc.GENERIC_READ | ntc.DELETE,
              "R": ntc.GENERIC_READ | ntc.GENERIC_EXECUTE,
              "W": ntc.GENERIC_WRITE
          }
      
          def __init__(self, update_callback):
              self.update_callback = update_callback
              self.stop_event = threading.Event()
      
          def get_sid(self, user_name):
              try:
                  sid, _, _ = win32security.LookupAccountName(None, user_name)
                  return sid
              except Exception:
                  return None
      
          def apply_permission(self, path, user_list, action, perm_char):
              try:
                  sids = [self.get_sid(u) for u in user_list if self.get_sid(u)]
                  if not sids: return False
      
                  sd = win32security.GetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION)
                  dacl = sd.GetSecurityDescriptorDacl() or win32security.ACL()
      
                  access_mask = self.PERMISSIONS_MAP.get(perm_char, ntc.GENERIC_READ)
                  inheritance = win32security.CONTAINER_INHERIT_ACE | win32security.OBJECT_INHERIT_ACE
      
                  for sid in sids:
                      if action == "grant":
                          dacl.AddAccessAllowedAceEx(win32security.ACL_REVISION, inheritance, access_mask, sid)
                      elif action == "deny":
                          dacl.AddAccessDeniedAceEx(win32security.ACL_REVISION, inheritance, access_mask, sid)
      
                  sd.SetSecurityDescriptorDacl(1, dacl, 0)
                  win32security.SetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION, sd)
                  return True
              except Exception as e:
                  # self.update_callback(f"Error on {path}: {e}") # פתח אם אתה רוצה לוג מלא על שגיאות
                  return False
      
          def process_recursive(self, root_path, user_list, action, perm_char, recursive):
              count = 0
              if self.stop_event.is_set(): return
              
              # טיפול בתיקייה הראשית
              if self.apply_permission(root_path, user_list, action, perm_char): count += 1
      
              if recursive:
                  for root, dirs, files in os.walk(root_path):
                      if self.stop_event.is_set(): break
                      for name in dirs + files:
                          if self.apply_permission(os.path.join(root, name), user_list, action, perm_char):
                              count += 1
                      
                      if count % 100 == 0:
                          self.update_callback(f"[RUNNING] Updated {count} objects...")
      
              self.update_callback(f"[COMPLETE] Finished. Total objects updated: {count}")
      
          def start(self, path, users, action, perm, recursive):
              self.stop_event.clear()
              threading.Thread(target=self.process_recursive, args=(path, users, action, perm, recursive), daemon=True).start()
      
      # --- מנוע סיווג משתמשים (User Classifier) ---
      class UserManager:
          @staticmethod
          def fetch_categorized_principals():
              """
              מחזיר מילון עם 3 מפתחות: 'humans', 'system', 'groups'.
              משתמש ב-Win32Net API כדי לנתח דגלים.
              """
              data = {
                  "humans": [],
                  "system": [],
                  "groups": []
              }
      
              # 1. שליפת משתמשים (Level 2 נותן לנו Flags ו-Privileges)
              try:
                  users, _, _ = win32net.NetUserEnum(None, 2)
                  
                  # רשימת "רעש" ידועה של משתמשים טכניים
                  technical_keywords = ["docker", "nvidia", "vmware", "wdag", "default", "guest", "support_388945a0"]
                  
                  for u in users:
                      name = u['name']
                      flags = u['flags']
                      
                      # UF_ACCOUNTDISABLE = 2. אם הביט דלוק, המשתמש מושבת.
                      is_disabled = (flags & win32con.UF_ACCOUNTDISABLE)
                      
                      # בדיקה יוריסטית: האם זה משתמש טכני?
                      is_technical = any(k in name.lower() for k in technical_keywords)
                      
                      entry = {'name': name, 'active': not is_disabled}
      
                      if is_technical or is_disabled:
                          # הולך לסיסטם אם הוא טכני או מנוטרל
                          data["system"].append(entry)
                      else:
                          # הולך לבני אדם רק אם הוא פעיל ולא טכני
                          data["humans"].append(entry)
      
              except Exception as e:
                  print(f"User Enum Error: {e}")
      
              # 2. שליפת קבוצות
              try:
                  groups, _, _ = win32net.NetLocalGroupEnum(None, 0)
                  for g in groups:
                      data["groups"].append({'name': g['name'], 'active': True})
                  
                  # Principals מיוחדים שתמיד טוב שיהיו
                  special = ["Everyone", "Authenticated Users", "SYSTEM", "Interactive"]
                  for s in special:
                      data["groups"].append({'name': s, 'active': True})
                      
              except Exception as e:
                  print(f"Group Enum Error: {e}")
      
              # מיונים
              for key in data:
                  data[key] = sorted(data[key], key=lambda x: x['name'])
                  
              return data
      
      # --- ממשק המשתמש (UI) ---
      class App(ctk.CTk):
          def __init__(self):
              super().__init__()
              self.title("Permission Master - Native & Categorized")
              self.geometry("1000x750")
              
              self.engine = WinApiEngine(self.log_message)
              self.log_queue = queue.Queue()
              
              self.all_data = {} # כאן יישמרו המשתמשים לפי קטגוריות
              self.selected_users_list = []
              self.selected_path = ctk.StringVar()
      
              self.create_layout()
              self.load_users_async()
              self.check_queue()
      
          def create_layout(self):
              # Header
              top_frame = ctk.CTkFrame(self)
              top_frame.pack(fill="x", padx=20, pady=15)
              
              self.path_entry = ctk.CTkEntry(top_frame, textvariable=self.selected_path, placeholder_text="Select target folder...", width=600)
              self.path_entry.pack(side="left", padx=10, pady=10)
              ctk.CTkButton(top_frame, text="Browse", command=self.browse_folder, width=100).pack(side="left")
      
              # Main Content Area
              content_frame = ctk.CTkFrame(self, fg_color="transparent")
              content_frame.pack(fill="both", expand=True, padx=20, pady=5)
      
              # --- Left Column: User Selector ---
              left_col = ctk.CTkFrame(content_frame, width=350)
              left_col.pack(side="left", fill="both", expand=True, padx=(0, 10))
              
              # Segmented Button for Filtering
              ctk.CTkLabel(left_col, text="Source Principals", font=("Arial", 14, "bold")).pack(pady=5)
              self.filter_seg = ctk.CTkSegmentedButton(left_col, values=["Humans", "Groups", "System/Apps"], command=self.change_filter)
              self.filter_seg.set("Humans")
              self.filter_seg.pack(pady=5, padx=10)
              
              self.scroll_users = ctk.CTkScrollableFrame(left_col)
              self.scroll_users.pack(fill="both", expand=True, padx=5, pady=5)
      
              # --- Right Column: Selected Targets ---
              right_col = ctk.CTkFrame(content_frame, width=350)
              right_col.pack(side="right", fill="both", expand=True, padx=(10, 0))
              
              header_right = ctk.CTkFrame(right_col, fg_color="transparent")
              header_right.pack(fill="x", pady=5)
              ctk.CTkLabel(header_right, text="Apply To List", font=("Arial", 14, "bold")).pack(side="left", padx=10)
              ctk.CTkButton(header_right, text="Clear", width=50, height=20, fg_color="darkred", command=self.clear_selection).pack(side="right", padx=10)
              
              self.scroll_targets = ctk.CTkScrollableFrame(right_col)
              self.scroll_targets.pack(fill="both", expand=True, padx=5, pady=5)
      
              # --- Footer: Actions ---
              footer = ctk.CTkFrame(self)
              footer.pack(fill="x", padx=20, pady=15)
              
              # Options
              opts = ctk.CTkFrame(footer, fg_color="transparent")
              opts.pack(side="left", padx=10)
              
              self.action_var = ctk.StringVar(value="grant")
              ctk.CTkRadioButton(opts, text="GRANT Permissions", variable=self.action_var, value="grant").grid(row=0, column=0, padx=10, sticky="w")
              ctk.CTkRadioButton(opts, text="DENY Permissions", variable=self.action_var, value="deny", text_color="#ff5555").grid(row=1, column=0, padx=10, sticky="w")
              
              self.perm_combo = ctk.CTkComboBox(opts, values=["F (Full Control)", "M (Modify)", "R (Read)", "W (Write)"], width=150)
              self.perm_combo.grid(row=0, column=1, padx=10)
              self.recursive_var = ctk.BooleanVar(value=True)
              ctk.CTkCheckBox(opts, text="Recursive", variable=self.recursive_var).grid(row=1, column=1, padx=10)
      
              # Big Button
              self.btn_run = ctk.CTkButton(footer, text="EXECUTE", font=("Arial", 16, "bold"), fg_color="green", height=50, command=self.start_execution)
              self.btn_run.pack(side="right", fill="x", expand=True, padx=20, pady=10)
      
              # Log
              self.log_textbox = ctk.CTkTextbox(self, height=80, state="disabled")
              self.log_textbox.pack(fill="x", padx=20, pady=(0, 15))
      
          # --- Logic ---
          def load_users_async(self):
              loading = ctk.CTkLabel(self.scroll_users, text="Loading System Principals...")
              loading.pack(pady=20)
              
              def _load():
                  data = UserManager.fetch_categorized_principals()
                  self.all_data = data
                  self.after(0, lambda: self.change_filter("Humans"))
                  
              threading.Thread(target=_load, daemon=True).start()
      
          def change_filter(self, value):
              # מנקה את התצוגה
              for widget in self.scroll_users.winfo_children():
                  widget.destroy()
                  
              # מיפוי השם בכפתור למפתח במילון הנתונים
              key_map = {"Humans": "humans", "Groups": "groups", "System/Apps": "system"}
              category_data = self.all_data.get(key_map.get(value), [])
              
              if not category_data:
                  ctk.CTkLabel(self.scroll_users, text="No items found in this category").pack(pady=10)
                  return
      
              for item in category_data:
                  name = item['name']
                  active = item['active']
                  
                  # צבע שונה למשתמשים לא פעילים (רלוונטי בעיקר בקטגוריית System)
                  color = "white" if active else "gray"
                  suffix = "" if active else " (Disabled)"
                  
                  btn = ctk.CTkButton(
                      self.scroll_users, 
                      text=f"{name}{suffix}", 
                      fg_color="transparent", 
                      border_width=1, 
                      border_color="#404040", 
                      text_color=color,
                      anchor="w",
                      command=lambda u=name: self.add_to_target(u)
                  )
                  btn.pack(fill="x", pady=2)
      
          def add_to_target(self, user):
              if user not in self.selected_users_list:
                  self.selected_users_list.append(user)
                  self.refresh_targets_ui()
      
          def remove_from_target(self, user):
              if user in self.selected_users_list:
                  self.selected_users_list.remove(user)
                  self.refresh_targets_ui()
                  
          def clear_selection(self):
              self.selected_users_list.clear()
              self.refresh_targets_ui()
      
          def refresh_targets_ui(self):
              for widget in self.scroll_targets.winfo_children():
                  widget.destroy()
              
              for user in self.selected_users_list:
                  row = ctk.CTkFrame(self.scroll_targets, fg_color="transparent")
                  row.pack(fill="x", pady=2)
                  ctk.CTkLabel(row, text=user).pack(side="left", padx=5)
                  ctk.CTkButton(row, text="X", width=30, fg_color="#aa0000", hover_color="red", command=lambda u=user: self.remove_from_target(u)).pack(side="right")
      
          def browse_folder(self):
              p = filedialog.askdirectory()
              if p: self.selected_path.set(p)
      
          def log_message(self, msg):
              self.log_queue.put(msg)
      
          def check_queue(self):
              try:
                  while True:
                      msg = self.log_queue.get_nowait()
                      self.log_textbox.configure(state="normal")
                      self.log_textbox.insert("end", msg + "\n")
                      self.log_textbox.see("end")
                      self.log_textbox.configure(state="disabled")
              except queue.Empty:
                  pass
              self.after(100, self.check_queue)
      
          def start_execution(self):
              path = self.selected_path.get()
              if not path or not self.selected_users_list:
                  messagebox.showerror("Error", "Please select path and users.")
                  return
              
              self.engine.start(path, self.selected_users_list, self.action_var.get(), self.perm_combo.get().split()[0], self.recursive_var.get())
      
      if __name__ == "__main__":
          app = App()
          app.mainloop()
      

      הוא טען שיש פה "מנוע יוריסטי" לזיהוי סוגי משתמשים כשזה סף הכל רשימה מצומצמת של מילות מפתח
      בקיצור, סתם לכיף

      צריך עזרה בשחזור מידע? ייעוץ? egozkokus1@gmail.com

      תגובה 1 תגובה אחרונה
      1
      • מגנוס קרלסןמ מגנוס קרלסן

        אני שמח להראות לכם את התוכנה שיצרתי (עם AI כמובן)

        ShieldBox Pro

        אז מה בעצם יש בתוכנה:

        ת'אמת, אין הרבה דברים.
        אבל מה שיש - זה וואוווווווווו

        אז ככה: התוכנה בעצם נועלת את הקבצים ומעלימה אותם לגמרי
        וניתן לשחזר למצב הרגיל אך ורק ע"י כניסה עם שם משתמש וסיסמה

        וכן... אין לי יותר מה להוסיף.

        התוכנה: https://drive.google.com/file/d/1s-4Nr*****vLW5Lw8muOz9_68cvckoS8i80Pr/view?usp=sharing

        להוריד כוכביות

        שימו לב: הסיסמה והשם משתמש הברירת מחדל היא admin

        וכן... אני יודע שיש עוד הרבה (מסתמא) תוכנות כאלה, רק שעד היום לא מצאתי משהו מסודר ובעברית.

        תמונות בספויילר

        da46b37d-ce5f-4a50-aa8c-43ad9c1e76a1-image.png

        f4fd5c64-486b-441a-bba3-e193db473c19-image.png

        97aea5f2-959a-4be9-8623-d5f93b9fbad4-image.png

        תנו רעיונות להוסיף לתוכנה.

        א מנותק
        א מנותק
        ארנב עם קצפת
        כתב נערך לאחרונה על ידי
        #27

        @מגנוס-קרלסן מה למעשה, אני עדיין יכול למצוא את הקבצים אם אני יודע איך קוראים להם.

        מגנוס קרלסןמ תגובה 1 תגובה אחרונה
        0
        • א ארנב עם קצפת

          @מגנוס-קרלסן מה למעשה, אני עדיין יכול למצוא את הקבצים אם אני יודע איך קוראים להם.

          מגנוס קרלסןמ מנותק
          מגנוס קרלסןמ מנותק
          מגנוס קרלסן
          כתב נערך לאחרונה על ידי
          #28

          @ארנב-עם-קצפת מז'תומרת?

          א תגובה 1 תגובה אחרונה
          0
          • מגנוס קרלסןמ מגנוס קרלסן

            @ארנב-עם-קצפת מז'תומרת?

            א מנותק
            א מנותק
            ארנב עם קצפת
            כתב נערך לאחרונה על ידי
            #29

            @מגנוס-קרלסן אין לי אפשרות לצ'אט, - ברגע אני מוצא את התיקייה שהסתרתי..

            מגנוס קרלסןמ תגובה 1 תגובה אחרונה
            0
            • א ארנב עם קצפת

              @מגנוס-קרלסן אין לי אפשרות לצ'אט, - ברגע אני מוצא את התיקייה שהסתרתי..

              מגנוס קרלסןמ מנותק
              מגנוס קרלסןמ מנותק
              מגנוס קרלסן
              כתב נערך לאחרונה על ידי מגנוס קרלסן
              #30

              @ארנב-עם-קצפת דרך הסתרת קבצי מערכת,

              א תגובה 1 תגובה אחרונה
              0
              • מגנוס קרלסןמ מגנוס קרלסן

                @ארנב-עם-קצפת דרך הסתרת קבצי מערכת,

                א מנותק
                א מנותק
                ארנב עם קצפת
                כתב נערך לאחרונה על ידי
                #31

                @מגנוס-קרלסן אה כן, אפשר גם דרך שם.

                מגנוס קרלסןמ 2 תגובות תגובה אחרונה
                0
                • א ארנב עם קצפת

                  @מגנוס-קרלסן אה כן, אפשר גם דרך שם.

                  מגנוס קרלסןמ מנותק
                  מגנוס קרלסןמ מנותק
                  מגנוס קרלסן
                  כתב נערך לאחרונה על ידי
                  #32
                  פוסט זה נמחק!
                  תגובה 1 תגובה אחרונה
                  0
                  • א ארנב עם קצפת

                    @מגנוס-קרלסן אה כן, אפשר גם דרך שם.

                    מגנוס קרלסןמ מנותק
                    מגנוס קרלסןמ מנותק
                    מגנוס קרלסן
                    כתב נערך לאחרונה על ידי
                    #33

                    @ארנב-עם-קצפת אני אנסה לתקן את זה

                    א תגובה 1 תגובה אחרונה
                    0
                    • מגנוס קרלסןמ מגנוס קרלסן

                      @ארנב-עם-קצפת אני אנסה לתקן את זה

                      א מנותק
                      א מנותק
                      ארנב עם קצפת
                      כתב נערך לאחרונה על ידי
                      #34

                      @מגנוס-קרלסן גם את האפשרות שכתבתי לך במייל?..

                      תגובה 1 תגובה אחרונה
                      1

                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • חוקי הפורום
                      • פופולרי
                      • לא נפתר
                      • משתמשים
                      • חיפוש גוגל בפורום
                      • צור קשר