Le projet du système de détection d’intrusion est une application dont l’objectif est de permettre aux utilisateurs de vérifier s’il y a aucun virus informatique sur leurs machines, ceci dans le but d’améliorer la sécurité des machines des utilisateurs. Ces virus doivent pouvoir être détectés par deux types d’analyse : une analyse par signature et une analyse par comportement, pour ensuite donner le choix à l'utilisateur de bloquer les fichiers malveillants ou de les mettre en quarantaine. L’application a été développée dans le langage de programmation C et Javascript.
On a également utilisé le logiciel Electron avec Node.js pour créer la partie graphique de ce projet.
Notre logiciel doit pouvoir accéder, parcourir et manipuler les dossiers système, et pour cela, nous avons chois C comme langage. Le langage utilisé pour coder une application Electron étant JavaScript, le challenge reposa sur la connexion entre le Javascript avec les scripts d’analyse codé en C. C’est donc un point clé de notre projet. Cela est réalisable car le moteur de Chromium nommé V8 est écrit en langage C++, de l’autre côté, Node.js est aussi écrit en langage de bas niveau comme C et C++, il est donc possible de charger en mémoire des librairies dynamiques natives. Cela passe par un module natif Node.js.
J’ai utilisé une librairie nommée Node-API et un outil de compilation Node-Gyp pour créer notre propre module natif. N-API permet d’abstraire les différentes versions de V8 et Node.js à travers une interface applicative binaire (ABI) invariante. Node-gyp permet quant à lui, à travers un simple fichier de configuration, de paramétrer les fichiers et les options de compilations permettant de compiler la DLL native.
L’ensemble des fichiers du module composant la DLL sont les sources des différents scripts et un fichier index.cpp qui permet de faire les différents appels Node-API permettant d’exposer les différentes fonctions disponibles à JavaScript. La dernière étape est le fichier index.js du module, il exporte les méthodes Javascript publiques du module. A la fin, appeler la commande “npm install” à la racine du module natif pour que le code C/C++ soit compilé. On peut ensuite utiliser notre module natif local, comme n’importe quel autre module.