Qu’est-ce qu’un Packer ?
Un packer est programme dont le but va être de compresser un exécutable. Il peut également le chiffrer.
Quel est le problème ?
Théoriquement l’idée est bonne, compresser un fichier exécutable afin de le rendre plus léger lors de sa future installation. En pratique, on s’en moque un peu, notre espace disque est assez grand et notre accès internet s’améliore avec la fibre donc l’utilisation de packer n’est pas vraiment utile de nos jours.
Le problème c’est que cette technologie peut être utilisée pour cacher un objet malveillant. En effet, un antivirus doit pouvoir analyser le code d’un fichier pour savoir s’il est dangereux (enfin c’est une des méthodes qu’il peut utiliser). Si le fichier est chiffré ou que l’exécutable n’est pas valide, alors l’antivirus ne peux rien faire.
Un moyen de détection ?
Un fichier exécutable sous Windows est divisé en section :
- .text : Contient les instructions que doit exécuter le CPU. Généralement c’est la seule section qui est exécutable.
- .rdata : Contient les fonctions d’imports/d’exports
- .data
- .idata
- .edata
- .pdata
- .rsrc
- .reloc
Notez que si la section .rssrc contient un .exe ou .sys(driver), cela peut être un malware.
Donc en théorie, si vous trouvez des autres sections que ceux-ci, vous pouvez mettre l’objet en « suspicieux ».
Si l’objet VirutalSize d’une section est beaucoup plus grande que l’objet SizeOfRawData et en particulier pour la section .text.
Si l’EOP(NTHEADER) est différent de l’EOP (point d’entrée du programme) calculé. Vous pouvez également calculer l’entropie d’une ou de chaque section. Si l’entropie est élevée vous pouvez en déduire qu’il y a un packer ou que c’est obfusqué.
Vous pouvez également effectuer une analyse spécifique sur la signature des packers (analyse de String par exemple).