Système d'Analyse et de Forensic Numérique 🛡️💻 (Blockchain, IP, Yara)
Ce programme Python interactif vous permet d'analyser des transactions Bitcoin et Ethereum (y compris les NFTs), de capturer des paquets réseau, d'analyser des adresses IP et de vérifier l'intégrité des fichiers avec Yara. Ce programme est conçu pour les chercheurs en cybersécurité et les utilisateurs avancés souhaitant surveiller et analyser différentes activités sur les réseaux et les blockchains.
Fonctionnalités du Programme :
- 🔐 Analyse des Transactions Bitcoin : Analyse des transactions associées à une adresse Bitcoin via la blockchain.
- 🛠️ Analyse des Transactions Ethereum (NFT inclus) : Analyse des transactions et des NFTs associés à une adresse Ethereum.
- 🌍 Analyse des Adresses IP : Examen des adresses IPv4 et IPv6 pour obtenir des informations détaillées telles que l'origine et les données RDAP.
- 📡 Capture de Paquets Réseau : Utilisation de Scapy pour capturer et analyser le trafic réseau en temps réel.
- 🛡️ Vérification des Fichiers avec Yara : Analyse de fichiers suspects avec des règles Yara personnalisées.
Code Python :
import datetime
import smtplib
from scapy.all import sniff
import threading
import matplotlib.pyplot as plt
from Crypto.Cipher import AES
import base64
import os
import json
import yara
from blockchain import blockexplorer # Nécessite l'installation de `blockchain`
from web3 import Web3 # Nécessite l'installation de `web3`
from ipwhois import IPWhois
from scapy.layers.inet import IP
from scapy.layers.inet6 import IPv6
COMM_FILE = 'com_metadata_kali.json'
AES_KEY = os.urandom(16)
AES_IV = os.urandom(16)
YARA_RULE_FILE = "yara_rules.yar"
infura_url = "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"
web3 = Web3(Web3.HTTPProvider(infura_url))
def encrypt_message_aes(message):
cipher = AES.new(AES_KEY, AES.MODE_CFB, AES_IV)
encrypted = base64.b64encode(cipher.encrypt(message.encode()))
return encrypted.decode()
def decrypt_message_aes(encrypted_message):
cipher = AES.new(AES_KEY, AES.MODE_CFB, AES_IV)
decrypted = cipher.decrypt(base64.b64decode(encrypted_message.encode()))
return decrypted.decode()
def store_metadata(type_comm, sender, receiver, timestamp, duration=None, sms_content=None):
entry = {
'timestamp': timestamp,
'type_comm': type_comm,
'sender': sender,
'receiver': receiver,
'duration': duration,
'sms_content': sms_content
}
try:
with open(COMM_FILE, 'r') as file:
data = json.load(file)
except FileNotFoundError:
data = []
data.append(entry)
with open(COMM_FILE, 'w') as file:
json.dump(data, file, indent=4)
def list_metadata():
try:
with open(COMM_FILE, 'r') as file):
data = json.load(file)
if not data:
print("Aucune communication enregistrée.")
else:
for entry in data:
print(f"{entry['timestamp']} - {entry['type_comm']} - De: {entry['sender']} à {entry['receiver']} - Durée: {entry.get('duration', 'N/A')} - Message: {entry.get('sms_content', 'N/A')}")
except FileNotFoundError:
print("Le fichier de métadonnées est introuvable.")
def check_blockchain_transactions_btc(address):
transactions = blockexplorer.get_address(address).transactions
for tx in transactions:
print(f"ID Transaction: {tx.hash}")
for output in tx.outputs:
print(f"Adresse de sortie: {output.address}, Valeur: {output.value / 100000000} BTC")
def check_blockchain_transactions_eth(address):
balance = web3.eth.get_balance(Web3.toChecksumAddress(address))
print(f"Solde de l'adresse: {web3.fromWei(balance, 'ether')} ETH")
def analyze_ip(ip_address):
obj = IPWhois(ip_address)
result = obj.lookup_rdap(depth=1)
print(f"Infos sur l'adresse IP : {json.dumps(result, indent=4)}")
def capture_traffic(interface="eth0", duration=30):
packets = sniff(iface=interface, timeout=duration)
for packet in packets:
if IP in packet:
print(f"Paquet IP: {packet[IP].src} -> {packet[IP].dst}")
elif IPv6 in packet:
print(f"Paquet IPv6: {packet[IPv6].src} -> {packet[IPv6].dst}")
def verify_file_with_yara(filepath):
rules = yara.load(YARA_RULE_FILE)
matches = rules.match(filepath)
if matches:
print(f"Match Yara trouvé dans le fichier {filepath}: {matches}")
else:
print(f"Aucun match trouvé pour {filepath}.")
if __name__ == "__main__":
while True:
choix = input("\n1. Transactions Bitcoin\n2. Transactions Ethereum\n3. Adresses IP\n4. Capture Réseau\n5. Fichiers Yara\n6. Quitter\n")
if choix == "1":
address = input("Entrez l'adresse Bitcoin : ")
check_blockchain_transactions_btc(address)
elif choix == "2":
address = input("Entrez l'adresse Ethereum : ")
check_blockchain_transactions_eth(address)
elif choix == "3":
ip_address = input("Entrez l'adresse IP à analyser : ")
analyze_ip(ip_address)
elif choix == "4":
interface = input("Interface réseau (par défaut eth0) : ") or "eth0"
duration = int(input("Durée en secondes : "))
capture_traffic(interface, duration)
elif choix == "5":
filepath = input("Chemin du fichier à analyser : ")
verify_file_with_yara(filepath)
elif choix == "6":
break
Manuel d'Utilisation
🚀 Lancer le Programme :
Pour exécuter le programme sur Kali Linux, ouvrez un terminal et lancez :
python analyse_forensic_kali.py
⚙️ Options Disponibles :
- 1 : Analyse des transactions Bitcoin. Saisissez une adresse Bitcoin pour récupérer les transactions associées.
- 2 : Analyse des transactions Ethereum (y compris NFTs). Saisissez une adresse Ethereum pour analyser les transactions et NFTs.
- 3 : Analyse d'adresses IP pour obtenir des informations détaillées.
- 4 : Capture de paquets réseau avec une durée et interface réseau personnalisée.
- 5 : Analyse d'un fichier avec des règles Yara pour vérifier sa sécurité.
- 6 : Quitter le programme.
⚠️ Attention Éthique :
Ce programme est à utiliser uniquement dans des cadres légaux et éthiques. Il est strictement interdit d'utiliser ces outils pour surveiller, intercepter ou analyser des systèmes sans autorisation explicite. Toute infraction peut entraîner des poursuites judiciaires et des sanctions sévères. Utilisez ce programme exclusivement à des fins éducatives et sur des systèmes dont vous avez le contrôle ou l'autorisation. 🛡️