From 644b3312907812e5fb8adfe2eda3f950241598b8 Mon Sep 17 00:00:00 2001 From: OusmBlueNinja <89956790+OusmBlueNinja@users.noreply.github.com> Date: Sun, 29 Dec 2024 00:38:45 -0600 Subject: [PATCH] added gui --- README.md | 2 + image.png | Bin 0 -> 32250 bytes main.py | 195 +++++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 143 insertions(+), 54 deletions(-) create mode 100644 image.png diff --git a/README.md b/README.md index 77ae231..8a886db 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ This Python script extracts the DLL dependencies of a Windows executable file and filters out DLLs that are commonly included with the operating system. +![preview](image-1.png) + ## Features - Identifies all DLLs required by a specified `.exe` file. - Filters out DLLs that are part of the standard Windows OS (e.g., `KERNEL32.dll`, `USER32.dll`). diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..bc65c84845529b1cae62f8684bb66a9746b6933b GIT binary patch literal 32250 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 223e487..09ad063 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,8 @@ import os import pefile -import sys import shutil +import tkinter as tk +from tkinter import filedialog, messagebox, ttk # Common DLLs that come with the OS OS_DLLS = { @@ -11,60 +12,146 @@ OS_DLLS = { "WININET.dll", "WS2_32.dll", "CRYPT32.dll", "OPENGL32.dll" } -def get_dll_dependencies(exe_path): - """Extract DLL dependencies from an executable file.""" - try: - pe = pefile.PE(exe_path) +class DLLExtractorApp: + def __init__(self, root): + self.root = root + self.root.title("DLL Extractor") + self.root.geometry("700x500") + self.root.minsize(700, 500) - # Check for the IMPORT_DIRECTORY entry - if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'): - dlls = [entry.dll.decode('utf-8') for entry in pe.DIRECTORY_ENTRY_IMPORT] - return dlls - else: - print("No DLL dependencies found in the executable.") - return [] - except FileNotFoundError: - print(f"File not found: {exe_path}") - return [] - except pefile.PEFormatError: - print(f"The file is not a valid PE executable: {exe_path}") - return [] - except Exception as e: - print(f"An error occurred: {e}") - return [] + # Configure Dark Mode + style = ttk.Style() + style.theme_use("clam") + style.configure("TFrame", background="#2b2b2b") + style.configure("TLabel", background="#2b2b2b", foreground="#ffffff", font=("Arial", 10)) + style.configure("TButton", background="#0078d7", foreground="#ffffff", font=("Arial", 10), borderwidth=1) + style.configure("TEntry", font=("Arial", 10), fieldbackground="#3c3c3c", foreground="#ffffff") + style.configure("TScrollbar", background="#3c3c3c", troughcolor="#3c3c3c", arrowcolor="#ffffff") + style.configure("Listbox", background="#3c3c3c", foreground="#ffffff", font=("Arial", 10)) + style.map("TButton", background=[("active", "#005499")]) + + self.exe_path = tk.StringVar() + self.dependencies = [] + + self.setup_ui() + + def setup_ui(self): + frame = ttk.Frame(self.root, padding="10") + frame.pack(fill=tk.BOTH, expand=True) + + # File Selection + file_frame = ttk.Frame(frame) + file_frame.pack(fill=tk.X, pady=10) + + ttk.Label(file_frame, text="Select EXE File:").grid(row=0, column=0, sticky="w", padx=5) + ttk.Entry(file_frame, textvariable=self.exe_path, width=60, state="readonly").grid(row=0, column=1, padx=5) + ttk.Button(file_frame, text="Browse", command=self.browse_file).grid(row=0, column=2, padx=5) + + # Dependencies List + ttk.Label(frame, text="Non-OS DLL Dependencies:").pack(anchor="w", pady=(10, 5)) + + list_frame = ttk.Frame(frame) + list_frame.pack(fill=tk.BOTH, expand=True, pady=5) + + self.dependencies_list = tk.Listbox(list_frame, height=15, selectmode=tk.SINGLE, bg="#3c3c3c", fg="#ffffff", font=("Arial", 10)) + self.dependencies_list.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=5) + + scrollbar = ttk.Scrollbar(list_frame, orient=tk.VERTICAL, command=self.dependencies_list.yview) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + self.dependencies_list.config(yscrollcommand=scrollbar.set) + + # Buttons + button_frame = ttk.Frame(frame) + button_frame.pack(fill=tk.X, pady=(10, 0)) + + ttk.Button(button_frame, text="Extract DLLs", command=self.extract_dlls).pack(side=tk.LEFT, padx=5) + ttk.Button(button_frame, text="Export DLLs", command=self.export_dlls).pack(side=tk.LEFT, padx=5) + + # Log Section + ttk.Label(frame, text="Operation Log:").pack(anchor="w", pady=(10, 5)) + + self.log = tk.Text(frame, height=6, state="disabled", bg="#3c3c3c", fg="#ffffff", font=("Arial", 10), wrap=tk.WORD) + self.log.pack(fill=tk.BOTH, expand=False, padx=5) + + def log_message(self, message): + """Log a message to the log box.""" + self.log.config(state="normal") + self.log.insert(tk.END, message + "\n") + self.log.config(state="disabled") + self.log.see(tk.END) + + def browse_file(self): + """Browse for an executable file.""" + file_path = filedialog.askopenfilename( + title="Select an Executable", + filetypes=[("Executable Files", "*.exe"), ("All Files", "*.*")] + ) + if file_path: + self.exe_path.set(file_path) + self.log_message(f"Selected EXE: {file_path}") + self.get_dll_dependencies(file_path) + + def get_dll_dependencies(self, exe_path): + """Extract DLL dependencies from the selected executable.""" + self.dependencies = [] + self.dependencies_list.delete(0, tk.END) + try: + pe = pefile.PE(exe_path) + if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'): + all_dlls = [entry.dll.decode('utf-8') for entry in pe.DIRECTORY_ENTRY_IMPORT] + self.dependencies = [dll for dll in all_dlls if dll.upper() not in OS_DLLS] + self.log_message("Extracted DLL dependencies.") + for dll in self.dependencies: + self.dependencies_list.insert(tk.END, dll) + else: + self.log_message("No DLL dependencies found.") + except Exception as e: + messagebox.showerror("Error", f"Failed to read the executable: {e}") + self.log_message(f"Error reading executable: {e}") + + def extract_dlls(self): + """Extract and copy found DLLs to a folder.""" + if not self.dependencies: + messagebox.showwarning("Warning", "No DLL dependencies to extract.") + return + + folder = "found_dlls" + os.makedirs(folder, exist_ok=True) + copied_dlls = [] + for dll in self.dependencies: + for path in os.environ['PATH'].split(os.pathsep): + dll_path = os.path.join(path, dll) + if os.path.exists(dll_path): + shutil.copy(dll_path, os.path.join(folder, dll)) + copied_dlls.append(dll) + break + + self.log_message(f"Copied {len(copied_dlls)} DLLs to {folder}.") + messagebox.showinfo("Success", f"Copied {len(copied_dlls)} DLLs to {folder}.") + + def export_dlls(self): + """Export DLL dependencies to a file.""" + if not self.dependencies: + messagebox.showwarning("Warning", "No DLL dependencies to export.") + return + + export_file = filedialog.asksaveasfilename( + title="Export DLL List", + defaultextension=".txt", + filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")] + ) + if export_file: + try: + with open(export_file, "w") as f: + f.write("\n".join(self.dependencies)) + self.log_message(f"Exported DLL dependencies to {export_file}.") + messagebox.showinfo("Success", f"Exported DLL dependencies to {export_file}.") + except Exception as e: + messagebox.showerror("Error", f"Failed to export DLL dependencies: {e}") + self.log_message(f"Error exporting DLL dependencies: {e}") -def find_and_copy_dlls(dlls, output_folder): - """Find DLL files and copy them to the output folder.""" - os.makedirs(output_folder, exist_ok=True) - found = [] - for dll in dlls: - for path in os.environ['PATH'].split(os.pathsep): - dll_path = os.path.join(path, dll) - if os.path.exists(dll_path): - shutil.copy(dll_path, os.path.join(output_folder, dll)) - found.append(dll) - break - return found if __name__ == "__main__": - if len(sys.argv) != 2: - print("Usage: python get_dll_dependencies.py ") - else: - exe_path = sys.argv[1] - dependencies = get_dll_dependencies(exe_path) - - if dependencies: - non_os_dependencies = [dll for dll in dependencies if dll.upper() not in OS_DLLS] - print("Non-OS DLL Dependencies:") - for dll in non_os_dependencies: - print(f" {dll}") - - if non_os_dependencies: - found_dlls = find_and_copy_dlls(non_os_dependencies, "found_dlls") - print("\nCopied DLLs:") - for dll in found_dlls: - print(f" {dll}") - else: - print("No non-OS DLL dependencies found.") - else: - print("No DLL dependencies found or failed to retrieve dependencies.") + root = tk.Tk() + app = DLLExtractorApp(root) + root.mainloop()