Titre: [C++] boucle Posté par: comtezero le 21 Septembre 2005 à 19:56:40 J'inaugure ce forum par ce message pour ceux qui peuvent m'aider ,
Donc pour savoir si dans plusieurs boucles il est possible de mettre un if et comme actions a effectuer revenir au début de la boucle sans la remettre à 0. Je ne sais pas comment faire revenir au début de la boucle et si cela va la remttre à 0 , j'espere avoir été assez clair . @++++ Titre: [C++] boucle Posté par: Nox le 29 Septembre 2005 à 22:56:06 Je pense que tu dois utiliser l'instruction GOTO
Titre: [C++] boucle Posté par: Invit le 30 Septembre 2005 à 02:39:54 Ben GOTO c'est un **No Sms** peu à éviter quand même... :rolleyes: sauf cas rarissimes, y'a toujours moyen de tourner le code différement
Tu cherches à faire quoi exactement Comtezero ? Titre: [C++] boucle Posté par: comtezero le 01 Octobre 2005 à 17:06:44 Ce que j'aurais voulu faire c'est un genre de générateur de mot pour essayer de faire un brute force, pour gagner tu temps si par exemple le mot est zzzaaa ne pas aller jusqu'a le generer en entier mais tester si il y a zzz puis si **No Sms** bon passé directement au mot d'apres zzzaab sans avoir fait le mot dans les boucles.
Titre: [C++] boucle Posté par: Nox le 01 Octobre 2005 à 18:52:22 un if devrait resoudre ton probleme sinon utilise un break; pour sortir de la boucle
Titre: [C++] boucle Posté par: Invit le 02 Octobre 2005 à 16:02:21 Nan nan mais tu peux pas faire ça Comtezero, quand tu teste un mot de passe, il est testé sur l'ensemble de ses caractères, pas uniquement sur les 3 premiers par exemple (y'a qu'un certain "LanMan" qui permet ce genre de découverte mdrrr :lol:).
Tout tient en fait dans le code de la partie à bruteforcer, si les différents caractères qui composent le mot de passe sont inter-dépendants (comme dans le Js8 par exemple...) ce n'est pas possible, ce genre de procédé est possible quand (par exemple et pour insister un peu sur l'ami lanman-cro$oft hihi) tu passes au programme de vérification non seulement le mot de passe à vérifier mais également la longueur du mot de passe par exemple, ce qui fait qu'en passant une longueur de mot de passe de 1, on trouve la première lettre qu'on stocke dans le "bon" mot de passe en cours de génération, puis on passe une longueur de 2 avec la première lettre qu'on a trouvé précédement dont on est sur qu'elle est bonne etc. Ca fonctionne aussi avec des brute-forcer comme l'ami Jack nest-ce pas, lorsqu'il BF un hash MD5 par exemple, en fait il s'agit d'attaques par diffing, à savoir on génère des hash plus ou moins aléatoires que l'on compare avec celui que l'on cherche à trouver. Plutot que de chercher absolument le même hash rigoureusement, on se base sur la comparaison obtenue, moyennant de savants calculs dont je serais bien en peine d'expliquer quoique ce soit :/ , pour trouver plus ou moins une à une les différentes lettres du mot de passe original (les aspirines sont à gauche en sortant...). En revanche, pour tout autre type de BF (autre que les attaques qui spécifient la longueur de mot de passe et les attaques bien spécifiques contre des algorithmes mathématiques donnés, notament certains hashages) je vois tout à fait le résultat que tu attends mais ça ne se voit que dans les films :wink: Si on prends l'exemple d'un BF contre un htaccess (à ne pas faire hein, les IDS veillent au grain en général...) on est bien obligé d'envoyer le mot de passe complet au serveur pour qu'il le vérifie, et le serveur ne renvoie que "Toa tu passes" ou "Toa tu passes po", à aucun moment on ne peut savoir si la 1ère, la 4ème ou la dernière lettre du pass ont été validées... (encore heureux ;) ) nb : Certaines attaques de ce type restent possibles malgré tout selon certaines conditions contre des softs spécifiques et en local sur une machine bien entendu, en mesurant le temps de vérification du programme d'authentification, mais autant dire que c'est de la haute voltige... re-nb : euh... pour en revenir au code en C/C++ à proprement parlé, je t'en avais déjà plus ou moins causé pour le js8 notament je crois, http://www.newbiecontest.org/punbb/viewtopic.php?id=85&p=2 post #38, où tu as un exemple de code pour des boucles sans longueur fixe (il est pas exact après relecture mais à très peu de choses près, l'algo est bon), je sais pas si ça peut t'aider... Titre: [C++] boucle Posté par: comtezero le 02 Octobre 2005 à 16:13:13 En faite ce que je voulais faire c'est vu qu'en beaucoup de personne utilise des mots et non des {'78dogj==}# je voulias tester pendant que je genere X lettres au milieu de la génération pour voir si ca ressemble de prés ou loin à un mot ( pas de zzzz par exemple) et non envoyer une partie du mot pour voir si il fait partie de la base de donnée quand je parle de tester en plein milieu je reste en locale je n'envoie pas de données sur le serveur.
Citation Nox Est-ce que cela fait quand meme incrémenter les boucles ou ca ferme purement la génération sans passer au mot suivant et continue toujours à vouloir générer le meme mot ?Hier 19:52:22 un if devrait resoudre ton probleme sinon utilise un break; pour sortir de la boucle nb : { for (deuxième lettre) { for (troisième lettre) { etc... puisk on sait qu'on a que 6 lettres... code[0] = première lettre; code[1] = deuxième etc..; ma_procedure_tirée_du_js (code); } } } Voila le code que tu as mis, ce que je voudrais faire serait un truc du genre : { for (deuxième lettre) { for (troisième lettre) { for ( quatrieme lettre) If les4lettres=aaaa ou zzzz alors retour au début et incremente quand meme les preimeres lettres sinon continu etc... puisk on sait qu'on a que 6 lettres... code[0] = première lettre; code[1] = deuxième etc..; ma_procedure_tirée_du_js (code); } } } Titre: [C++] boucle Posté par: Invit le 02 Octobre 2005 à 16:29:20 Citation de: Comtezero En faite ce que je voulais faire c'est vu qu'en beaucoup de personne utilise des mots et non des {'78dogj==}# je voulias tester pendant que je genere X lettres au milieu de la génération pour voir si ca ressemble de prés ou loin à un mot ( pas de zzzz par exemple) et non envoyer une partie du mot pour voir si il fait partie de la base de donnée quand je parle de tester en plein milieu je reste en locale je n'envoie pas de données sur le serveur. Oui oui, j'avais bien compris, mais ça n'empeche que le programme qui vérifie le mot de passe te dira pas si celui que tu lui file ressemble de près ou de loin, y te dira pas "match à 47%", y dira juste "oui" ou "non", donc comment savoir ce qui est bon ou pas dans ton mot de passe ;)Titre: [C++] boucle Posté par: Flodelarab le 06 Novembre 2005 à 14:15:11 Interessant sujet.
pour JS8 moi j'aurais voulu faire des boucles de boucles mais **No Sms** possible. (car je ne ve pas 26*6 opérations mais 26^6 opérations :-) ) Maintenant 2 reponses: 1 Le C++ ne sait pas ce qu'est une boucle 2 Ce que tu dis est possible avec un dico 1 Le C++ initialise une variable, définit une butée, et fait une (ou plusieurs) action(s) (en general incrementation) En brut c comme si tu ecrivais: @debut i=0 ...code... if (butée atteinte) jump fin i++ jump @debut @fin partant de la, tout est permis a l'interieure de la boucle. Pas de reinitialisation ou truc comme ça. C++ n'a pas conscience de la repetition. Le truc le moins propre possible est de modifier i. genre i=butée+1 pour finir pseudo-naturellement la boucle a la fin du traitement Mais tout le monde aura compris qu'un while et preferable dans ce genre de traitement ou le nombre d'operations est inconnu. 2 avec un dico tu récupere tous les mots a 6 lettres et tu les testent dans la moulinette. Tu inverses le procédé utilisé par les autres (par moi en tous cas) qui consiste a sortir les 20000 mots et a voir rapidement tous ceux qui ne veulent rien dire :-) Titre: [C++] boucle Posté par: comtezero le 06 Novembre 2005 à 14:23:53 le c++ ne sait pas faire de boucle :!:
Moi j'en ai imbriqués 6 les une dans les autres les goto ca sert a rien. Titre: [C++] boucle Posté par: Invit le 06 Novembre 2005 à 19:22:51 Citation de: Flodelarab pour JS8 moi j'aurais voulu faire des boucles de boucles mais **No Sms** possible. (car je ne ve pas 26*6 opérations mais 26^6 opérations :-) ) C'est le cas, 6 boucles imbriquées de 26 passages ça fait bien 26^6 traitements au final ;)Citation 1 Le C++ ne sait pas ce qu'est une boucle Le C++ connait for(;;), "for" est une instruction de bouclage donc C++ connait les boucles, manquerait plus que ça on serait bien emm3rdé :lol:Citation 2 Ce que tu dis est possible avec un dico Eh ouais mais encore faut-il être sûr que la solution sera dedans (ça fait référence à l'épreuve de JavaScript n°8 hein, y'a tout un débat dessus sur le forum) donc avoir un bon dictionnaire, et puis c'est à mon avis plus interressant de coder un brute-forcer où on est obligé de retranscrire l'algorithme de vérification à l'origine en JavaScript en C ou en C++, mais sur le fond c'est clair que ça va plus vite, autant tester cette méthode en amont pour peut-être gagner du temps.Citation 1 Le C++ initialise une variable, définit une butée, et fait une (ou plusieurs) action(s) (en general incrementation) =) c'est beau l'algorithmie...En brut c comme si tu ecrivais: @debut i=0 ...code... if (butée atteinte) jump fin i++ jump @debut @fin En somme ça veut dire (et c'est assez faux également, faut le savoir) qu'une fois compilé, le code machine préfèrera un code du style : Code: mov cx, 0 Code: mov cx, butee Hors la plupart (pour ne pas dire la totalité) des compilateurs aujourd'hui génèrent un code dit "optimisé" et même si c'est pas toujours vrai, la première implémentation en tant que telle ne peut absolument pas être considérée comme optimisée, c'est une abstraction algorithmique qui ne prend pas en compte la réalité des cycles d'horloges et du temps d'exécution des instructions sur les processeur à base de jeu Intel. Citation tout le monde aura compris qu'un while et preferable dans ce genre de traitement ou le nombre d'operations est inconnu. Héhé, l'idée est là, mais pareil, il s'agit (à mon avis) de sortir une liste des solutions possibles sans pour autant les valider à chaque fois et pour cause, on a que deux moyens pour valider la solution; faire des requêtes directement sur le site et récuperer le cas échéant un code HTTP 200 ou 404 (j'ai essayé il n'a pas aimé), selon le langage utilisé c'est pas gagné parcequ'il faut également se cogner la communication HTTP avec les cookies etc.Ou alors passer la liste des solutions trouvées par force brute au dico et on en revient toujours à la même chose, avec un peu de chances on aura la bonne solution dans le dico mais rien de sûr. De plus, utiliser directement un dictionnaire fera gagner beaucoups de temps dans la foulée, donc l'opération de brute-forcing ne sert à rien... Pour en revenir à ça, et dans ce sens, un while ne sert pas à grand chose vu que le traitement n'est censé s'arreter que quand la liste est totalement crée... Dans la pratique on peut afficher les résultats en même temps que le programme cherche et tomber sur la solution par hasard tandis que le code tourne encore, auquel cas on peut (voire on est plus ou moins obligé même si c'est pas propre) vérifier le clavier et dès qu'une touche est enfoncée avoir un GOTO qui nous rebalance à la suite du code (ouai parcequ'un break suffira pas là dans plusieurs FOR imbriqués) ou effectivement tout passer sous condition while et rajouter une condition, mais on perd à chaque vérification de la condition énormément de temps également et si la structure est un peu plus correcte ou plutot conventionnelle, il n'en reste pas moins que c'est un peu lourd comme code au final... En somme le dictionnaire selon moi c'est à tester en premier lieu, avec un balez de dico, ptet ça passe, mais à l'origine on est pas censé savoir que le mot qu'on cherche est compréhensible, donc dans tous les cas c'est pas une très bonne solution. Les attaques par force brute étant ultra grillées dans un contexte réel, il y a très peu de cas où celà s'applique de manière réellement efficace. (J'en ai trouvé une dernièrement, sur un site vulnérable, lequel m'affiche la liste d'utilisateurs (fixe) du site mais pas les mots de passe, sachant que le site va sans doute pas bouger, ça vaut le coups de brute forcer le compte d'un utilisateur en prenant bien soin d'espacer les requêtes pour éviter de se faire détecter par les logs ou les sondes d'intrusion, et encore... il suffit que les mots de passes soient renouvelés fréquemment et/ou qu'il fasse genre un minimum de 6 caractères alphanumériques avec caractères spéciaux "*!$%?-#&" et on est pas pret de mettre la main dessus...) BufferBob. Titre: [C++] boucle Posté par: comtezero le 06 Novembre 2005 à 21:19:11 Monsieur BufferBob a parlé et coorigé certains détails. :lol:
Merci a toi de passer un peu de temps à faire ces posts. Titre: [C++] boucle Posté par: neoflo le 11 Décembre 2005 à 16:15:54 Je comprend pas trop ce que tu veux faire, mais l'instruction break; permet de sortie d'une boucle sans changer aucune variable. ça marche dans un while ou dans un for.
Sinon, ton histoire de générateur, imagine que tu doivent le faire avec des entiers: Code: int chaine; a devient b... et z devient aa pour faire ça, hi hi, il suffit d'utiliser une fonction qui transforme un caractère en code ascii.On va dire qu'elle s'appelle ascii, prend un caractère et renvoit un entier. Et ascii2 qui fait le contraire. (En fait, en C, c'est simplement int ascii(char c) { return (int) c} et le contraire pour ascii2. Pour ça, on va créer deux fonctions: int transcription_en_entier (char* chaine) qui va transformer une chaine en entier. C'est à dire que transcription_en_entier(a)= ascii(a), transcription_en_entier(ab) = ascii(a)*256+ascii(b) Une fonction char* transcription_en_caractere (int i) qui va faire le contraire Code: int transcription_en_entier (char* chaine) { Code: char* transcription_en_caractere (int atranscrire) { Code: void chaineplusplus(char* chaine) { Je ne dis pas que **No Sms** meilleur méthode, mais en tout cas, elle illustre bien une décomposition d'une fonction principale initiale assez complexe, mais dont le principe est simple en sous-fonction plus simple |