• [ يمنع ] طرح أي موضوع يحوي على كراكات أو باتشات او كيجنات من غير فحصها عبر موقع فيروس توتال [ virustotal.com ] وطرح رابط الفحص ضِمن الموضوع.

tiktoshitiktoshi is verified member.

(خبراء زيزووم)
★★ نجم المنتدى ★★
نجم الشهر
كبار الشخصيات
إنضم
14 يوليو 2014
المشاركات
4,782
مستوى التفاعل
19,390
النقاط
1,995
متصل
السلام عليكم

تجربة انشاء واجهة فحص بستخدام قاعدة بيانات اوفلاين و اولاين بمحرك فيروس توتال بستخدام مفتاح خاص


هناك نوعان من المفاتيح API: مفتاح مجاني و مفتاح مدفوع. المفتاح المجاني يوفر عدد محدود لفحص 500 ملف يوميا​

خطوات استخدام​

  1. التسجيل للحصول على مفتاح API:
    • أولاً، يجب عليك التسجيل في موقع VirusTotal (https://www.virustotal.com/) للحصول على API Key.​
    • بعد التسجيل، يمكنك الحصول على المفتاح من صفحة إعدادات حسابك​

إدخال مفتاح API لـ VirusTotal في حقل الإدخال المخصص لذلك.

فحص الملفات والتحقق منها عبر الإنترنت باستخدام VirusTotal.
عرض تفاصيل الكشف

صور للبرنامج

联想截图_20250205085100.webp



رابط فحص https://www.virustotal.com/gui/file...5OGYyMzMyNmU2ODQ3MTkzYjUwYzY6MTczODgwMjY2NQ==



رابط برنامج و سورس كود بالغة Python على واجهة PyQt6


 

التعديل الأخير:
ممكن اخي ان تشرح لنا اكثر
اى مفتاح ماذا يعني
إدخال مفتاح API لـ VirusTotal في حقل الإدخال المخصص لذلك.
 
ممكن اخي ان تشرح لنا اكثر
اى مفتاح ماذا يعني
إدخال مفتاح API لـ VirusTotal في حقل الإدخال المخصص لذلك.
هناك نوعان من المفاتيح API: مفتاح مجاني و مفتاح مدفوع. المفتاح المجاني يوفر عدد محدود لفحص 500 ملف يوميا

خطوات استخدام​

  1. التسجيل للحصول على مفتاح API:
    • أولاً، يجب عليك التسجيل في موقع VirusTotal (https://www.virustotal.com/) للحصول على API Key.
    • بعد التسجيل، يمكنك الحصول على المفتاح من صفحة إعدادات حسابك
 
هناك نوعان من المفاتيح API: مفتاح مجاني و مفتاح مدفوع. المفتاح المجاني يوفر عدد محدود لفحص 500 ملف يوميا

خطوات استخدام​

  1. التسجيل للحصول على مفتاح API:
    • أولاً، يجب عليك التسجيل في موقع VirusTotal (https://www.virustotal.com/) للحصول على API Key.
    • بعد التسجيل، يمكنك الحصول على المفتاح من صفحة إعدادات حسابك
الف شكرا وضحت الفكرة
 

    • بارك الله فيك اخي

    • هذي مساهمه بسيطه تحفيزيه ( لي وللجميع )
    • بلغة بايثون



وظائف البرنامج​


  • تحميل الملفات لـ VirusTotal:
    • يتيح لك البرنامج إنك تختار ملفات من جهازك وتحملها على خدمة VirusTotal عشان يتم تحليلها.

  • استرجاع تقرير التحليل:
    • البرنامج يتصل بـ API حق VirusTotal عشان يجيب لك تقرير عن تحليل الملف اللي حمّلته باستخدام معرف خاص للتحليل.

  • عرض نتائج التحليل:
    • البرنامج يعرض لك النتائج اللي طلعت من التحليل، ويبينلك إذا فيه أي تهديدات اكتشفها، وكمان تفاصيل عن الملف.

  • تاريخ التحميل:
    • يحتفظ البرنامج بسجل لكل الملفات اللي تم تحميلها، يوضح لك مسار الملف، معرف التحليل، وقت التحميل، وحالة العملية.
  • عرض السجل:
    • يتيح لك البرنامج خيار تشوف سجل التحميل في نافذة جديدة، عشان تقدر تطلع على تفاصيل كل تحميل.

  • تصدير السجل:
    • تقدر تصدر سجل التحميل كملف JSON، مما يسهل عليك حفظ المعلومات أو مشاركتها.

  • إرسال التقارير عبر الإيميل:
    • تقدر ترسل تقرير تحليل الملف عبر البريد الإلكتروني، عشان تقدر تشارك النتائج بسهولة

  • واجهة مستخدم رسومية:
    • البرنامج يستخدم مكتبة tkinter عشان يسوي لك واجهة مستخدم سهلة وبسيطة، تخلي التفاعل مع البرنامج سهل.

  • الناتج​

  • تحليلات الملفات: نتائج تحليل الملفات اللي حمّلتها.
  • تاريخ التحميل: سجل يوضح لك كل عمليات التحميل مع معلومات تفصيلية عن كل وحدة.
  • رسائل تأكيد: يعطيك إشعارات إذا نجح التحميل أو صار فيه خطأ.

الكود لمن يرغب بالتطوير :

Python:
import requests
import tkinter as tk
from tkinter import filedialog, messagebox, scrolledtext, simpledialog
import json
import smtplib
from email.mime.text import MIMEText
from datetime import datetime

# إعدادات API
API_KEY = 'YOUR_API_KEY'  # استبدل بمفتاح API الخاص بك
upload_url = 'https://www.virustotal.com/api/v3/files'
report_url = 'https://www.virustotal.com/api/v3/analyses/'

class VirusTotalApp:
    def __init__(self, master):
        self.master = master
        self.master.title("VirusTotal File Uploader")
        self.master.geometry("600x450")

        self.upload_button = tk.Button(master, text="Upload Files", command=self.upload_files)
        self.upload_button.pack(pady=10)

        self.history_button = tk.Button(master, text="Show History", command=self.show_history)
        self.history_button.pack(pady=5)

        self.export_button = tk.Button(master, text="Export History", command=self.export_history)
        self.export_button.pack(pady=5)

        self.email_button = tk.Button(master, text="Send Report via Email", command=self.send_report_via_email)
        self.email_button.pack(pady=5)

        self.result_text = scrolledtext.ScrolledText(master, width=70, height=15)
        self.result_text.pack(pady=10)

        self.history = []
        self.wait_time = 15  # الفترة الزمنية الافتراضية لاسترجاع التقرير

    def upload_files(self):
        file_paths = filedialog.askopenfilenames(title="Select Files to Upload")
        if file_paths:
            for file_path in file_paths:
                analysis_id = self.upload_to_virustotal(file_path)
                if analysis_id:
                    self.result_text.insert(tk.END, f'File uploaded: {file_path}\nAnalysis ID: {analysis_id}\n')
                    self.master.after(self.wait_time * 1000, lambda id=analysis_id: self.get_report(id))  # تحويل الثواني إلى ميلي ثانية

    def upload_to_virustotal(self, file_path):
        try:
            with open(file_path, 'rb') as file:
                response = requests.post(
                    upload_url,
                    headers={'x-apikey': API_KEY},
                    files={'file': file}
                )

            if response.status_code == 200:
                analysis_id = response.json()['data']['id']
                self.history.append({
                    'file_path': file_path,
                    'analysis_id': analysis_id,
                    'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                    'status': 'uploaded'
                })
                return analysis_id
            else:
                messagebox.showerror("Error", f"Failed to upload file. Status code: {response.status_code}\nError: {response.json()}")
                return None
        except Exception as e:
            messagebox.showerror("Error", f"An error occurred while uploading the file: {e}")
            return None

    def get_report(self, analysis_id):
        try:
            response = requests.get(
                report_url + analysis_id,
                headers={'x-apikey': API_KEY}
            )

            if response.status_code == 200:
                report = response.json()
                self.result_text.insert(tk.END, "Report received:\n")
                self.result_text.insert(tk.END, json.dumps(report, indent=2) + "\n\n")
                messagebox.showinfo("Info", "Report is ready! You can send it via email.")
            else:
                messagebox.showerror("Error", f"Failed to retrieve report. Status code: {response.status_code}\nError: {response.json()}")
        except Exception as e:
            messagebox.showerror("Error", f"An error occurred while retrieving the report: {e}")

    def show_history(self):
        history_window = tk.Toplevel(self.master)
        history_window.title("Upload History")
        history_window.geometry("500x300")
        
        history_text = scrolledtext.ScrolledText(history_window, width=60, height=15)
        history_text.pack(pady=10)

        if self.history:
            for entry in self.history:
                history_text.insert(tk.END, f"File: {entry['file_path']}\nAnalysis ID: {entry['analysis_id']}\nTime: {entry['timestamp']}\nStatus: {entry['status']}\n\n")
        else:
            history_text.insert(tk.END, "No upload history found.\n")

    def export_history(self):
        if not self.history:
            messagebox.showwarning("Warning", "No history to export.")
            return

        export_path = filedialog.asksaveasfilename(defaultextension=".json", title="Save History as JSON")
        if export_path:
            with open(export_path, 'w') as f:
                json.dump(self.history, f, indent=2)
            messagebox.showinfo("Info", f"History exported successfully to {export_path}!")

    def send_report_via_email(self):
        email_address = simpledialog.askstring("Input", "Enter your email address:")
        if not email_address:
            messagebox.showwarning("Warning", "You must enter an email address.")
            return
        
        if not self.history:
            messagebox.showwarning("Warning", "No reports to send.")
            return

        report_content = ""
        for entry in self.history:
            report_content += f"File: {entry['file_path']}\nAnalysis ID: {entry['analysis_id']}\nTime: {entry['timestamp']}\nStatus: {entry['status']}\n\n"
        report_content += "End of Report\n"

        self.send_email(email_address, "VirusTotal Report", report_content)

    def send_email(self, to_email, subject, body):
        try:
            # إعداد البريد الإلكتروني
            smtp_server = 'smtp.gmail.com'  # مثال باستخدام خادم Gmail
            smtp_port = 587
            sender_email = 'YOUR_EMAIL@gmail.com'  # استبدل بهذا بعنوان بريدك الإلكتروني
            sender_password = 'YOUR_EMAIL_PASSWORD'  # استبدله بكلمة مرور بريدك الإلكتروني

            with smtplib.SMTP(smtp_server, smtp_port) as server:
                server.starttls()
                server.login(sender_email, sender_password)
                msg = MIMEText(body)
                msg['Subject'] = subject
                msg['From'] = sender_email
                msg['To'] = to_email
                server.sendmail(sender_email, to_email, msg.as_string())
                
            messagebox.showinfo("Success", "Report sent successfully via email!")
        except Exception as e:
            messagebox.showerror("Error", f"Failed to send email: {e}")

if __name__ == "__main__":
    root = tk.Tk()
    app = VirusTotalApp(root)
    root.mainloop()
 

    • بارك الله فيك اخي

    • هذي مساهمه بسيطه تحفيزيه ( لي وللجميع )
    • بلغة بايثون



وظائف البرنامج​


  • تحميل الملفات لـ VirusTotal:
    • يتيح لك البرنامج إنك تختار ملفات من جهازك وتحملها على خدمة VirusTotal عشان يتم تحليلها.

  • استرجاع تقرير التحليل:
    • البرنامج يتصل بـ API حق VirusTotal عشان يجيب لك تقرير عن تحليل الملف اللي حمّلته باستخدام معرف خاص للتحليل.

  • عرض نتائج التحليل:
    • البرنامج يعرض لك النتائج اللي طلعت من التحليل، ويبينلك إذا فيه أي تهديدات اكتشفها، وكمان تفاصيل عن الملف.

  • تاريخ التحميل:
    • يحتفظ البرنامج بسجل لكل الملفات اللي تم تحميلها، يوضح لك مسار الملف، معرف التحليل، وقت التحميل، وحالة العملية.
  • عرض السجل:
    • يتيح لك البرنامج خيار تشوف سجل التحميل في نافذة جديدة، عشان تقدر تطلع على تفاصيل كل تحميل.

  • تصدير السجل:
    • تقدر تصدر سجل التحميل كملف JSON، مما يسهل عليك حفظ المعلومات أو مشاركتها.

  • إرسال التقارير عبر الإيميل:
    • تقدر ترسل تقرير تحليل الملف عبر البريد الإلكتروني، عشان تقدر تشارك النتائج بسهولة

  • واجهة مستخدم رسومية:
    • البرنامج يستخدم مكتبة tkinter عشان يسوي لك واجهة مستخدم سهلة وبسيطة، تخلي التفاعل مع البرنامج سهل.

  • الناتج​

  • تحليلات الملفات: نتائج تحليل الملفات اللي حمّلتها.
  • تاريخ التحميل: سجل يوضح لك كل عمليات التحميل مع معلومات تفصيلية عن كل وحدة.
  • رسائل تأكيد: يعطيك إشعارات إذا نجح التحميل أو صار فيه خطأ.

الكود لمن يرغب بالتطوير :

Python:
import requests
import tkinter as tk
from tkinter import filedialog, messagebox, scrolledtext, simpledialog
import json
import smtplib
from email.mime.text import MIMEText
from datetime import datetime

# إعدادات API
API_KEY = 'YOUR_API_KEY'  # استبدل بمفتاح API الخاص بك
upload_url = 'https://www.virustotal.com/api/v3/files'
report_url = 'https://www.virustotal.com/api/v3/analyses/'

class VirusTotalApp:
    def __init__(self, master):
        self.master = master
        self.master.title("VirusTotal File Uploader")
        self.master.geometry("600x450")

        self.upload_button = tk.Button(master, text="Upload Files", command=self.upload_files)
        self.upload_button.pack(pady=10)

        self.history_button = tk.Button(master, text="Show History", command=self.show_history)
        self.history_button.pack(pady=5)

        self.export_button = tk.Button(master, text="Export History", command=self.export_history)
        self.export_button.pack(pady=5)

        self.email_button = tk.Button(master, text="Send Report via Email", command=self.send_report_via_email)
        self.email_button.pack(pady=5)

        self.result_text = scrolledtext.ScrolledText(master, width=70, height=15)
        self.result_text.pack(pady=10)

        self.history = []
        self.wait_time = 15  # الفترة الزمنية الافتراضية لاسترجاع التقرير

    def upload_files(self):
        file_paths = filedialog.askopenfilenames(title="Select Files to Upload")
        if file_paths:
            for file_path in file_paths:
                analysis_id = self.upload_to_virustotal(file_path)
                if analysis_id:
                    self.result_text.insert(tk.END, f'File uploaded: {file_path}\nAnalysis ID: {analysis_id}\n')
                    self.master.after(self.wait_time * 1000, lambda id=analysis_id: self.get_report(id))  # تحويل الثواني إلى ميلي ثانية

    def upload_to_virustotal(self, file_path):
        try:
            with open(file_path, 'rb') as file:
                response = requests.post(
                    upload_url,
                    headers={'x-apikey': API_KEY},
                    files={'file': file}
                )

            if response.status_code == 200:
                analysis_id = response.json()['data']['id']
                self.history.append({
                    'file_path': file_path,
                    'analysis_id': analysis_id,
                    'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                    'status': 'uploaded'
                })
                return analysis_id
            else:
                messagebox.showerror("Error", f"Failed to upload file. Status code: {response.status_code}\nError: {response.json()}")
                return None
        except Exception as e:
            messagebox.showerror("Error", f"An error occurred while uploading the file: {e}")
            return None

    def get_report(self, analysis_id):
        try:
            response = requests.get(
                report_url + analysis_id,
                headers={'x-apikey': API_KEY}
            )

            if response.status_code == 200:
                report = response.json()
                self.result_text.insert(tk.END, "Report received:\n")
                self.result_text.insert(tk.END, json.dumps(report, indent=2) + "\n\n")
                messagebox.showinfo("Info", "Report is ready! You can send it via email.")
            else:
                messagebox.showerror("Error", f"Failed to retrieve report. Status code: {response.status_code}\nError: {response.json()}")
        except Exception as e:
            messagebox.showerror("Error", f"An error occurred while retrieving the report: {e}")

    def show_history(self):
        history_window = tk.Toplevel(self.master)
        history_window.title("Upload History")
        history_window.geometry("500x300")
       
        history_text = scrolledtext.ScrolledText(history_window, width=60, height=15)
        history_text.pack(pady=10)

        if self.history:
            for entry in self.history:
                history_text.insert(tk.END, f"File: {entry['file_path']}\nAnalysis ID: {entry['analysis_id']}\nTime: {entry['timestamp']}\nStatus: {entry['status']}\n\n")
        else:
            history_text.insert(tk.END, "No upload history found.\n")

    def export_history(self):
        if not self.history:
            messagebox.showwarning("Warning", "No history to export.")
            return

        export_path = filedialog.asksaveasfilename(defaultextension=".json", title="Save History as JSON")
        if export_path:
            with open(export_path, 'w') as f:
                json.dump(self.history, f, indent=2)
            messagebox.showinfo("Info", f"History exported successfully to {export_path}!")

    def send_report_via_email(self):
        email_address = simpledialog.askstring("Input", "Enter your email address:")
        if not email_address:
            messagebox.showwarning("Warning", "You must enter an email address.")
            return
       
        if not self.history:
            messagebox.showwarning("Warning", "No reports to send.")
            return

        report_content = ""
        for entry in self.history:
            report_content += f"File: {entry['file_path']}\nAnalysis ID: {entry['analysis_id']}\nTime: {entry['timestamp']}\nStatus: {entry['status']}\n\n"
        report_content += "End of Report\n"

        self.send_email(email_address, "VirusTotal Report", report_content)

    def send_email(self, to_email, subject, body):
        try:
            # إعداد البريد الإلكتروني
            smtp_server = 'smtp.gmail.com'  # مثال باستخدام خادم Gmail
            smtp_port = 587
            sender_email = 'YOUR_EMAIL@gmail.com'  # استبدل بهذا بعنوان بريدك الإلكتروني
            sender_password = 'YOUR_EMAIL_PASSWORD'  # استبدله بكلمة مرور بريدك الإلكتروني

            with smtplib.SMTP(smtp_server, smtp_port) as server:
                server.starttls()
                server.login(sender_email, sender_password)
                msg = MIMEText(body)
                msg['Subject'] = subject
                msg['From'] = sender_email
                msg['To'] = to_email
                server.sendmail(sender_email, to_email, msg.as_string())
               
            messagebox.showinfo("Success", "Report sent successfully via email!")
        except Exception as e:
            messagebox.showerror("Error", f"Failed to send email: {e}")

if __name__ == "__main__":
    root = tk.Tk()
    app = VirusTotalApp(root)
    root.mainloop()


يا عيني عليك

انا بفرح لما بشوف لغة بايثون لأنها عزيزة على قلبي وبفرح لما اشوف بمنتدانا في مبرمجين وفي منهم محاولات يعملوا برامج

لازم كل الاعضاء الي بيعرفوا اي لغة برمجة

يكون النا قسم خاص نتناقش فيه ونتباحث

لعمل برامج ولو بسيطة او متوسطة خاصة بمنتدانا. انا بصراحة استغرب من الاخوة الي بيعرفوا لغات برمجة ونايكين بالعسل ونا بيخلونا نشوف قدراتهم ومواهبهم.
 
يا عيني عليك

انا بفرح لما بشوف لغة بايثون لأنها عزيزة على قلبي وبفرح لما اشوف بمنتدانا في مبرمجين وفي منهم محاولات يعملوا برامج

لازم كل الاعضاء الي بيعرفوا اي لغة برمجة

يكون النا قسم خاص نتناقش فيه ونتباحث

لعمل برامج ولو بسيطة او متوسطة خاصة بمنتدانا. انا بصراحة استغرب من الاخوة الي بيعرفوا لغات برمجة ونايكين بالعسل ونا بيخلونا نشوف قدراتهم ومواهبهم.
هههه لا افهم في برمجة انا استخدمت chatgpt
 
يا عيني عليك

انا بفرح لما بشوف لغة بايثون لأنها عزيزة على قلبي وبفرح لما اشوف بمنتدانا في مبرمجين وفي منهم محاولات يعملوا برامج

لازم كل الاعضاء الي بيعرفوا اي لغة برمجة

يكون النا قسم خاص نتناقش فيه ونتباحث

لعمل برامج ولو بسيطة او متوسطة خاصة بمنتدانا. انا بصراحة استغرب من الاخوة الي بيعرفوا لغات برمجة ونايكين بالعسل ونا بيخلونا نشوف قدراتهم ومواهبهم.

تسلم اخي ، الله يسعدك ويحفظك
هذا بس من ذوقك

نتمنى اخي ان شاء الله , هي وسائل التواصل اخذت الناس لكن صدقني تبقى محبة هذا المنتدى و كل المتواجدين فيه يستحقون كل خير والتنوع الحاصل من كافة البلدان العربيه جدا ً اسعدني ومن اسرار حبي لزيزووم
 
هههه ولا غنى عنك اخي الحبيب

لكن تعليقي الاخير كان لاخونا A7mdroid

الي وضع سكربت البايثون مع فريم ورك ال

تيكنتر.
تسلم اخي . تفضل رابط سكريبت
 
عودة
أعلى