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 :

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 :

⚠️ 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. 🛡️