Brute Force MD5 en Delphi, c'est possible ;)

Brute Force MD5 en Delphi, c'est possible ;) - Delphi/Pascal - Programmation

Marsh Posté le 15-07-2004 à 18:27:28    

Bonjours,
 
Tout d'abord, comme vous devez le savoir, Le MD5 est irréversible,
Il est calculé de façon à ce que on ne puisse le décrypter.
 
Une seule solution nous reste, le Brute Force.
Celui-ci consiste à tester tous les caractères possibles, en les codant bien entendu.  
 
Donc la comparaison est simple :
 
Si MD5(StrBruteForce) = ChaineCryptée,  
 
Alors on connais le pass ;)
 
Voila pour ceux qui ne connaissaient pas ou qui avais des doutes.
 
Donc j'ai réussi à crée un petit brute force MD5,
 
le programme est apparement finie, mais je pensse qu'il peut être optimiser, si quelq'un d'entre vous sais comment le faire, j'accepte volontier vos méthodes.
 
Voici la source en question :
 

Code :
  1. {
  2.       Brute Force MD5 V 1.0
  3.       J'ai essayer de Commenter ce Code du maximum que j'ai pu,
  4.       J'accepte volontier des corections car je maître en aucun cas
  5.       le Delphi, et je demande que d'apprendre et enrichir mes connaissances.
  6.       Si vous savez comment Optimizer ce source, ou bien m'apporter quelques
  7.       Conseil, tous serons les bienvenue.
  8.       Par exemple j'ai appris récemment que inc(var) est mieux que var := var+1
  9.       J'accepte toutes vos remarques.
  10.       Merci à vous, ainsi que le magnifique forum :
  11.       http://forum.hardware.fr/
  12.       Consultez :
  13.       http://forum.hardware.fr/hardwaref [...] tm#t797462
  14.       Pour d'avantages de renseignements.
  15. }
  16. unit main;
  17. interface
  18. uses
  19.   Windows, Messages, SysUtils, Forms, Controls, Classes, ComCtrls,
  20.   StdCtrls, md5, Math;
  21. type
  22.   TFmain = class(TForm)
  23.     edPassCrypte: TEdit; {Edit ou l'on met le pass crypté}
  24.     btnChercher: TButton;{Le bouton pour chercher ;)}
  25.     bonpass: TMemo;      {Le Memo sur lequel on rajoute le pass trouvé}
  26.     Longeur_Max: TEdit;  {La longeur maximal du mot ex : 4 pour gfD4}
  27.     ProgressBar: TProgressBar; {La barre de progression}
  28.     lblPossibilite: TLabel;    {Affiche par exemple 10 / 5156 Nb Possibilités}
  29.     lblPourcentage: TLabel;
  30.     lblNb_Sec: TLabel;    {Affiche le pourcentage actuel : 50%}
  31.     procedure btnChercherClick(Sender: TObject);
  32.   private
  33.     { Déclarations privées }
  34.     procedure BruteForce(S, PassCrypte : String);
  35.   public
  36.     { Déclarations publiques }
  37.   end;
  38. const
  39.   {Liste des caractères à tester}
  40.   CHAR : String = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  41. var
  42.   Fmain : TFmain;
  43.   Liste : TStringList; {Liste Virtuel dans laquel les combinaisons se fond}
  44.   NbPossibilite : Extended; {Le nombre de possibilités calculées }
  45.   Possibilite : Integer = 0; {La position actuel de la possibilité}
  46.   PassCrypte : String;
  47.   LastTime : cardinal = 0;
  48.   LastPossibilite : cardinal = 0;
  49. implementation
  50. {$R *.dfm}
  51. {-=-=-=-=-=-=-=-=-=-=- PROCEDURE DE BRUTE FORCE =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  52. procedure TFmain.BruteForce(S, PassCrypte : String);
  53. var
  54. i : integer;
  55. begin
  56.   {Affin de ne pas surcharger la mémoire, j'efface la liste si elle fais plus
  57.   de 50 lignes}
  58.   if Liste.Count > 50 then Liste.Clear;
  59.   Liste.Add(S);
  60.   ProgressBar.Position := (Possibilite*100) div Trunc(NbPossibilite) ;
  61.   lblPourcentage.Caption := Format('Pourcentage %d %%', [ProgressBar.Position]);
  62.   {Ici, j'affiche le nombre de possibilités ainsi que la position actuel}
  63.   lblPossibilite.Caption := Format('Possibilitées : %d / %g', [Possibilite, NbPossibilite]);
  64.   edPassCrypte.Text := S;
  65.   inc(Possibilite); {A chaque boucle j'incrémente}
  66.   if (GetTickCount-LastTime)>1000 then
  67.   begin
  68.     lblNb_Sec.Caption := Format('%d calculs/seconde', [Round(1000*(Possibilite-LastPossibilite)/(GetTickCount-LastTime)) ]);
  69.     LastTime := GetTickCount;
  70.     LastPossibilite := Possibilite;
  71.   end;
  72.   {On crypte la chaien S et si elle est = au pass entré, alors,
  73.   On le rajoute au Memo.}
  74.   if (C_MD5(S) = PassCrypte) then
  75.     bonpass.Lines.Add(Format('Password = %s %sCrypté = %s', [S, #13+#10,C_MD5(S)]));
  76.   {Si la longeur actuel est < que la longeur des caractère,
  77.   Alors on relance cette même procédure avec un caractère de plus,
  78.   PS : Si je met un While ca ne serait pas mieux ?}
  79.   if length(S) < StrToInt(Longeur_Max.Text) then
  80.   for i:=1 to length(CHAR) do BruteForce(S + CHAR[i], PassCrypte);
  81.   Application.ProcessMessages;
  82. end;
  83. {-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  84. {-=-=-=-=-=-=-=-=-=-=-=-=-= BOUTON RECHERCHER =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  85. procedure TFmain.btnChercherClick(Sender: TObject);
  86. var
  87. I : integer;
  88. begin
  89. if btnChercher.Caption = 'Chercher' then
  90. begin
  91.   Liste := TStringList.Create; {je crée ma liste virtuelle}
  92.   NbPossibilite := 0;          {Cette ligne est utile ?}
  93.   {ici, je calcul le nombre de possibilitées}
  94.   for I:=1 to StrToInt(Longeur_Max.Text) do
  95.     NbPossibilite := NbPossibilite + Power(Length(CHAR), I);
  96.   btnChercher.Caption := 'Stop';
  97.   try
  98.     PassCrypte := edPassCrypte.Text;
  99.     BruteForce('', PassCrypte); {je lance le brute force}
  100.   finally
  101.     Liste.Free; {A la fin du brute force je libère la liste.}
  102.   end;
  103. end else
  104. begin
  105.   btnChercher.Caption := 'Chercher';
  106. end;
  107. end;
  108. {-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  109. end.


 
Je vous remercie d'avance pour vos précieux conseils.
 
 
Je rappel que cette source est la à titre informatif, et n'a aucun but
Précis.
 
Source disponible à cette adresse :
 
http://delphiprojets.free.fr/temp/BruteForce%20MD5.zip


Message édité par Amokers le 16-07-2004 à 23:39:05

---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 15-07-2004 à 18:27:28   

Reply

Marsh Posté le 15-07-2004 à 18:50:31    

Salut,
j'ai eu à faire un exposé sur les fonctions de hachage, il y a 2 ans, j'avais alors fait un prog en C pour essayer de craquer en brute force le MD5 et estimer le temps nécéssaire. Je pense qu'il répond à certaines de tes questions.
 
J'avais aussi vérifier certaines pseudo-collision découvertes par un américain du nom de Dobertin, qui font que si on modifie un tout petit peu les conditions initiales de l'algorithme, on peut arriver à créer 2 fichiers qui donneront le meme "digest" MD5. Ce qui fait que le MD5 a un peu perdu la cote par rapport à ses concurrents (TIGRE ou SHA).
 
Voila mon rapport si ca t'interesse, pdf et programme avec source. Tu pourras estimer le temps nécéssaire (tu vas rire)
http://olivkta.free.fr/esiea/crypt [...] achage.zip
 
Dedans, j'ai marqué le temps nécéssaire sur ma bécanne (Athlon 800). Si tu utilise le prog, sache qu'il faut le faire tourner pendant pas mal de temps pour avoir une estimation  pas trop folklorique.
 
Sinon, pour ton erreur d'execution, l'entier qu'il te donne n'est-il pas trop grand pour etre stocké sur un integer, lors de ta conversion pour la progress bar ? Si, 1 int, c'est 4 octets, ca compte jusqu'à 4Go et pas plus.
Mais déjà, n'est il pas trop grand pour etre stocké sur un extended ? (je ne connais pas la taille des extended).

Reply

Marsh Posté le 15-07-2004 à 21:07:17    

Merci je vais voir ;)


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 15-07-2004 à 23:03:36    

Amokers a écrit :


Il est calculé de façon à ce que on ne puisse le décrypter.


 
C'est pas tout à fait ça.  
C'est plutôt que ce n'est pas un cryptage, et donc c'est normal qu'on ne puisse pas le décrypter.
 
Sinon un commentaire sur ton code : pour des questions de performances il vaut mieux utiliser la fonction Format plutôt que de faire des concaténations de chaînes (+) et des conversions avec IntToStr et compagnie.


Message édité par antp le 15-07-2004 à 23:04:54

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 00:21:08    

pour gagner pas mal en vitesse tu devais enlever l'affichage et tous les appels a la vcl de ta fonction BruteForce, et la sortir te TFmain aussi.
si il te faut vraiment un affichage, utilise GetTickCount pour rafraichir maximun toutes les secondes par exemple.

Reply

Marsh Posté le 16-07-2004 à 00:26:33    

5041 op. / minutes, soit 236 heures
 
je trouve ça "peu". je m'attendais à quelques années au bas mot. le sha 128 ou + doit être bien plus performant


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 16-07-2004 à 00:59:52    

oups j'avais pas lu ça :  

Citation :


L’ estimation se porte sur 2^32 opérations au lieu de 2^128 car, déjà, on obtient une
durée très longue. La durée qui serait requise pour les 2^128 opérations est 2^96 fois plus
longue !


Message édité par jagstang le 16-07-2004 à 01:00:43

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 16-07-2004 à 10:03:32    

gligli a écrit :

et tous les appels a la vcl de ta fonction BruteForce, et la sortir te TFmain aussi.


 
pourquoi ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 11:19:27    

La VCL c'est tout sauf les fonctions de Windows (unités "windows" et "shellapi", en gros)
Donc je ne vois pas trop pourquoi on devrait se passer de la VCL :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 11:33:28    

heu excuse moi antp, j'avais mal lu l'aide ;)
 
Pour le pb de Format c'est résolu merci ;)


Message édité par Amokers le 16-07-2004 à 23:41:09

---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 16-07-2004 à 11:33:28   

Reply

Marsh Posté le 16-07-2004 à 12:13:49    

Amokers a écrit :


 
lblPossibilite.Caption := Format('Possibilitées : %s', [IntToStr(Possibilite)]);
 
Mais ca reviens au même ;)


 
J'ai pas dit qu'il fallait le faire n'importe comment aussi :o
 
lblPossibilite.Caption := Format('Possibilitées : %d', [Possibilite]);
 
Regarde l'aide de "Format" :o
 
IntToStr fait l'équivalent d'un Format. Donc si t'as deux IntToStr mis ensemble avec un "+" et encore une autre chaînes... je te laisse faire le calcul ;)
 

Amokers a écrit :


Car je sèche sur le Extended je peut pas metre autre chose car c pour le MD5 :/


 
Format avec un %g ... il suffit de lire l'aide :p
 
PS: pour des grands nombres entiers t'as aussi Int64, là c'est 19-20 chiffres que tu as :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 12:14:43    

Je vous remercie pour votre aide,
Vous me motiver en m'aidant, et je vous en suis infiniement reconnaissant.
 
 
Actuelement, il reste :
 
Voir pour une optimisation maximal du code source ;)
 
J' attend donc vos consseils bien sur :)
 
je veux bien enlevé l'affichage de la vcl, mais comment je c'est ce qui lui appartiens ? ensuite comment l'enlevé, tu as des exemple ?
 
Et comment la sortir de TFmain ?
 
 
Merci de votre aide.


Message édité par Amokers le 16-07-2004 à 23:43:01

---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 16-07-2004 à 13:25:54    

ANTP Je kiff trop ta signature ;)
 
Tu as trop raison ;)
 
Ca fais déja 2 voiture que je télécharge et sur emule ca ram en plus !
 
Et puis parfois il manque des pièce du style sur la première ca à zapper 5 bits de pneu donc c cho a rouler !


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 16-07-2004 à 13:36:56    

pour les appels a la vcl, ce que je voulait dire c'est enlever tout ce qui est maj de l'affichage et autres ePassCrypte.Text et utiliser des variables
 
bon alors avec GetTickCount ca devrait donner quelquechose comme ce:
 

Code :
  1. var
  2.   LastTime: cardinal = 0;
  3. ...
  4. ...
  5.   procedure TFmain.BruteForce(S : String);
  6.   var
  7.    i : integer;
  8.   begin
  9.     {Affin de ne pas surcharger la mémoire, j'efface la liste si elle fais plus
  10.     de 50 lignes}
  11.     if Liste.Count > 50 then Liste.Clear;
  12.       Liste.Add(S);
  13.  
  14.     if (GetTickCount-LastTime)>1000 then // 1 seconde
  15.  begin
  16.   {Ici, j'affiche le nombre de possibilités ainsi que la position actuel}
  17.   lblPossibilite.Caption := Format('Possibilitées : %d / %g',
  18.   [Possibilite, NbPossibilite]);
  19.   inc(Possibilite); {A chaque boucle j'incrémente}
  20.   Application.ProcessMessages; {Apparememment cela libère je c pas trop quoi :/}
  21.   {Ces deux Lignes, GROS bug si on brute force sur + de 5 caracère
  22.   Aidez moi svp pour ici :/ }
  23.   ProgressBar.Position := (Possibilite*100) div StrToInt(FloatToStr(NbPossibilite));
  24.   lblPourcentage.Caption := IntToStr(Possibilite*100 div StrToInt(FloatToStr(NbPossibilite)));
  25.   LastTime:=GetTickCount;
  26.  end;
  27.  
  28.  
  29.     {On crypte la chaien S et si elle est = au pass entré, alors,
  30.     On le rajoute au Memo.}
  31.     if (C_MD5(S) = edPassCrypte.Text) then
  32.         bonpass.Lines.Add(Format('Password = %s %sCrypté = %s', [S, #13+#10,C_MD5(S)]));
  33.  
  34.     {Si la longeur actuel est < que la longeur des caractère,
  35.       Alors on relance cette même procédure avec un caractère de plus,
  36.    
  37.     PS : Si je met un While ca ne serait pas mieux ?}
  38.     if length(S) < StrToInt(Longeur_Max.Text) then
  39.       for i:=1 to length(CHAR) do BruteForce(S + CHAR[i]);
  40.  
  41.   end;


Message édité par gligli le 16-07-2004 à 13:38:05
Reply

Marsh Posté le 16-07-2004 à 14:24:06    

La VCL c'est pas juste l'affichage, ce sont toutes les fonctions de Borland en fait :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 17:16:32    

non, c'est juste ce qui touche à l'affichage et aux composants graphiques
(Visual Components Library)


Message édité par gligli le 16-07-2004 à 17:25:34
Reply

Marsh Posté le 16-07-2004 à 17:52:54    

Ouais, juste, je me suis embrouillé dans les fichiers d'aide, et dans mon souvenir toutes ces fonctions faisaient partie de la VCL (je savais bien que ça s'appellait Visual Comp. Lib., mais il me semblait que malgré ça il n'y avait pas que des trucs visuels :o)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 17:57:15    

heu en fait j'ai rien dit, j'ai mis :
 
ProgressBar.Position := Trunc(Posbar);
  lblPourcentage.Caption := Format('Pourcentage : %d %%', [Trunc(Posbar)]);
 
 
Et ca marche nikel ;)


Message édité par Amokers le 16-07-2004 à 23:44:03

---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 16-07-2004 à 18:04:56    

    ProgressBar.Position := (Possibilite*100) div StrToInt(FloatToStr(NbPossibilite));
     lblPourcentage.Caption := IntToStr(Possibilite*100 div StrToInt(FloatToStr(NbPossibilite)));  
 
->
 
     ProgressBar.Position := (Possibilite*100) div Trunc(NbPossibilite); // plus simple de tronquer le nombre que de passer par une chaîne :p
     lblPourcentage.Caption := IntToStr(ProgressBar.Position); // pas besoin de faire 2x le calcul


Message édité par antp le 16-07-2004 à 18:07:11

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 19:50:20    

je te remerci antp, j'ai mis comme tu as écris, cf le premier post, mais je ne pige plus quand utiliser la fonction Format(), tu peut me précisez dans quel cas l'utiliser stp ?
 
merci
 
PS : Tu pense que je peus faire comment pour calculer le nombre de calcul par secondes ?
 
merci d'avance.


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 16-07-2004 à 19:53:36    

Format c'est à utiliser dès que tu as plus d'un "+" ou que tu dois faire plus que convertir un numérique en chaîne.
Si tu mélanges chaînes et nombres, ou que tu dois assembler deux chaînes séparées par des espaces par exemple, tu as intérêt à utiliser Format en général.
À la limite tu peux même l'utiliser juste pour les concaténations simples et les conversions simples, dans la majorité des cas elle est plus performantes.
 
Pour le nombre de calculs par seconde, je ne sais pas trop là comme ça quelle serait la meilleure méthode.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2004 à 20:07:37    

Merci j'ai retenue la lecon ;)
 
Mais c'est vrai que je ne vois pas du tout comment calculer le nombres d'opérations par secondes


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 16-07-2004 à 20:31:16    

tu peux par exemple utiliser mon if , qui est exécuté toutes les secondes.
il te suffit de sauvegarder la valeur de Possibilite, comme ca une petite soustraction te donne le le nombre de possibilités calculées pour la dernière seconde. Quelquechose comme ca:  
 

Code :
  1. var
  2.     LastTime: cardinal = 0;
  3.     LastPossibilite: cardinal = 0;
  4.  
  5.   ...
  6.   ...
  7.  
  8.     procedure TFmain.BruteForce(S : String);
  9.     var
  10.      i : integer;
  11.     begin
  12.       {Affin de ne pas surcharger la mémoire, j'efface la liste si elle fais plus
  13.       de 50 lignes}
  14.       if Liste.Count > 50 then Liste.Clear;
  15.           Liste.Add(S);
  16.      inc(Possibilite); {A chaque boucle j'incrémente}
  17.       if (GetTickCount-LastTime)>1000 then // 1 seconde
  18.       begin
  19.      {Ici, j'affiche le nombre de possibilités ainsi que la position actuel}
  20.      lblPossibilite.Caption := Format('Possibilitées : %d / %g',
  21.      [Possibilite, NbPossibilite]);
  22.      {Ces deux Lignes, GROS bug si on brute force sur + de 5 caracère
  23.      Aidez moi svp pour ici :/ }
  24.      ProgressBar.Position := (Possibilite*100) div StrToInt(FloatToStr(NbPossibilite));
  25.      lblPourcentage.Caption := IntToStr(Possibilite*100 div StrToInt(FloatToStr(NbPossibilite)));
  26.    
  27.     lblPouet.Caption:=IntToStr(Possibilite-LastPossibilite)+' calculs/seconde';
  28.      LastTime:=GetTickCount;
  29.      LastPossibilite:=Possibilite;
  30.   Application.ProcessMessages; {Apparememment cela libère je c pas trop quoi :/}
  31.     end;
  32.    
  33.    
  34.       {On crypte la chaien S et si elle est = au pass entré, alors,
  35.       On le rajoute au Memo.}
  36.       if (C_MD5(S) = edPassCrypte.Text) then
  37.             bonpass.Lines.Add(Format('Password = %s %sCrypté = %s', [S, #13+#10,C_MD5(S)]));
  38.    
  39.       {Si la longeur actuel est < que la longeur des caractère,
  40.           Alors on relance cette même procédure avec un caractère de plus,
  41.        
  42.       PS : Si je met un While ca ne serait pas mieux ?}
  43.       if length(S) < StrToInt(Longeur_Max.Text) then
  44.           for i:=1 to length(CHAR) do BruteForce(S + CHAR[i]);
  45.    
  46.     end;


Message édité par gligli le 16-07-2004 à 20:32:11
Reply

Marsh Posté le 16-07-2004 à 20:56:36    

Je te remerci, mais le problème c'est que une seconde c'est vraiment long :(
 
Comment je peus faire stp ?
 
Merci


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 16-07-2004 à 21:37:35    

ben réduis le temps du if (en milisecondes)
par contre remplace ca:
Possibilite-LastPossibilite
par ca:
Round(1000*(Possibilite-LastPossibilite)/(GetTickCount-LastTime))
ca permets de rendre ce calcul indépendant du temps du if (c'est une bete regle de 3)

Reply

Marsh Posté le 16-07-2004 à 23:34:39    

Merci ;)
 
J'update le source ;)
 
En fait ca marche mais ca me trouve à peu près  
4500 calculs par secondes
 
C'est normal ?
 
J'ai un processeur :  
 
AMD Althon XP 2400+
Qui tourne à 2.16 Ghz car je l'ai Overcloaker
 
Avec 1024 Mo de Ram ;
(DDR PC 2700 512) + (DDR PC 3700 512)
 
je crois que j'ai mis 166 Mhz * 12 dans le bios il me semble, car si je met 133 * 15 ou sup il reboot je ne sais pas pourquoi.
 
Enfin bref, crois tu que cela soit normal qu'il fasse 4500 Calculs par secondes ?
 
Tu peus tester chez toi pour voir stp ?
 
La source ce trouve ici :
 
http://delphiprojets.free.fr/temp/BruteForce%20MD5.zip
 
Voila :)


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 17-07-2004 à 00:31:32    

Alucinant !!!!!
 
J'ai enlevé :
  //lblPossibilite.Caption := Format('Possibilitées : %d / %g', [Possibilite, NbPossibilite]);
  //edPassCrypte.Text := S;
 
Et il tourne a 50000 pass par minutes ;)
 
C'est mieux non ;)
 
Bien sur on vois rien mais bon ca va plus vite et si ca trouve ca l'affiche ;)
 
Il me reste plus qu'a calculer le temps total pour toutes les combinaisons ;)


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 17-07-2004 à 00:39:21    

Si à chaque passage tu modifies l'affichage, c'est sûr que ça ralentit :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-07-2004 à 01:15:52    

Ben oui je sais mais tu as une solution ?


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 17-07-2004 à 11:21:06    

tu rafraichis une fois par 1000 passages.


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 04:21:18    

Les techniques evoquées ici sont un peu dépassées qd mm
il y a d'autre techniques bien plus rapides :
 
on peut par exemple calculer a l'avance tout les hash md5 et les placer dans un fichier (en se limitant par exemple a a-z 0-9 sur 8 caracteres)
 
le resultats tient sur qq dizaines de go genre 47.6go pour lexemple donné si dessus
par aprés avec un algo de hash correct on peut facilement trouve le pass dapres son hash
 
avec un bon prog on peut facilement cracker 150pass/jour
il pourrait etre egalement possible de faire resider c fameuses tables de hash chez plusieurs utlisateurs et de faire des calculs en // (systeme distribué)
 
bon tout ceci ne demolit pas le md5 car il y a pas mal de softs rajoutant des infos supplementaires au pass (salt) et qui ne permettent pas dutiliser cette technique
 
 
bon voila jespere que jme ferai pas ban pour avoir poster ca sachant que je nait donné aucun lien ni aucun code source c'est juste pour expliquer une technique

Reply

Marsh Posté le 20-07-2004 à 08:56:01    

la technique de stocker les hash est intéressante en effet. mais j'aimerais bien que tu m'expliques comment tu arrives à 47.6 Go.


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 09:45:31    

Non je ne pensse pas que tu te fasse ban pour si peu ;)
 
Vu que tu participe au forum et que tu aide, et puis si le md5 aurais du être cassé il aurais été cassé depuis bien longtemps ;) et je ne pensse pas que ce sois un newbie comme moi qui vais le casser ;)


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 20-07-2004 à 09:53:40    

Faudra qu'on mexplique pourquoi vous parlez de cassez un algo de hashing. Y a rien à casser là-dedans.

Reply

Marsh Posté le 20-07-2004 à 09:55:18    

casser est un bien grand mot pour un bête brute force en effet


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 20-07-2004 à 09:59:32    

Moi je pensais plutôt au fait que comme c'est pas réversible, y aura rien à caser. Si un type hash l'intégralité de Notre-Dame de Paris en md5, ca lui donnera exactement le même résultat qu'un mot de 128 bits maximum.

Reply

Marsh Posté le 20-07-2004 à 10:09:52    

gizmo a écrit :

Faudra qu'on mexplique pourquoi vous parlez de cassez un algo de hashing. Y a rien à casser là-dedans.


 
De la même manière, je ne vois pas l'intérêt de stocker dans un fichier le combinaisons 'calculées' :??: il suffit pas d'incrémenter une zone mémoire de 128 bits ?

Reply

Marsh Posté le 20-07-2004 à 10:37:47    

antp a écrit :

De la même manière, je ne vois pas l'intérêt de stocker dans un fichier le combinaisons 'calculées' :??: il suffit pas d'incrémenter une zone mémoire de 128 bits ?


 
tu na peut etre pas tout compris a cette technique... c linverse de la fct md5 en fait, qui permet a partir dun hash de trouver le pass correspondant mais en mettant des limites (8 char, a-z,...)
 

JagStang a écrit :

la technique de stocker les hash est intéressante en effet. mais j'aimerais bien que tu m'expliques comment tu arrives à 47.6 Go.


 
effectivement si on ce contente de stocker les hash ca risque de prendre bcp plus de place que ca :
 
si on prend juste a-z par exemple :
26^1 + 26^2 + 26^3 + 26^4 + 26^5 + 26^6 + 26^7 = 8353082582
 
la taille du hash etant de 16bytes
8353082582 * 16 / 1024 / 1024 / 1024 = 124 GB....
 
bon si jai du temps jexpliquerai comment c reelement stocké

Reply

Marsh Posté le 20-07-2004 à 10:41:03    

red faction a écrit :

tu na peut etre pas tout compris a cette technique... c linverse de la fct md5 en fait, qui permet a partir dun hash de trouver le pass correspondant mais en mettant des limites (8 char, a-z,...)


 
Ha ouais, j'avais loupé un truc :D
 
Tu ne trouves pas le pass correspondant, mais un des très nombreux pass correspondant ;)


Message édité par antp le 20-07-2004 à 10:41:37
Reply

Marsh Posté le 20-07-2004 à 10:52:47    

antp a écrit :

Ha ouais, j'avais loupé un truc :D
 
Tu ne trouves pas le pass correspondant, mais un des très nombreux pass correspondant ;)


peu importe...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed