Newer
Older
from flask import Flask, request, jsonify
import hashlib
import itertools
# 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
@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/<string:hash_value>", 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)