Vous trouverez la base LoaderVirus.idb du listing complet, décrypté et commenté dans le dossier IDB.
Vous trouverez la base Unpacked_Virus.idb du listing complet, décompressé et commenté dans le dossier IDB.
Neitsa a écrit :
Memento 5 de ShmeitCorp Articles d'initiation à IDA par Netix ainsi qu'une présentation du PE par Anubis.
MISC 14 Un dossier complet sur le Reverse avec un excellent article de Nicolas Brulez sur IDA.
Le format PE en français par yarocco.
Emulation de GetProcAddress par Neitsa.
Windows NT/2000 Native API Reference par Gary Nebbett.
IDA Freeware 4.3 Datarescue.
Lord PE par y0da.
D'abord le virus en lui-même ne possède pas de table d'import. Les adresses des apis sont déterminées juste avant leur utilisation à l'aide d'un hash de 32 bits. De plus, son code est compressé. Ensuite, le loader qui décompresse le virus est crypté à l'aide de 15 couches différentes successives. Il teste également la présence d'un debugger à l'aide de l'api IsDebuggerPresent.
Le virus scanne chaque fichier de chaque dossier des disques durs. Lorsqu'il trouve un fichier ne commençant pas par un '.' avec l'extension ".exe" et dont la taille est supérieure à 4Ko, il l'infecte.
Le virus utilise 2 fonctions exportées par NTDLL absentes sur système 9x. De plus, sa méthode pour récupérer l'ImageBase de ntdll.dll ne fonctionne pas sous ces systèmes. Le virus ne fonctionnera donc que sous systèmes NT. De plus, le loader vérifie la date du système. Pour que le virus se lance, le système doit être à la date du 16 février 2011.
On peut noter, par rapport au fonctionnement du virus, que le système suivant n'est pas affecter : Windows installé sur le lecteur E. Le lecteur C ne contient que les fichiers de boot dont les quelques executables sont en lecture seule. Ainsi, le virus va scanner le lecteur C et n'infectera aucun fichier car ne pouvant accéder en écriture à des fichiers en lecture seule, puis s'arretera là car le lecteur D n'existe pas.
Il suffirait que tous les exècutables soient en lecture seule pour être à l'abri de ce virus.
On peut reprendre le code du virus pour scanner les lecteurs, puis vérifier le nom de la dernière section. En cas d'infection, il suffirait de supprimer cette section et de rétablir l'EntryPoint (situé au début de la section), le NumberOfSections et la SizeOfImage. Avant de scanner les lecteurs, vérifier les processus en mémoire et les tuer en cas d'infection.
Merci à Neitsa et Kaine pour ce défi vraiment très intéressant. C'était la première fois que j'analysais un virus, la première fois que j'effectuais une analyse 100% statique et la première fois que j'utilisais IDA. Donc j'espère ne pas avoir dit trop de conneries! (ouais je sais on se trouve des excuses comme on peut) :p Franchement les 2 dernières questions ne m'ont vraiment pas inspirées... Faudrait que j'étudie un peu plus ces p'tites bêtes! :)
Pour toute réclamation, adressez vous au bureau des réclamations...
Kharneth