TP - Analyse statique avancée d’un Malware
May 31, 2022
Environnement de travail
Le projet se fera sur la VM PARROT
Un serveur SAMBA est fonctionnel sur la VM pour le partage de fichiers avec l’OS hôte. Le répetoire
de partage est ~/data
Pour installer le fichier à analyser : $> fast-update install_apt user.
1 Analyse statique basique
Avant de procéder au reverse engineering du programme, réaliser une analyse statique basique, en suivant la
même démarche que les TPs précédents.
1. Utilisez la commande file pour afficher le type du fichier ~/malware_samples/apt
$> file file_name
2. Quel est le type du fichier ?
3. Quelles menaces peuvent affecter ce type de fichier ?
4. En utilisant le script oledump, lister les objets contenus dans ce fichier:
$> oledump -a ~/malware_samples/apt
indication:
Pour installer oledump :
$> fast-update install_oledump
Pour extraire un item et le décompresser:
$> oledump -a ~/malware_samples/apt -s AN -v #N = 1 à 9
5. Y-t-il un script ? Si oui, l’extraire.
6. Quel est son type ?
7. Analyser ce script pour extraire un fichier caché à partir du fichier originel apt.
(a) Quel est le type de ce fichier caché ?
(b) Est-il executable ? Si oui,
(c) Comment est-il censé être lancé (donnez la commande) ?
(d) A quel emplacement est-il sauvegardé ?
(e) Comment est-il sauvegardé ?
Malwares - Forensic Analyse statique avancée d’un Malware 03-05-2022
indication: Pour rechercher une chaîne de caractères dans un fichier compressé
$> zipgrep -i "une chaine de caractères"/opt/debian/malware_samples/apt
Pour décopresser un fichier ZIP:
$> unzip /opt/debian/malware_samples/apt
Pour décoder un code en base64:
$> cat file | base64 -d
2 Analyse du code extrait avec IDAPRO
1. En vous basant sur les informations collectées jusqu’à maintenant, identifier la première fonction à
analyser.
2. Dans cette fonction, un certain nombre de chaînes de caractères sont contruites en mémoire:
(a) Dans quelle section sont-elles construites ? Expliquez votre raisonnement.
(b) Identifiez ces chaînes de caractères et leur adresse relative par rapport à EBP. Expliquez votre
raisonnement.
indication: Utiliser le code suivant pour décoder les caractères 1
(c) Quels sont les noms donnés à ces variables ? Renommez chaque variable conformément à leur
contenu.
3. Noter le contenu du registre ebx et ecx avant l’appel aux fonctions ?
4. L’appel à la fonction localisée à l’adresse 0x10001000 est de type fastcall (i.e. les 2/3 premiers arguments
sont transmis via les registres ebx, edx,eax et ecx à la fonction). Qu’elles sont les valeurs des arguments
de cette fonction ?
(a) Dans cette fonction, des appels aux APIs Windows RegOpenKeyExW, GetEnvironmentVariableW et RegSetValueExW
sont effectués:
• Identifier la clé de registre concernée par le premier appel ? Expliquez votre raisonnement.
• La clé est enregistrée dans une variable locale. Renommer cette variable avec le nom de la clé
de registre.
• Que réalise la fonction GetEnvironmentVariableW ? Dans quel registre le resultat est-il sauvegradé
?
• Que contient le registre ebx ?
• Qelle est la chaîne contruite grâce aux différents appels à la fonction strcat ? Dans quel endroit
est elle sauvegrdée ?
• Quelle est la valeur contenue dans la variable locale var_4C ? Renommer cette fonction.
• Que réalise la fonction RegSetValueExW ?
(b) Conclure sur l’objectif de cette fonction. Renommez cette fonction. Regrdez si d’autres malwares
possèdent ce comportement.
indication: Vous pouvez consulter l’aide d’une API windows courante avec SHIFT-H
5. La seconde fonction appelée est située à l’adresse 0x10001210.
(a) Quelles sont les valeurs des arguments de cette fonction ? Renommez-les dans la fonction.
(b) Que réalise l’instruction xor eax, eax ?
B. AIT SALEM Page 2 of 3
Malwares - Forensic Analyse statique avancée d’un Malware 03-05-2022
(c) Utiliser le script script 2 pour extraire le contenu de la variable byte_0x10009B90 à la sortie de la
boucle:
• Expliquer le code en lien avec la boucle.
• Quel est le type du fichier extrait ?
• Analysez-le avec VirusTotal.
• Quelle valeur contiendra le registre eax après l’appel à la fonction GetProcAddress ?
• Recherchez sur Internet dans quel contexte cette suite d’API Windows est utilisée GetModuleHandleW
--> GetProcAddress.
• Que contiendra le registre esi après le deux appels à la fonction lstrcatW ?
• A quel endroit le contenu de la variable byte_0x10009B90, est-il stocké ?
• Renommez cette fonction.
6. La troisième fonction appelée est située à l’adresse 0x10001320.
(a) Quelles sont les valeurs des arguments de cette fonction ? Renommez-les dans la fonction.
(b) Adapter le script script 2 pour extraire le contenu de la variable byte_10009B20 à la sortie de la boucle:
• Quel est le type du fichier extrait et tenter de le comptendre ?
• A quel endroit le contenu de la variable byte_10009B20, est-il stocké ?
• Renommez cette fonction.
7. Donnez la conclusion finale de votre analyse.
Listing 1: [Link]
add = get_screen_ea ()
print([Link](hex(get_operand_value (add ,1))[2:]))
nb_inst = ida_kernwin.ask_str("2", 0, "Please enter number instruction")
for i in range (0,int(nb_inst)):
add = next_head(add)
print([Link](hex(get_operand_value (add ,1))[2:]))
Listing 2: [Link]
v = ""
bytes = idaapi.get_bytes (0 x10009B90 , 0x7600)
for i in range (0,len(bytes)):
v += chr(bytes[i] ^ 0x26)
f = open("[Link]", "w")
[Link](v)
[Link] ()
B. AIT SALEM Page 3 of 3