From 2b31ad7bd331813c689b2646fc19ebf0f9fd1b3f Mon Sep 17 00:00:00 2001 From: AbidiWael Date: Mon, 13 Jan 2025 11:41:58 +0100 Subject: [PATCH] feat: add /resolved endpoint to fetch resolved hashes --- backend/app.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/backend/app.py b/backend/app.py index f3cd5a6..83c35ea 100644 --- a/backend/app.py +++ b/backend/app.py @@ -4,8 +4,18 @@ 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: @@ -19,12 +29,25 @@ def bruteforce(): 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": { @@ -43,5 +66,42 @@ def bruteforce(): } }), 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) -- GitLab