-
parsing de code C
Bonjour,
Je vous écris pour avoir quelques bonnes références concernant un projet sur le fuzzing.
Je me suis documenté et j'ai lu des techniques intéressantes consistent notamment à collecter les contraintes sur les embranchements ( if ... else ...) pour tester une plus grande partie du code.
Il me faut un parser et un solveur de contraintes. Je suis débutant mais plutôt motivé alors si vous connaissez de bonnes addresses ou que vous-même pouvez me donner conseil, je vous remercie. Je cherche des cours, des tuto, des logiciels pratiques.
Le langage est donc le C.
Je voudrais avoir la certitude de me lancer avec de bons atouts.
Merci à vous
-
J'ai rien compris à ton message :aie:
Mais pour le titre, "parsing de code C", je te conseille de regarder dans la direction de flex et bison.
En espérant que mon message te sera utile.
-
Salut,
Je vais préciser un peu plus mon post. :roll:
En fait, je voudrais faire du fuzzing, c'est à dire envoyer des données imprévues et non-valides à un programme. Le programme plante s'il ne sécurise pas assez ses entrées.
Je voudrais que mes données imprévues me permettent de tester au mieux le programme.
Dans plusieurs articles traitant de techniques ( DART, SAGE, ...) j'ai vu qu'il est intéressant d'envoyer des données qui font travailler un maximum de code ( maximiser la couverture de code ).
Eux font de l'analyse dynamique grâce à valgrind.
1) Ils partent d'une entrée valide.
2) Ils récupèrent tous les branchements ( if ... else ..) qui ont testé de près ou de loin l'entrée
3) Enfin ils créent de nouvelles entrées imprévues qui auront un autre cheminement dans le programme. (suivant les branchements repérées ) grâce à un solveur de contraintes (STP par exemple)
Je souhaiterais reprendre cette idée mais en faisant de l'analyse statique.
Puis en résolvant les contraintes du code, je peux faire en sorte que mon fuzzer envoient des entrées qui testeront un maximum du code du programme cible.
Il se trouve que j'ai le code source de ce programme mais je ne m'y connais pas en parsing ni resolveur de contraintes. Je vous demandais conseil sur une methode simple, des logiciels très pratiques, des manuels magiques, même si il s'agit d'un raccourci honteux.
Je souhaite simplement mettre en oeuvre, même partiellement cette idée de fuzzing.
Merci à vous
-
Le seul logiciel que je connais qui fasse ça le fait à partir de l'assembleur :s (oRange).
En attendant que quelqu'un puisse te proposer une meilleure solution, tu peux toujours mettre des breakpoints un peu partout dans ton programme, et modifier à la main les valeurs en mémoire en lançant l'exécution en mode Debug. C'est assez simple à faire sous Eclipse, mais j'ignore si on peut écrire un script pour automatiser tout ça.
J'imagine que c'est également possible sous tout logiciel utilisant gdb (tu peux aussi le faire en ligne de commande avec gdb, mais adieu santé mentale).
-
Hmm j'aime ma tête. J'en connais un aussi mais il n'est plus actualisé depuis longtemps.
Il commence par f...