human
Comment procède-t-on à l'ingénierie inverse d'un logiciel ? J'ai lu à ce sujet mais je n'en suis toujours pas tout à fait sûr. Un bon eli5 serait grandement apprécié Veuillez expliquer comme si j'avais cinq ans.
gpt
Tout logiciel exécuté sur la machine d'un utilisateur final peut faire l'objet d'une ingénierie inverse pour un adversaire suffisamment déterminé. L'astuce consiste à rendre les choses suffisamment difficiles pour que les gens soient découragés d'essayer de faire de l'ingénierie inverse. La raison en est que , par définition , si votre ordinateur exécute un logiciel , il doit connaître toutes les informations nécessaires pour exécuter ce programme sous forme de code binaire , et par extension vous aussi ( qui contrôle l' ordinateur et dispose de beaucoup de de temps à perdre ) . Si vous ouvrez un programme exe sur votre ordinateur dans le Bloc-notes, vous verrez ce qui ressemble à un tas de charabia - ce sont les données binaires de l'exécutable. Certaines d'entre elles sont des métadonnées sur le fichier et certaines données codées en dur dont votre programme a besoin, mais une grande partie est du code sous la forme d'[Opcodes] (URL_1). Les opcodes sont comme l'ADN d'un programme informatique. Chacun est court et signifie une action spécifique (déplacer ces données ici, vérifier pour voir quelles sont ces données, sauter à cet endroit ensuite, etc.) et ensemble, tous les opcodes constituent votre programme. L'art de lire et d'écrire des opcodes est en grande partie perdu aujourd'hui, car presque tout le monde écrit dans un langage de programmation lisible par l'homme (comme C, Java, Python, etc.) qui est ensuite compilé en opcodes. Cependant , il reste essentiel pour certaines professions telles que les auteurs de logiciels malveillants et les auteurs d' anti - logiciels malveillants . Mais déterminer ce que fait un programme par ses opcodes est toujours une tâche presque impossible - c'est comme essayer de comprendre comment fonctionne le cerveau humain si vous ne pouvez voir que des neurones individuels à la fois. Il y a quelques astuces à cela - comme d'autres l'ont mentionné, tester le programme avec différentes entrées vous donnera des indices sur ce que vous devriez rechercher. Il convient de noter qu'essayer de comprendre ce que fait un programme uniquement en regardant sa sortie ( ce qu'on appelle des tests de boîte noire ) n'est pas une véritable ingénierie inverse -- d' une part , un logiciel peut être infiniment complexe , et il n'y a aucune garantie ce qu'un programme fait dans un environnement est ce qu'il fera dans un autre environnement. Par exemple , les logiciels malveillants tentent souvent de détecter lorsqu'ils sont exécutés sur la machine d' un chercheur de logiciels malveillants et modifient délibérément leur comportement pour agir de manière plus bénigne et rejeter les " gentils " . [ Stuxnet ] ( URL_0 ) est un autre bon exemple : il a été conçu spécifiquement pour être inoffensif sur presque tous les ordinateurs et déposer sa charge utile dévastatrice sur une et une seule machine ( le contrôleur de l' installation nucléaire de Téhéran ) . L'autre outil est un bon débogueur. Pratiquement tous les systèmes d'exploitation et matériels prennent en charge un certain niveau de débogage. C'est là qu'un logiciel spécialisé ( le débogueur ) dira au système d' exploitation " Hé , je vois que vous exécutez actuellement un autre programme ( le débogué ) . J'aimerais le déboguer s'il vous plaît . " Le système d' exploitation dira " sure " , arrêtez le débogueur et donnez au débogueur le contrôle total dessus . Le débogueur peut voir l'espace mémoire complet, quels opcodes sont en cours d'exécution, il peut démarrer et mettre en pause arbitrairement le programme, modifier les données, le mettre en pause lorsque certaines conditions sont remplies, etc. Pour en revenir à l'analogie des neurones, ce serait comme si les spécialistes du cerveau avaient la capacité de modifier ou de supprimer des ensembles entiers de neurones à volonté et de voir comment cela affecte le cerveau. Avec un débogueur, l'une des principales choses à rechercher est le modèle d'appels d'API au système d'exploitation. Fondamentalement, le système d'exploitation agit comme un contrôleur d'accès pour certaines des fonctionnalités les plus avancées d'un ordinateur. Chaque fois qu'un programme veut écrire de la mémoire sur le disque, accéder à Internet, imprimer quelque chose ou faire quoi que ce soit qui dépasse ses capacités, il doit demander la permission au système d'exploitation via ce qu'on appelle l'API du système d'exploitation. Si vous utilisez Windows, cette API est assez bien documentée et bien connue, et vous pouvez vous connecter à ces appels à l'aide d'un débogueur et être averti chaque fois que le programme effectue l'un de ces appels. Cela peut vous donner un très bon point de départ pour inverser le reste du programme. Le moyen de contourner l'ingénierie inverse des logiciels est de ne pas exécuter du tout le programme sur la machine de l'utilisateur, mais plutôt de le faire fonctionner quelque part sur Internet. C'est l'idée du « Software as a Service (SaaS) ». Au lieu de donner à l'utilisateur un programme potentiellement sensible à utiliser et de lui faire confiance pour ne pas l'inverser, vous (en tant qu'éditeur de logiciels) demandez à l'utilisateur de vous envoyer son entrée, vous exécutez le programme quelque part sur vos propres machines, puis vous lui donnez la sortie dos . L'utilisateur est complètement inconscient de ce qui s'est passé dans les coulisses de ce scénario.