דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • 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 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מתכנת חובבמ מתכנת חובב

    @צדיק-וטוב-לו-0 איך אני יכול לעזור בנושא?
    מציאות שיש פיתרון שקיים אצל eset ויש תוכנות שלא משתמשות בו
    תשאל אותם למה

    צ מנותק
    צ מנותק
    צדיק וטוב לו 0
    כתב נערך לאחרונה על ידי
    #24

    @מתכנת-חובב
    לא באתי בטענות...
    התעניינתי, אולי יש לכך הסבר מוכר.

    תגובה 1 תגובה אחרונה
    1
    • מתכנת חובבמ מתכנת חובב

      רק להבהיר משהו
      אין אפשרות עקרונית לחסום גישה לקבצים במשתמש מנהל (אפשר להסתיר אבל זה לא שווה כלום)
      בווינדוס האופציה היחידה היא לשנות הרשאות אלא שזה ניתן לשינוי בקלות במשתמש מנהל וגם רלוונטי רק למחיצות בפורמט 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
                        • חוקי הפורום
                        • פופולרי
                        • לא נפתר
                        • משתמשים
                        • חיפוש גוגל בפורום
                        • צור קשר