FR 3019918 A1 20151016 FR 1453290 A 20140414 [01] La présente invention concerne le domaine technique du test de programmes d'ordinateur et, plus particulièrement, du test ou de l'analyse de programmes d'ordinateur ou logiciels dans leur forme binaire, c'est-à-dire une forme exécutable dans un environnement numérique. [02] Un programme d'ordinateur exécutable est constitué d'une série d'instructions dans une forme binaire destinées à être exécutées par un ou plusieurs processeurs numériques dans un environnement d'exécution également numérique afin de réaliser différents types d'opérations selon les fonctionnalités du programme. L'exécution d'un programme d'ordinateur fait intervenir différents traitements impliquant des interactions avec des ressources ou entités extérieures à l'environnement d'exécution numérique comme, par exemple, des accès à des mémoires de masse non volatiles, des échanges avec des interfaces de communication et/ou périphériques de saisie ou d'acquisition de données. Ces échanges, qui permettent au milieu extérieur d'interagir avec le programme en cours d'exécution et réciproquement, peuvent constituer autant de failles ou de fuites d'informations susceptibles d'être détournées pour perturber le fonctionnement du programme, le modifier ou encore accéder à des informations qui normalement n'auraient pas dû être accessibles. Généralement le programme d'ordinateur est conçu de manière à prévenir ces failles ou risques de fuite de sorte qu'il n'est pas possible à un utilisateur et/ou un programme malintentionnés de venir perturber l'exécution dudit programme d'ordinateur. Cependant, compte tenu de la forte augmentation de la puissance de calcul disponible à moindre coût pour les dispositifs électroniques grands publics ou de petite taille, les programmes exécutables mettent en oeuvre un très grand nombre d'instructions qui augmentent d'autant le risque de failles malgré toute l'attention apportée à leur conception. À cet égard, il doit être remarqué que l'écriture d'un programme informatique est généralement effectuée dans un langage de programmation évolué ou de haut niveau plus facilement lisible qu'un langage machine. Cette écriture en langage évolué constitue le code source qui fait ensuite l'objet d'une compilation au moyen d'un compilateur, c'est-à-dire d'un programme informatique transformant le code source en un code binaire exécutable. Cette opération de compilation peut alors engendrer des failles dans le programme exécutable à l'insu même de la ou des personnes qui auront procédé à l'élaboration du code source. [3] Afin d'analyser le comportement d'un programme exécutable et de déceler ces failles éventuelles il pourrait être envisagé de procéder à une exécution pas à pas du programme exécutable tout en observant les différentes interactions et changement d'état de l'environnement numérique d'exécution au cours de cette exécution. Cependant, les environnements numériques d'exécution ne sont pas toujours adaptés pour permettre un tel mode d'exécution. De plus, le très grand nombre d'instructions exécutées rend impossible une telle exécution pas à pas dans un délai compatible avec les besoins de développement rapide. [4] Il est donc apparu le besoin d'un procédé d'analyse d'un programme exécutable binaire qui permette d'analyser de manière aussi approfondie que possible l'exécution de ce programme exécutable binaire tout en présentant des temps de traitement compatibles avec les besoins du marché. [5] Afin d'atteindre cet objectif l'invention concerne un procédé d'analyse du fonctionnement d'un programme exécutable binaire, destiné à être mis en oeuvre dans un environnement d'exécution numérique comprenant au moins un processeur numérique, au moyen d'au moins un environnement d'émulation d'analyse comprenant un émulateur d'analyse du processeur numérique, procédé d'analyse comprenant les opérations : détermination d'au moins une portion à analyser du programme exécutable binaire, exécution en partie au moins du programme exécutable binaire dans l'environnement d'exécution numérique en enregistrant l'état, dit état de début, de l'environnement d'exécution numérique juste avant le début de l'exécution de la portion à analyser et en enregistrant séquentiellement les entrées à destination du processeur numérique et/ou mémoires et périphériques pendant l'exécution de la portion à analyser, exécution de la portion à analyser dans l'environnement d'émulation d'analyse en initialisant cet environnement à partir de l'enregistrement de l'état de début correspondant à la dite portion à analyser pour placer l'environnement d'émulation d'analyse dans un état analogue à l'état de début de l'environnement d'exécution numérique lors du commencement de l'exécution de ladite portion à analyser et en envoyant séquentiellement les entrées enregistrées à l'émulateur d'analyse au cours de l'exécution de la portion à analyser, analyse de l'exécution réalisée dans l'environnement d'émulation d'analyse. [06] Un programme exécutable, au sens de l'invention, est susceptible de mettre en oeuvre d'autres éléments logiciels (librairies, drivers, noyau du système d'exploitation) le périmètre couvert par la «portion à analyser» peut donc aller bien au-delà du logiciel ciblé en lui même. [07] Au sens de l'invention, un processeur numérique est indifféremment un processeur physique, virtuel ou émulé, adapté pour exécuter un programme exécutable binaire en effectuant les traitements du programme exécutable binaire avec des valeurs numériques. Un processeur virtuel est un processeur physique piloté par un hyperviseur tandis qu'un processeur émulé est un logiciel qui va effectuer dans un environnement logiciel les actions qu'aurait faites le processeur physique correspondant dans un environnement physique. Un processeur numérique au sens de l'invention peut comprendre un ou plusieurs coeurs ainsi qu'une ou plusieurs mémoires caches. [8] Au sens de l'invention, un environnement d'exécution numérique est un ensemble d'éléments physiques et/ou virtuels et/ou émulés, comprenant au moins un processeur numérique selon l'invention communiquant via un ou plusieurs bus avec une mémoire vive, une mémoire de masse. En fonction du type de programme et selon les besoins, l'environnement d'exécution numérique peut éventuellement comprendre d'autres composants ou périphériques tels que des périphériques d'entrées/sortie, de connexion à un réseau, de saisie, d'affichage, d'acquisition de données, d'acquisition de son, d'acquisition d'image, de commande de composants électromécaniques, de commande d'installation ou de dispositif industriel sans que cette liste ne soit ni limitative, ni exhaustive. Dans le contexte de l'invention les composants ou périphériques peuvent être indifféremment des composants physiques, virtualisés et/ou émulés. [9] L'enregistrement d'un état de l'environnement d'exécution numérique consiste à réaliser une sorte de photographie de l'environnement d'exécution numérique à un instant donné en enregistrant l'état de chacun des composants et constituants de l'environnement d'exécution numérique. [10] Au sens de l'invention, un émulateur d'analyse d'un processeur numérique est un système comprenant un programme informatique dit émulateur, éventuellement associé à un dispositif électronique spécifique, adapté pour exécuter dans un environnement logiciel un programme exécutable binaire destiné au processeur numérique correspondant en réalisant dans cet environnement logiciel les traitements ou opérations que le processeur numérique correspondant réalise dans l'environnement d'exécution numérique. Un émulateur d'analyse selon l'invention diffère d'un émulateur numérique standard en ce qu'il est adapté pour analyser et/ou enregistrer les opérations induites par l'exécution de programme exécutable à analyser. Un émulateur d'analyse peut ainsi être un émulateur numérique adapté pour permettre une exécution pas à pas du programme exécutable et/ou pour effectuer, par exemple mais non exclusivement, une analyse des flux d'informations (data-tainting), recherche d'inter-blocages entre processus, de conflits d'accès à des mémoires partagées, l'identification d'algorithmes (par exemple de chiffrement), aide à la compréhension de code (qu'il soit obscurcis ou non), ou des données d'information statistique, comme par exemple mais non exclusivement, le nombre de sauts, la liste des accès à des périphériques ou des informations de consommation de ressources (énergie, temps, composants électroniques (par exemple un module radio), etc...) [11] Dans une variante de mise en oeuvre de l'invention, l'émulateur d'analyse est un émulateur symbolique qui traite le programme exécutable binaire dans sa forme opérationnelle, dite exécutable, identique à celle mise en oeuvre par le processeur numérique dans l'environnement d'exécution numérique et qui l'exécute sous une forme symbolique. L'exécution symbolique fait intervenir une transformation de chaque instruction en une formule théorique. A cet égard, il est possible de se reporter la liste de publications figurant à la fin de la description qui explicitent les principes de l'exécution symbolique. Un émulateur symbolique est adapté pour au moins interpréter et exécuter sous une forme symbolique une partie au moins des instructions du jeu d'instructions du processeur numérique émule. Il doit être remarqué qu'un même programme exécutable met très rarement en oeuvre l'intégralité des instructions processeur numérique pour lequel il a été compilé. Un émulateur symbolique selon l'invention est de préférence adapté pour interpréter et exécuter sous une forme symbolique l'ensemble des instructions mises en oeuvre par le programme à évaluer. L'émulateur symbolique d'un processeur numérique est également appelé dans le contexte de la présente invention processeur symbolique, les deux expressions étant considérées comme équivalentes. [12] Au sens de l'invention, un environnement d'émulation d'analyse est analogue à l'environnement d'exécution numérique à la différence que chaque processeur numérique est remplacé par un émulateur d'analyse du processeur numérique correspondant. L'environnement d'émulation d'analyse comprend au moins un émulateur d'analyse, symbolique ou numérique, du processeur numérique communiquant via un ou plusieurs bus émulés avec une mémoire vive, une mémoire de masse qui sont émulées ou physiques. En fonction du type de programme et selon les besoins, l'environnement d'exécution numérique peut éventuellement comprendre d'autres composants ou périphériques tels que des périphériques d'entrées/sortie, de saisie, d'affichage, d'acquisition de données, d'acquisition de son, d'acquisition d'image, de commande de composants électromécaniques, de commande d'installation ou de dispositif industriel sans que cette liste ne soit ni limitative, ni exhaustive. Ces composants, unités ou périphériques peuvent être des composants physiques et/ou des composants émulés dans l'environnement d'émulation d'analyse. [13] Selon une forme de mise en oeuvre de l'invention, le procédé d'analyse comprend les opérations suivantes : - détermination de plusieurs portions à analyser distinctes du programme exécutable binaire, exécution en partie au moins du programme exécutable binaire dans l'environnement d'exécution numérique en enregistrant, pour chaque portion à analyser, l'état, dit état de début, de l'environnement d'exécution numérique juste avant le début de l'exécution de ladite portion à analyser et en enregistrant séquentiellement les entrées à destination du processeur numérique pendant l'exécution de ladite portion à analyser, mise en oeuvre en parallèle de plusieurs environnements d'émulation d'analyse chacun comprenant un émulateur d'analyse du processeur numérique, pour chaque portion à analyser : - sélection d'un environnement d'émulation d'analyse disponible, - exécution de la portion à analyser dans l'environnement d'émulation d'analyse disponible en initialisant cet environnement à partir de l'enregistrement de l'état de début correspondant à la dite portion à analyser pour placer l'environnement d'émulation d'analyse dans un état analogue à l'état de début de l'environnement d'exécution numérique lors du commencement de l'exécution de ladite portion à analyser et en envoyant séquentiellement les entrées enregistrées pour ladite portion à analyser à l'émulateur d'analyse au cours de l'exécution de ladite portion à analyser, - analyse de l'exécution réalisée dans l'environnement d'émulation d'analyse. [14] La mise en oeuvre de plusieurs environnements d'émulation d'analyse susceptibles de fonctionner en parallèle permet de procéder à une émulation d'analyse d'une grande partie du programme alors même que cette émulation d'analyse aurait été trop longue sur un seul système. Cet avantage est déterminant, notamment dans le cas d'une exécution ou émulation symbolique qui décuple les temps d'exécution par rapport à une exécution numérique. Par ailleurs, dans le cadre de l'exécution symbolique, les inventeurs ont eu le mérite de combiner l'exécution dans l'environnement numérique qui permet d'obtenir les états de départ ou initiaux pour chacune des portions à analyser avec une exécution en parallèle des environnements d'émulation d'analyse. Les données externes au couple processeur-mémoire provenant des périphériques qu'elles soient générées par un périphérique lui-même ou qu'elles proviennent d'évènements extérieurs à l'environnement d'exécution numérique (comme des trames réseau, des actions utilisateur, etc...) sauvegardées lors de l'exécution numérique servent à alimenter les actions du processeur d'analyse qui nécessitent cette connaissance des données externes au couple processeur-mémoire. Elles permettent également de déclencher les événements dans l'environnement d'émulation d'analyse de manière similaire à ce qui s'était passé dans l'environnement numérique, il y a donc une synchronisation des évènements dans les deux environnements. [15] Selon une variante de cette forme de mise en oeuvre le procédé d'analyse selon comprend les opérations suivantes : détermination d'une instruction ou d'un événement de début de la première portion à analyser, d'une instruction ou d'un événement de fin de la dernière portion à analyser, détermination d'un pas ou d'un mode de découpage de l'exécution du programme exécutable à analyser en une succession de portions à analyser, démarrage de l'exécution de l'ensemble du programme exécutable dans l'environnement d'exécution numérique en enregistrant l'état, dit état de début, de l'environnement d'exécution numérique juste avant le début de l'exécution de chaque portion à analyser et en enregistrant séquentiellement les entrées à destination du processeur numérique et/ou mémoires et périphériques pendant l'exécution de chaque portion à analyser, mise en oeuvre en parallèle de plusieurs environnements d'émulation d'analyse chacun comprenant un émulateur d'analyse du processeur numérique, pour chaque portion à analyser : - sélection d'un environnement d'émulation d'analyse disponible, - exécution de la portion à analyser dans l'environnement d'émulation d'analyse disponible en initialisant cet environnement à partir de l'enregistrement de l'état de début correspondant à ladite portion à analyser pour placer l'environnement d'émulation d'analyse dans un état analogue à l'état de début de l'environnement d'exécution numérique lors du commencement de l'exécution de ladite portion à analyser et en envoyant séquentiellement les entrées enregistrées pour ladite portion à analyser à l'émulateur d'analyse au cours de l'exécution de ladite portion à analyser, analyse de l'exécution réalisée dans l'environnement d'émulation d'analyse. [16] La mise en oeuvre de plusieurs environnement d'émulation d'analyse en parallèle permet d'envisager une émulation d'analyse et notamment d'une exécution symbolique d'une grande partie d'un programme exécutable et de ses dépendances sans connaissance préalable du ou des programme source ce qui n'est pas possible, dans un temps raisonnable, dans le cadre d'une exécution dans un seul environnement d'émulation d'analyse de l'intégralité du programme exécutable. Cela est un avantage substantiel conféré par l'invention lorsque l'émulation d'analyse fait intervenir une exécution symbolique. [17] Selon une caractéristique de l'invention, chaque environnement d'émulation d'analyse comprend au moins un émulateur symbolique. [18] Selon une autre caractéristique de l'invention, chaque environnement d'émulation d'analyse comprend au moins un émulateur numérique d'analyse [19] Selon l'invention, le découpage de l'exécution du programme exécutable à analyser en portions à analyser peut être réalisé selon différents critères : - nombre d'instructions exécutées, - durée d'exécution, nombre de sauts réalisés, chaque saut correspondant à une discontinuité du flux linéaire d'exécution, occurrence d'un ou plusieurs événements matériel, logiciel, interne et/ou extérieur, ou selon une combinaison de plusieurs de ces critères. [20] Selon une caractéristique de l'invention, l'environnement d'exécution numérique met en oeuvre une émulation de chaque processeur numérique gérée par un programme hyperviseur qui est adapté pour enregistrer des états de l'environnement d'exécution numérique ainsi que pour enregistrer séquentiellement les entrées à destination du processeur numérique émule et/ou mémoires et périphériques associés émules et/ou physiques. [21] Selon une caractéristique de l'invention, l'environnement d'exécution numérique met en oeuvre au moins un processeur numérique matériel ou physique comprenant au moins un hyperviseur physique et/ou des ressources physiques de virtualisation. [22] Selon une caractéristique de l'invention, il est mis en oeuvre des moyens de génération automatique des entrées à destination du processeur numérique et/ou mémoires et périphériques pendant l'exécution d'une partie au moins du programme exécutable. [23] L'invention concerne également une installation informatique comprenant : un environnement d'exécution numérique adapté pour assurer l'exécution d'au moins une portion à analyser d'un programme exécutable et pour enregistrer l'état, dit état de début, de l'environnement d'exécution numérique juste avant le début de l'exécution de la portion à analyser et pour enregistrer séquentiellement les entrées à destination du processeur numérique et/ou mémoires et périphériques associés pendant l'exécution de la portion à analyser, au moins un environnement d'émulation d'analyse qui est adapté pour exécuter sous une forme émulée une portion à analyser du programme exécutable et qui comprend : - des moyens pour initialiser l'environnement d'émulation d'analyse à partir de l'enregistrement de l'état de début de la portion à analyser, - et des moyens pour injecter séquentiellement au cours de l'exécution émulée les entrées enregistrées au cours de l'exécution de la portion à analyser dans l'environnement d'exécution numérique. [24] Selon une caractéristique de l'invention, il est mis en oeuvre plusieurs environnements d'émulation d'analyse adaptés pour fonctionner en parallèle. [25] Bien entendu, les différentes variantes, caractéristiques et formes de réalisation et/ou de mise en oeuvre de l'invention peuvent être associées les unes avec les autres selon diverses combinaisons dans la mesure où elles ne sont pas incompatibles ou exclusives les unes des autres. [26] Par ailleurs, diverses autres caractéristiques de l'invention ressortent de la description annexée effectuée en référence aux dessins qui illustrent une forme non limitative de mise en oeuvre de l'invention. La figure 1 est une vue schématique d'un environnement d'exécution numérique selon l'invention, La figure 2 est une vue schématique d'un environnement d'émulation d'analyse selon l'invention. [27] Pour être exploitable par un ordinateur ou un environnement d'exécution numérique un programme informatique doit se présenter sous la forme d'un ou plusieurs fichiers binaires comprenant une série d'instructions en code machine ou assembleur qui sont mis en oeuvre par l'environnement d'exécution numérique de manière à faire réaliser audit environnement d'exécution numérique différents traitements et opérations. L'exécution du programme informatique dans son environnement d'exécution numérique requiert généralement des interactions (entrées/sorties) entre ledit environnement et le milieu extérieur qui sont susceptibles d'affecter ou de modifier l'exécution du programme informatique. Par ailleurs, le programme informatique est susceptible d'utiliser les résultats de ses propres traitements au cours de son exécution. En fonction de ces différents paramètres tant internes qu'externes l'exécution du programme informatique est susceptible d'atteindre un grand nombre de résultats parmi lesquels certains sont souhaités tandis que d'autres sont éventuellement indésirables et peuvent par ailleurs constituer des failles de sécurité pouvant affecter le programme en lui-même ou son environnement d'exécution numérique. [28] Généralement les programmes complexes sont écrits dans des langages dits de haut niveau d'abstraction intelligible par l'homme qui font ensuite l'objet d'une compilation pour les transformer en un langage de plus bas niveau appelé langage d'assemblage ou langage machine. La compilation permet alors de transformer un code source en un programme exécutable. Pendant ou avant l'opération de compilation, il est effectué sur le code source un certain nombre de contrôles ou tests permettant d'éliminer certains risques de dysfonctionnement du programme informatique suite à de mauvaises méthodes de programmation ou à des erreurs de programmation. Cependant, au terme de la compilation le programme ou code exécutable obtenu peut toujours renfermer des failles, des risques de dysfonctionnement qui n'auront pas été identifiés dans le cadre de la compilation. [29] Afin d'identifier des erreurs ou failles subsistant au niveau du code ou programme exécutable, il est proposé dans une forme de mise en oeuvre de l'invention d'effectuer une exécution symbolique d'une partie au moins programme exécutable. L'exécution symbolique consiste à interpréter chaque instruction binaire du programme exécutable sous une forme symbolique pour analyser cette exécution et identifier des erreurs ou des failles potentielles sans connaître a priori le code source à l'origine du programme exécutable à analyser. [30] Cependant l'exécution symbolique de l'intégralité d'un programme exécutable en un seul processus continu peut induire des temps de calcul ou de traitement rédhibitoires. [31] L'invention propose donc d'exécuter symboliquement de manière individuelle une ou plusieurs portions du programme exécutable. Dans une forme préférée mais non strictement nécessaire de réalisation, l'intégralité de l'exécution du programme divisée en portions qui sont toutes contrôlées. [32] A cet effet, l'invention part du principe que lors de sa mise en oeuvre dans l'environnement d'exécution numérique pour lequel il a été conçu voire compilé, un programme exécutable induit pour des entrées données une évolution ou modification déterministe de l'environnement d'exécution numérique ou un passage par des états déterminés. Ainsi, à partir d'un état initial donné et en fonction d'entrées déterminées et connues au cours de l'exécution du programme exécutable l'environnement d'exécution numérique passe par des états qui sont connus ou déterminables aboutissant éventuellement à un état final déterminé ou déterminable. [33] L'invention propose donc d'utiliser cette propriété pour définir dans l'exécution du programme exécutable au moins une portion à analyser et de manière préférée plusieurs portions à analyser en enregistrant pour chaque portion à analyser l'état de l'environnement d'exécution numérique au début de l'exécution de la portion à analyser c'est-à-dire juste avant l'exécution de la première instruction de la portion à analyser ainsi que les entrées intervenant au cours de l'exécution de ladite portion à analyser. L'enregistrement des entrées est alors réalisé de manière séquentielle indexée temporellement et/ou en fonction des instructions de la portion à analyser. [34] A cet effet, il est mis en oeuvre un environnement d'exécution numérique qui est adapté pour permettre ces différents enregistrements. [35] Il peut s'agir d'un environnement d'exécution numérique matériel spécialement conçu à cet effet et comprenant le ou les processeurs numériques physiques ainsi que les différents composants nécessaires à la mise en oeuvre du programme exécutable à analyser ainsi que les composants nécessaires, d'une part, aux enregistrements de l'état de l'environnement des discussions numériques à des instants donnés et, d'autre part, aux enregistrements des entrées à destination du ou des processeurs numériques matériels. [36] Dans une forme de mise en oeuvre du procédé selon l'invention, l'environnement d'exécution numérique fait intervenir une machine virtuelle qui exécute le programme exécutable à analyser. À cet effet, il est utilisé un environnement de virtualisation qui pilote le ou les processeurs numériques devant mettre en oeuvre le programme exécutable à analyser. Au sens de l'invention, il convient d'entendre par programme exécutable le logiciel exécutable en lui-même complété par l'ensemble de ses dépendances, librairies, bibliothèques, programmes complémentaires, ainsi qu'éventuellement le système d'exploitation associé. [37] Comme le montre la figure 1, l'environnement d'exécution numérique est mis en oeuvre dans un système ou une installation informatique qui comprend des ressources matérielles M qui sont contrôlées par un système d'exploitation hôte H. Le système d'exploitation H met en oeuvre, d'une part, un hyperviseur ou un émulateur E du ou des processeurs numériques pour lesquels le programme exécutable à analyser a été conçu et, d'autre part, un système de logiciels de contrôle C. L'hyperviseur ou l'émulateur E est alors adapté pour mettre en oeuvre une machine virtuelle qui forme l'environnement d'exécution numérique EEN au sens de l'invention. L'environnement d'exécution numérique comprend notamment des pilotes ou drivers ainsi qu'un système d'exploitation invité I. Le programme exécutable à analyser P est alors mis en oeuvre par l'environnement d'exécution numérique. Ce type d'environnement d'exécution numérique est généralement désigné sous la dénomination hyperviseur de type 2. Dans ce type d'environnement d'exécution numérique le programme exécutable à analyser n'a pas à être conçu pour la virtualisation cette dernière étant complètement transparente. [38] L'installation informatique accueillant l'environnement d'exécution numérique est alors la combinaison d'une couche matérielle M mettant en oeuvre plusieurs couches logicielles que sont : le système d'exploitation hôte H, l'hyperviseur ou l'émulateur E, la machine virtuelle ou environnement d'exécution numérique EEN comprenant les pilotes D, le système d'exploitation invité I, le programme à analyser C hébergé par l'environnement d'exécution numérique, et le système logiciel de contrôle C qui fonctionne en parallèle avec l'hyperviseur ou l'émulateur E sur le système d'exploitation hôte H. [39] Parmi les solutions logicielles existantes permettant de réaliser un tel environnement exécution numérique adapté à la mise en oeuvre de l'invention, il est possible de citer : des logiciels de la société Microsoft : Microsoft VirtualPC, Microsoft Virtual Server, des logiciels de la société Parallels : Parallels Desktop, Parallels Server, - un logiciel de la société Oracle : VM VirtualBox, de logiciels de la société VMware : VMware Fusion, VMware Player, VMware Server, VMware Workstation, des logiciels libres : QEMU (émulateur de multiple plateformes dont x86, PPC, Sparc) et bochs (émulateur de plateforme x86) sans que cette liste ne soit ni limitative, ni exhaustive. [40] Le système logiciel de contrôle C est en outre adapté pour réaliser des enregistrements sous forme d'un ou plusieurs fichiers de l'état de l'environnement exécution numérique. Le système logiciel de contrôle est également adapté pour enregistrer de manière séquentielle les entrées à destination de l'environnement d'exécution numérique. Les entrées sont alors indexées temporellement ou en fonction du nombre d'instructions exécutées depuis le début de l'exécution du programme à analyser ou de la portion ou encore indexées en fonction du nombre de cycles d'horloge réalisés depuis le début de l'exécution du programme à analyser, depuis le début de la portion à analyser ou depuis la précédente entrée. [41] Il doit être noté que le système informatique et/ou l'environnement d'exécution numérique peut aussi comprendre un logiciel de génération automatique des entrées à destination de l'environnement d'exécution numérique. [42] Tout d'abord, l'ensemble du programme exécutable, qui doit être contrôlé ou analysé, est chargé dans l'environnement d'exécution numérique EEN qui est initialisé. [43] Il est alors procédé à l'enregistrement de l'état initial de l'environnement d'exécution numérique cet état initial comprend notamment les valeurs des différents registres du processeur numérique ainsi que l'état de la mémoire et éventuellement des registres et mémoires des périphériques (internes comme par exemple une horloge ou les Machine Specific Registers, ou externes comme par exemple ceux d'une carte réseau ou d'un contrôleur d'entrée/sorties) ainsi que des mémoires de masse. De manière générale, tous les éléments nécessaires à une émulation déterministe et fidèle à l'exécution numérique. Cet enregistrement est réalisé sous la forme d'un fichier d'état FS. [44] Il est choisi, à titre d'exemple, de diviser l'exécution du programme exécutable en portions d'une durée, dite période d'exécution donnée. [45] L'exécution du programme exécutable à analyser est alors lancée jusqu'à une instruction ou un événement qui aura été déterminé comme étant le début de la première portion à analyser, l'état de l'environnement numérique d'exécution est alors enregistré dans un fichier FS1. Ensuite l'exécution de la première portion à analyser est assurée. Pendant cette exécution, les entrées sont enregistrées de manière séquentielle dans un fichier d'entrée FE1. Il doit être remarqué que les entrées comprennent aussi bien les entrées venant de l'extérieur de l'environnement d'exécution numérique que les entrées à destination du processeur numérique en provenance des autres composants, physiques ou émules, de l'environnement d'exécution numérique en réponse aux flux de données ou ordres émis par le processeur numérique. [46] Par ailleurs, lorsque la période d'exécution s'est écoulée, l'exécution est arrêtée, l'état de l'environnement d'exécution numérique est enregistré dans un fichier d'état FS2 qui correspond en quelque sorte à une photographie de l'environnement numérique d'exécution à l'issue de l'exécution de la première portion et donc au début de la deuxième portion. Si cela est possible le processus d'exécution du programme exécutable à analyser n'est pas interrompu pour procéder à cet enregistrement. Le cas échéant s'il n'est pas possible de procéder à cet enregistrement de l'état de l'environnement de numérique d'exécution sans figer ou arrêter ladite exécution cette dernière est interrompue par le logiciel d'analyse pour ensuite être relancée et se poursuivre. Une fois l'enregistrement d'état réalisé le processus d'exécution du programme exécutable à analyser continue et il est procédé ainsi à chaque période d'exécution avec enregistrement des entrées FE, et de l'état FS, de l'environnement numérique d'exécution jusqu'à atteindre la fin de l'exécution du programme exécutable à analyser. [47] Dans le cas d'un programme exécutable dont on voudrait analyser le comportement durant n secondes, il pourra par exemple être choisi d'en découper l'exécution en portions d'environ n/p secondes, soit p portions P, à analyser. Il sera donc obtenu p fichiers ou systèmes de fichiers d'état FS, et p fichiers d'entrées FE,. [48] Afin de procéder à l'analyse de chaque portion à analyser P,, l'invention propose de mettre en oeuvre au moins un et de préférence plusieurs environnements d'émulation d'analyse EEA. [49] Chaque environnement d'émulation d'analyse comprend, dans le cas présent, un processeur ou émulateur symbolique PS qui est adapté pour exécuter sous une forme symbolique un programme exécutable c'est-à-dire à interpréter sous une forme symbolique chaque instruction binaire d'un programme exécutable dans son contexte d'exécution en prenant en compte ses interactions éventuelles avec ses dépendances logicielles et/ou le système d'exploitation. [50] Des exemples de processeurs symboliques ou d'exécution dans une forme symbolique d'instruction binaire sont fournis par les publications mentionnées en fin de description. L'homme du métier y trouve toutes les informations qui lui sont nécessaires et il n'est pas besoin de les décrire plus avant. [51] Comme le montre la figure 2, chaque environnement d'émulation d'analyse EEA est, dans le cas présent, la combinaison d'une infrastructure matérielle M sur laquelle s'exécute d'une couche logicielle comprenant un système d'exploitation OS et le logiciel constitutif du processeur symbolique PS. [52] Chaque processeur symbolique PS selon l'invention comprend, par exemple, un module connecteur d'architecture matérielle CAM, un module connecteur d'architecture logicielle CAL, un module de représentation intermédiaire RI, un module solveur et de calcul symbolique SCS, un module d'analyse A, une base de donnée BD et un module connecteur de sortie CS. [53] Le connecteur d'architecture matérielle CAM utilise le fichier d'état FS, de la portion à analyser P, pour placer l'émulateur symbolique dans l'état de début correspondant. Ensuite, le module d'architecture matérielle CAM lit les instructions de la portion à analyser Pi de manière que le processeur symbolique PS les émule. Le connecteur d'architecture matérielle CAM lit également le fichier d'entrées FE, correspondant de manière à utiliser les valeurs d'entrée au fur et à mesure de l'exécution symbolique de la portion à analyser. [54] Aux termes de l'exécution symbolique, le processeur symbolique via son module connecteur de sortie CS génère un fichier d'analyse FA, comprenant par exemple l'état du système final, éventuellement des états intermédiaires, la liste des bugs ou failles trouvés, et plus généralement toutes informations utiles relatives à la portion à analyser P, qui aura été exécutée de manière symbolique. Ainsi, au sens de l'invention, par analyse il convient d'entendre à la fois la recherche de bugs et de failles mais également une analyse de différents aspects de l'exécution de manière à fournir, par exemple mais non exclusivement, une analyse des flux d'informations (data-tainting), recherche d'inter-blocages entre processus, de conflits d'accès à des mémoires partagées, l'identification d'algorithmes (par exemple de chiffrement), aide à la compréhension de code (qu'il soit obscurcis ou non), ou des données d'information statistique, comme par exemple mais non exclusivement, le nombre de sauts, la liste des accès à des périphériques ou des informations de consommation de ressources (énergie, temps, composants électroniques (par exemple un module radio), etc...). Cette liste est donnée à titre indicatif et n'est ni exhaustive, ni limitative. L'environnement d'exécution d'analyse EEA est alors adapté pour fournir tout ou partie de ces éléments en tant que de besoin. [55] Selon une forme de mise en oeuvre préférée, l'environnement d'émulation d'analyse s'assure de la conformité de l'émulation qu'il a réalisée en vérifiant que l'état de l'environnement d'émulation d'analyse à la fin de l'émulation d'une portion à analyser est similaire à l'état de début de la portion suivante tel qu'enregistré lors de l'exécution numérique. [56] Dans une forme préférée, l'invention préconise de mettre en oeuvre plusieurs environnements d'émulation d'analyse EEA qui sont hébergés par des machines virtuelles ou physiques. L'ensemble de ces environnements d'émulation symbolique sont gérés par un logiciel superviseur qui en fonction de leur disponibilité leur affecte une portion à analyser P, associé aux fichiers d'état de début FS, et d'entrées FE, correspondants. [57] Ainsi, l'émulation d'analyse, et dans le cas présent l'émulation symbolique, des différentes portions à analyser peut être effectuée en parallèle de manière à réduire les temps de calcul. [58] L'analyse de code ou programme binaire exécutable au sens de l'invention n'est pas limité à une exécution ou émulation symbolique mais peut également faire intervenir une analyse dans le cadre d'une émulation numérique, dite alors émulation numérique d'analyse. De même, l'environnement d'exécution numérique ne met pas nécessairement en oeuvre un processeur numérique émule dans le cadre d'un hyperviseur logiciel. [59] Ainsi, selon un autre exemple de mise en oeuvre de l'invention, l'environnement d'exécution numérique comprend un processeur numérique physique associé à des ressources physiques de virtualisation également appelées hyperviseur matériel ou des ressources de contrôle. Parmi les environnements d'exécution numérique susceptibles d'offrir de telles ressources de contrôle matérielles, il est possible de citer les composants développés en se basant sur la norme IEEE 1149.1 et/ou 1149.7 communément appelées normes JTAG, ou des extensions de ces normes. L'environnement d'exécution numérique est alors piloté pour enregistrer, lors de l'exécution du programme binaire exécutable à analyser, les états de début et les entrées comme décrit précédemment. [60] Selon cet autre exemple de mise en oeuvre chacun des environnements d'émulation d'analyse comprend un émulateur d'analyse adapté pour émuler sous une forme numérique le processeur physique et/ou l'environnement d'exécution numérique. Un tel émulateur numérique d'analyse est en outre adapté pour assurer des opérations d'analyse du fonctionnement de programme telles que notamment mentionnées au paragraphe [54]. [61] Bien entendu, le procédé d'analyse selon l'invention peut être mis en oeuvre de différentes autres manières dans le cadre des revendications annexées. [62] Par ailleurs, en ce qui concerne l'exécution symbolique et le test de programmes l'homme du métier peut se reporter aux publications suivantes : - J. C. King. "Symbolic execution and program testing" Comm. ACM, 19(7):385-394, 1976., S. Khurshid, C. Pasareanu, and W. Visser. "Generalized symbolic execution for model checking and testing" Proc. TACAS, pages 553-568, 2003. G. D. Venolia, R. DeLine, and T. LaToza, "Software develop-mentat microsoft observed," Microsoft Research, Tech. Rep. MSR-TR-2005-140, 2005. J. H. Andrews, S. Haldar, Y. Lei, F. Chun, H. Li, and N. B, "Randomized unit testing: Tool support and best practices," Department of Computer Science, University of Western Ontario, Tech. Rep., 2006. C. S. C. Pasareanu and W. Visser, "A survey of new trends in symbolic execution for software testing and analysis," International Journal on Software Tools for Technology Transfer, vol. 11, no. 4, pp. 339-353, 2009. K. Sen, "Concolic testing," in Proceedings of the Twenty-second IEEE/ACM International Conference on Automated Software Engineering, 2007, pp. 571-572. J. J. Gutirrez, M. J. Escalona, M. Mejas, and J. Torres, "Generation of test cases from functional requirements. a survey," Workshop on System Testing and Validation, 2006. M.Prasanna,S. Sivanandam, R.Venkatesan, and R.Sundarrajan4, "A survey on automatic test case generation," Academic Open Internet Journal, vol. 15, 2005. M. Harman, "Automated test data generation using search based software engineering," in Proceedings of the Second International Workshop on Automation of Software Test, 2007, pp. 2. P. Godefroid, N. Klarlund, and K. Sen, "Dart: directed automated random testing," in Proceedings of the 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation, 2005, pp. 213-223. P. Godefroid, "Compositional dynamic test generation," in Proceedings of the 34th annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, 2007, pp. 47-54. P. Godefroid, M. Y. Levin, and D. A. Molnar, "Automated whitebox fuzz testing," in Proceedings of Network and Distributed Systems Security, 2008. K. Sen and G. Agha, "Cute and jcute: Concolic unit testing and explicit path model-checking tools," Computer Aided , pp. 419-423, 2006. J. Burnim and K. Sen, "Heuristics for scalable dynamic test generation," EECS Department, University of California, Berkeley, Tech. Rep. UCB/EECS-2008-123, 2008. C. Cadar, V. Ganesh, P. M. Pawlowski, D. L. Dill, and D. R. Engler, "Exe: automatically generating inputs of death," in Proceedings of the 13th ACM conference on Computer and communications security, 2006, pp. 322-335. C. Cadar, D. Dunbar, and D. Engler, "Klee: Unassisted and automatic generation of highcoverage tests for complex systems programs," in USENIX Symposium on Operating System Design and Implmentation. P. Boonstoppel, C. Cadar, and D. Engler, "Rwset: Attacking path explosion in constraint-based test generation," in Proceedings of the Theory and Practice of Software, 14th International Conference on Tools and Algorithms for the Construction and Analysis of Systems, 2008. K. Jayaraman, D. Harvison, V. Ganesh, and A. Kiezun, "jfuzz: A concolic whitebox fuzzer for java," in Proceedings of the First NASA Formai Methods Symposium, 2009, pp. 121-125. N. Tillmann and J. de Halleux, "Pex-white box test generation for .net," in Proceedings of the Second International Conference on Tests and Proofs, 2008, pp. 134-153. C. Marcondes, M. Sanadidi, M. Gerla, R. S. Schwartz, R. O. Santos, and M. Martinello, "Pathcrawler: Automatic harvesting web infra-structure," in Proceedings of the IEEE Network Operations and Management Symposium, 2008, pp. 339-346. G. Wassermann, D. Yu, A. Chander, D. Dhurjati, H. Inamura, and Z. Su, "Dynamic test input generation for web applications," in Proceedings of the 2008 international symposiumon Software Testing and Analysis, 2008, pp. 249-260. S. Artzi, A. Kiezun, J. Dolby, F. Tip, D. Dig, A. Paradkar, and M. D. Ernst, "Finding bugs in dynamic web applications," in Proceedings of the 2008 International Symposium on Software Testing and Analysis, 2008, pp. 261-272. A. Chakrabarti and P. Godefroid, "Software partitioning for effective automated unit testing," in Proceedings of the 6th ACM & IEEE International Conference on Embedded Software, 2006, pp. 262-271. B. Robinson and P. Francis, "Improving industrial adoption of software engineering research: A comparison of open and closed source software," in Proceedings of the Second ACM-IEEE International Symposium on Empirical Software Engineering and Measurement, 2010, pp. 21:1-21:10. S. T. Inc., http://www.scitools.com/documents/metrics.php. M. Collard, "Addressing source code using srcml," in IEEE International Workshop on Program Comprehension Working Session: Textual Views of Source Code to Support Compre-hension, 2005, pp. 109 - 112. F. S. Foundation, "gcov." S. Visvanathan and N. Gupta, "Generating test data for functions with pointer inputs," in Proceedings of the 17th IEEE International Conference On Automated Software En-gineering, 2002, p. 149. D. Vanoverberghe, N. Tillmann, and F. Piessens, "Test input generation for programs with pointers," in Proceedings of the 15th International Conference on Tools and Algorithms for the Construction and Analysis of Systems, 2009, pp. 277-291. A. V. Nori, S. K. Rajamani, S. Tetali, and A. V. Thakur, "The yogi project: Software property checking via static analysis and testing," in Tools and Algorithms for the Construction and Analysis of Systems, 2009, pp. 178-181. D. Shannon, S. Hajra, A. Lee, D. Zhan, and S. Khurshid, "Abstracting symbolic execution with string analysis," in Pro-ceedings of the Testing: Academic and Industrial Conference Practice and Research Techniques - MUTATION, 2007, pp. 13-22. N. Bjrner, N. Tillmann, and A. Voronkov, "Path feasibility analysis for string-manipulating programs," in Tools and Algorithms for the Construction and Analysis of Systems, 2009. A. Kiezun, V. Ganesh, P. J. Guo, P. Hooimeijer, and M. D. Ernst, "HAMPI: A solver for string constraints," in Proceedings of the Eighteenth International Symposium on Software Testing and Analysis, 2009, pp. 105-116. N. T. Sy and Y. Deville, "Automatic test data generation for Proceedings of the 16th IEEE International Conference on Automated Software Engineering, 2001, p. 13. K. Lakhotia, N. Tillmann, M. Harman, and J. De Halleux, symbolic execution," in Proceedings of the 22nd IFIP WG 6.1 international conference on Testing software and systems. P. Godefroid and J. Kinder, "Proving memory safety of program analysis," in Proceedings of the 19th International Symposium on Software Testing and Analysis, 2010, pp. 1-11. K. Lakhotia, P. McMinn, and M. Harman, "An empirical investigation into branch coverage for c programs using CUTE and AUSTIN," Journal of Systems and Software, vol. 83, pp. 2379-2391, 2010. ou dans les publications citées dans les références bibliographiques de ces publications.25 REVENDICATIONS1. Procédé d'analyse du fonctionnement d'un programme exécutable binaire (P), destiné à être mis en oeuvre dans un environnement d'exécution numérique (EEN) comprenant au moins un processeur numérique (E), au moyen d'au moins un environnement d'émulation d'analyse (EEA) comprenant un émulateur d'analyse (EA) du processeur numérique (E), procédé d'analyse comprenant les opérations : - détermination d'au moins une portion à analyser (P,) du programme exécutable binaire, - exécution en partie au moins du programme exécutable binaire dans l'environnement d'exécution numérique (EEN) en enregistrant l'état, dit état de début, de l'environnement d'exécution numérique (EEN) juste avant le début de l'exécution de la portion à analyser et en enregistrant séquentiellement les entrées à destination du processeur numérique et/ou mémoires et périphériques pendant l'exécution de la portion à analyser, - exécution de la portion à analyser (P,) dans l'environnement d'émulation d'analyse (EEA) en initialisant cet environnement à partir de l'enregistrement de l'état de début correspondant à la dite portion à analyser (P,) pour placer l'environnement d'émulation d'analyse dans un état analogue à l'état de début de l'environnement d'exécution numérique (EEN) lors du commencement de l'exécution de ladite portion à analyser et en envoyant séquentiellement les entrées enregistrées à l'émulateur d'analyse au cours de l'exécution de la portion à analyser, analyse de l'exécution réalisée dans l'environnement d'émulation d'analyse. 2. Procédé d'analyse selon la revendication précédente, caractérisé en ce qu'il comprend les opérations suivantes : détermination de plusieurs portions à analyser (P,) distinctes du programme exécutable binaire, exécution en partie au moins du programme exécutable binaire dans l'environnement d'exécution numérique en enregistrant, pour chaque portion à analyser (P,), l'état, dit état de début, de l'environnement d'exécution numérique juste avant le début de l'exécution de ladite portion à analyser (P,) et en enregistrant séquentiellement les entrées à destination du processeur numérique et/ou mémoires et périphériques pendant l'exécution de ladite portion à analyser,mise en oeuvre en parallèle de plusieurs environnements d'émulation d'analyse (EEA) chacun comprenant un émulateur d'analyse (EA) du processeur numérique, pour chaque portion à analyser : sélection d'un environnement d'émulation d'analyse (EEA) disponible, exécution de la portion à analyser (P,) dans l'environnement d'émulation d'analyse (EEA) disponible en initialisant cet environnement à partir de l'enregistrement de l'état de début (FS,) correspondant à la dite portion à analyser (P,) pour placer l'environnement d'émulation d'analyse dans un état analogue à l'état de début de l'environnement d'exécution numérique lors du commencement de l'exécution de ladite portion à analyser et en envoyant séquentiellement les entrées enregistrées pour ladite portion à analyser (P,) à l'émulateur d'analyse (EA) au cours de l'exécution de ladite portion à analyser (P,), analyse de l'exécution réalisée dans l'environnement d'émulation d'analyse (EEA). 3. Procédé d'analyse selon la revendication précédente comprenant les opérations suivantes : détermination d'une instruction ou d'un événement de la première portion à analyser, d'une instruction ou d'un événement de fin de la dernière portion à analyser, détermination d'un pas ou d'un mode de découpage de l'exécution du programme exécutable à analyser en une succession de portions à analyser, exécution de l'ensemble du programme exécutable dans l'environnement d'exécution numérique en enregistrant l'état, dit état de début, de l'environnement d'exécution numérique juste avant le début de l'exécution de chaque portion à analyser et en enregistrant séquentiellement les entrées à destination du processeur numérique et/ou mémoires et périphériques pendant l'exécution de chaque portion à analyser, mise en oeuvre en parallèle de plusieurs environnements d'émulation d'analyse comprenant chacun au moins un émulateur d'analyse du processeur numérique, pour chaque portion à analyser : sélection d'un environnement d'émulation d'analyse disponible, exécution de la portion à analyser dans l'environnement d'émulation d'analyse disponible en initialisant cet environnement à partir de l'enregistrement de l'état de début correspondant à ladite portion à analyser pour placer l'environnement d'émulation symbolique dans un état analogue à l'état de début del'environnement d'exécution numérique lors du commencement de l'exécution de ladite portion à analyser et en envoyant séquentiellement les entrées enregistrées pour ladite portion à analyser à l'émulateur d'analyse au cours de l'exécution de ladite portion à analyser, - analyse de l'exécution réalisée dans l'environnement d'émulation d'analyse. 4. Procédé d'analyse selon la revendication précédente caractérisé en ce que le découpage de l'exécution programme exécutable à analyser en portions à analyser est réalisé selon un ou plusieurs des critères suivants : nombre d'instructions exécutées, - durée d'exécution, nombre de sauts réalisés, chaque saut correspondant à une discontinuité du flux linéaire d'exécution, occurrence d'un ou plusieurs événements matériel, logiciel ou extérieur. 5. Procédé d'analyse selon l'une des revendications précédentes, caractérisé en ce que l'environnement d'exécution numérique met en oeuvre une émulation de chaque processeur numérique gérée par un programme hyperviseur qui offre la possibilité d'enregistrer les états de l'environnement d'exécution numérique ainsi que d'enregistrer séquentiellement les entrées à destination du processeur et/ou mémoires et périphériques. 6. Procédé d'analyse selon l'une des revendications 1 à 4, caractérisé en ce que l'environnement d'exécution numérique (EEN) met en oeuvre au moins un processeur numérique matériel ou physique comprenant au moins un hyperviseur physique et/ou des ressources physique de virtualisation. 7. Procédé d'analyse selon l'une des revendications précédentes, caractérisé en que chaque environnement d'émulation d'analyse comprend au moins un émulateur symbolique. 8. Procédé d'analyse selon l'une des revendications précédentes, caractérisé en ce que chaque environnement d'émulation d'analyse comprend au moins un émulateur numérique d'analyse. 9. Procédé d'analyse selon l'une des revendications précédentes, caractérisé en ce qu'il est mis en oeuvre des moyens de génération automatique des entrées à destination duprocesseur numérique et/ou mémoires et périphériques pendant l'exécution d'une partie au moins du programme exécutable. 10. Installation informatique comprenant : un environnement d'exécution numérique (EEN) adapté pour assurer l'exécution d'au moins une portion à analyser d'un programme exécutable et pour enregistrer l'état, dit état de début, de l'environnement d'exécution numérique juste avant le début de l'exécution de la portion à analyser et pour enregistrer séquentiellement les entrées à destination du processeur numérique et/ou mémoires et périphériques pendant l'exécution de la portion à analyser, au moins un environnement d'émulation d'analyse (EEA) qui est adapté pour exécuter sous une forme émulée une portion à analyser du programme exécutable et qui comprend : - des moyens pour initialiser l'environnement d'émulation d'analyse (EEA) à partir de l'enregistrement de l'état de début de la portion à analyser, - et des moyens pour injecter séquentiellement au cours de l'exécution d'analyse les entrées enregistrées au cours de l'exécution de la portion à analyser dans l'environnement d'exécution numérique. 11. Installation informatique selon la revendication 10, caractérisée en ce qu'elle comprend plusieurs environnements d'émulation d'analyse (EEA) adaptés pour fonctionner en parallèle. 12. Installation informatique selon la revendication 10 ou 11, caractérisée en ce chaque environnement d'émulation d'analyse (EEA) comprend un émulateur symbolique du processeur numérique. 13. Installation informatique selon la revendication 10 ou 11, caractérisée en ce chaque 25 environnement d'émulation d'analyse (EEA) comprend un émulateur numérique d'analyse du processeur numérique.