from flask import Flask, request, jsonify import hashlib import itertools app = Flask(__name__) # Simuler une base de données en mémoire resolved_hashes = { "5d41402abc4b2a76b9719d911017c592": "hello", # Exemple de hash déjà résolu "098f6bcd4621d373cade4e832627b4f6": "test" } @app.route("/bruteforce", methods=["POST"]) def bruteforce(): """ Endpoint pour bruteforcer un hash MD5. Reçoit un hash MD5 via un payload JSON et retourne la chaîne brute correspondante. """ # Vérifier si le payload contient un hash data = request.json if not data or "hash" not in data: return jsonify({ "status": "fail", "data": None, "errors": { "message": "Invalid payload. Please provide a valid hash." } }), 400 target_hash = data["hash"] # Vérifier si le hash existe déjà dans la base if target_hash in resolved_hashes: return jsonify({ "status": "success", "data": { "hash": target_hash, "original": resolved_hashes[target_hash] }, "errors": None }), 200 # Logique de bruteforce charset = "abcdefghijklmnopqrstuvwxyz0123456789" for length in range(1, 8): # Limite la longueur des combinaisons pour les performances for guess in itertools.product(charset, repeat=length): guess_str = ''.join(guess) if hashlib.md5(guess_str.encode()).hexdigest() == target_hash: # Ajouter le résultat dans la "base" resolved_hashes[target_hash] = guess_str return jsonify({ "status": "success", "data": { "hash": target_hash, "original": guess_str }, "errors": None }), 200 # Si aucune correspondance n'est trouvée return jsonify({ "status": "fail", "data": None, "errors": { "message": "No match found for the provided hash." } }), 404 @app.route("/resolved", methods=["GET"]) def get_resolved_hashes(): """ Endpoint pour récupérer tous les hash résolus. """ return jsonify({ "status": "success", "data": list(resolved_hashes.items()), # Convertir en liste de tuples [(hash, original), ...] "errors": None }), 200 @app.route("/resolved/", methods=["GET"]) def get_resolved_hash(hash_value): """ Endpoint pour récupérer un hash spécifique. """ if hash_value in resolved_hashes: return jsonify({ "status": "success", "data": { "hash": hash_value, "original": resolved_hashes[hash_value] }, "errors": None }), 200 else: return jsonify({ "status": "fail", "data": None, "errors": { "message": f"No resolved entry found for hash: {hash_value}" } }), 404 if __name__ == "__main__": app.run(host="0.0.0.0", port=5000)