Advertisement
Zadyk

Forensic.py

Jan 16th, 2025
10
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | Cybersecurity | 0 0
  1. import os
  2. import hashlib
  3. from PIL import Image
  4. import exifread
  5. import cv2
  6. import numpy as np
  7.  
  8. def is_image_file(file_path):
  9. valid_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.gif']
  10. _, ext = os.path.splitext(file_path)
  11. return ext.lower() in valid_extensions
  12.  
  13. def extraire_metadonnees(image_path):
  14. """
  15. Extrait les métadonnées EXIF d'une image.
  16. """
  17. try:
  18. with open(image_path, 'rb') as f:
  19. tags = exifread.process_file(f, details=False)
  20. if tags:
  21. print("\n=== Métadonnées EXIF ===")
  22. for tag in tags:
  23. print(f"{tag}: {tags[tag]}")
  24. else:
  25. print("\n[Avertissement] Aucune métadonnée EXIF trouvée.")
  26. except Exception as e:
  27. print(f"[Erreur] Impossible d'extraire les métadonnées EXIF: {e}")
  28.  
  29. def calculer_hash(image_path):
  30. """
  31. Calcule le hash MD5 et SHA256 d'une image pour vérifier son intégrité.
  32. """
  33. try:
  34. hash_md5 = hashlib.md5()
  35. hash_sha256 = hashlib.sha256()
  36. with open(image_path, 'rb') as f:
  37. for chunk in iter(lambda: f.read(4096), b""):
  38. hash_md5.update(chunk)
  39. hash_sha256.update(chunk)
  40. print("\n=== Hash de l'Image ===")
  41. print(f"MD5: {hash_md5.hexdigest()}")
  42. print(f"SHA256: {hash_sha256.hexdigest()}")
  43. except Exception as e:
  44. print(f"[Erreur] Impossible de calculer le hash: {e}")
  45.  
  46. def analyse_basique(image_path):
  47. """
  48. Réalise une analyse basique pour détecter des anomalies ou manipulations.
  49. """
  50. try:
  51. # Charger l'image en niveaux de gris
  52. image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
  53. if image is None:
  54. print("[Erreur] OpenCV n'a pas pu charger l'image. Vérifiez que le chemin est correct et que le format est pris en charge.")
  55. return
  56.  
  57. # Appliquer une détection de bord
  58. edges = cv2.Canny(image, 100, 200)
  59.  
  60. # Calculer le pourcentage de pixels avec des bords
  61. edge_pixels = np.sum(edges > 0)
  62. total_pixels = edges.size
  63. edge_ratio = (edge_pixels / total_pixels) * 100
  64.  
  65. print("\n=== Analyse Basique de l'Image ===")
  66. print(f"Ratio de pixels avec des bords détectés: {edge_ratio:.2f}%")
  67.  
  68. # Interprétation simple
  69. if edge_ratio < 5:
  70. print("[Info] L'image semble avoir peu de détails. Possible manipulation ou image de basse qualité.")
  71. elif 5 <= edge_ratio < 20:
  72. print("[Info] L'image a un niveau de détail moyen.")
  73. else:
  74. print("[Info] L'image est riche en détails. Peu de chances de manipulation évidente.")
  75.  
  76. except Exception as e:
  77. print(f"[Erreur] Erreur lors de l'analyse de l'image: {e}")
  78.  
  79. def afficher_menu():
  80. print("\n===== Outil Forensique d'Analyse de Photos =====")
  81. print("1) Extraire les métadonnées EXIF")
  82. print("2) Calculer le hash de l'image")
  83. print("3) Analyse basique de l'image")
  84. print("4) Exécuter toutes les analyses")
  85. print("5) Quitter")
  86.  
  87. def main():
  88. print("Bienvenue dans l'Outil Forensique d'Analyse de Photos.")
  89. image_path = input("Entrez le chemin de l'image à analyser: ").strip()
  90.  
  91. if not os.path.isfile(image_path):
  92. print("[Erreur] Le fichier spécifié n'existe pas.")
  93. return
  94.  
  95. if not is_image_file(image_path):
  96. print("[Erreur] Le fichier spécifié n'est pas un format d'image pris en charge.")
  97. return
  98.  
  99. while True:
  100. afficher_menu()
  101. choix = input("Choisissez une option [1-5]: ").strip()
  102.  
  103. if choix == "1":
  104. extraire_metadonnees(image_path)
  105. elif choix == "2":
  106. calculer_hash(image_path)
  107. elif choix == "3":
  108. analyse_basique(image_path)
  109. elif choix == "4":
  110. extraire_metadonnees(image_path)
  111. calculer_hash(image_path)
  112. analyse_basique(image_path)
  113. elif choix == "5":
  114. print("Merci d'avoir utilisé l'outil forensique. Au revoir!")
  115. break
  116. else:
  117. print("[Erreur] Choix invalide. Veuillez réessayer.")
  118.  
  119. if __name__ == "__main__":
  120. main()
  121.  
Tags: forensic
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement