Bonjour à tous,

J'ai remarqué que pour certains challenges, un brute-force était nécessaire. Comme je suis plutôt connaisseur en JS et que je commence en python, j'ai décidé de voir comment en élaborer un dans chacun des deux. Toutefois, j'ai deux inconvénients, mais avant, voici les statistiques relevées par mes brute-force:
Brute-Force en python (exécuté sur Python Shell) -> A trouvé 14 776 336 possibilités en 2:05min, soit environ 118 210 possibilités par seconde
Toutes les données trouvées ont été insérées dans un fichier.txt (ayant maintenant une taille 90 188ko

)
Voici le code:
import os
Alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
i = 0
with open('repertoire.txt', 'a') as mon_fichier:
# ^^
for a in range(0,62):
for b in range(0,62):
for c in range(0,62):
for d in range(0,62):
Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d]
mon_fichier.write("["+Brute+"]")
i += 1
if i % 8 == 0:
mon_fichier.write("\n")
if i % 200000 == 0:
print("Donnée numéro "+str(i)+" rentrée")
mon_fichier.close()
print("Operation terminee")
print(str(i)+" données entrées")
Brute-Force en JS (exécuté en local) -> A trouvé 17 576 possibilités en 3:06min, soit environ 94 possibilités par seconde...
Toutes les données ont été montrées par innerHTML sur la page
Voici le code:
<head>
<title>Javascript Brute Force</title>
<style>
body {
background-color: black;
color: lime;
font-family: sans-serif;
font-size: 14px;
font-weight: bold;
}
</style>
<script type="text/javascript">
var centi=0
var secon=0
var minu=0
var z = 0
function chrono(){
centi++;
if (centi>9){centi=0;secon++}
if (secon>59){secon=0;minu++}
document.forsec.secc.value=" "+centi
document.forsec.seca.value=" "+secon
document.forsec.secb.value=" "+minu
compte=setTimeout('chrono()',100)
}
function rasee(){
clearTimeout(compte)
centi=0;
secon=0;
minu=0;
document.forsec.secc.value=" "+centi
document.forsec.seca.value=" "+secon
document.forsec.secb.value=" "+minu
}
var MIN_CHAR = 97;
var MAX_CHAR = 122;
var DELAY_INTERVAL = 0;
var STOP_KEY = 27;
var START_KEY = 13;
function cnext(expr)
{
var len = expr.length - 1;
if (expr.charCodeAt(len) >= MAX_CHAR && len != 0)
{
tmp = cnext(expr.substr(0,len)) + String.fromCharCode(MIN_CHAR);
return tmp;
}
if (expr.charCodeAt(len) >= MAX_CHAR && len == 0)
{
tmp = String.fromCharCode(MIN_CHAR) + expr.substr(0,len) + String.fromCharCode(MIN_CHAR);
return tmp;
}
tmp = expr.substr(0,len) + String.fromCharCode(expr.charCodeAt(len) + 1);
return tmp;
}
var test = String.fromCharCode(MIN_CHAR);
var password = document.getElementById("mdp").value;
var stopped = false;
function goo()
{
if( z == 0) { chrono(); z++;}
var c = document.getElementById('c');
test = cnext(test);
c.innerHTML = test;
if (test == document.getElementById("mdp").value || stopped)
{
clearTimeout(compte)
return;
}
setTimeout("goo()", DELAY_INTERVAL);
}
function checkStop(ev)
{
if (ev.keyCode == STOP_KEY)
stopped = true;
if (ev.keyCode == START_KEY)
{
stopped = false;
setTimeout('goo()', 0);
}
}
</script>
<script>
var centi=0
var secon=0
var minu=0
function chrono(){
centi++;
if (centi>9){centi=0;secon++}
if (secon>59){secon=0;minu++}
document.forsec.secc.value=" "+centi
document.forsec.seca.value=" "+secon
document.forsec.secb.value=" "+minu
compte=setTimeout('chrono()',100)
}
function rasee(){
clearTimeout(compte)
centi=0;
secon=0;
minu=0;
document.forsec.secc.value=" "+centi
document.forsec.seca.value=" "+secon
document.forsec.secb.value=" "+minu
}
</script>
</head>
<body onload="setTimeout('goo()', 0);" onkeypress='checkStop(event)' >
<br /><br /><br />
<input type="password" name="ep1" size="20" value="zzz" id="mdp" />
<div id="c"></div>
<br />
<form name="forsec">
<input type="text" size="3" name="secb"> minute(s)
<input type="text" size="3" name="seca"> secondes
<input type="text" size="3" name="secc"> dixièmes
</form>
</body>
Donc, voilà, je me retrouve avec 2 possibilités, dont une à éliminer si possible. En effet, le python est environ 1244 fois plus rapide. Je ne sais pas si je peux me servir du python pour brute-forcer et comment faire lorsqu'on tombe avec 5 caractères... Là, il n'y en avait que 4, toutefois lorsque j'ai essayé 5, au bout de 10 minutes, cela n'était même pas fini et mon ficher.txt faisait plus d'un million de ko... Donc, si je prends le python, comment pouvoir m'en servir (j'avais pensé à mettre 25M de clés par fichier.txt) et l'optimiser ?
Deuxième point, se rattachant un peu au premier... Comment faire les tests... Si j'ai une page et que je veux tester tous les mots de passe rentrés dans mon fichier.txt, comment faire ??? Je n'ai aucune idée comment appliquer les tests rentrés dans ma "base de donné.txt". J'ai entendu dire qu'il fallait le faire en localhost, mais comment faire pour garder une bonne cadence et faire un submit de la page non manuellement sans quitter la page... ?
En passant, je sais comment programmer, mais pas comment automatiser ^^'
Merci à tous
Ps. Joyeux Noel