French translation by Jerome Athias <jerome.athias[at]free.fr>
L'interface elle-même fournit une interface simplifiée à certains des différents aspects de la base de données d'opcodes. En lançant la commande sans arguments, l'on obtient:
$ ./msfopcode
Usage: msfopcode command
SUPPORTED COMMANDS
stats Display database statistics (Affiche les statistiques sur la base de données)
locales Display supported locales (Affiche les lieux supportés)
metatypes Display supported opcode meta types (Ex: jmp reg) (Affiche les meta-types d'opcodes supportés)
groups Display supported opcode groups (Ex: esp => eip) (Affiche les groupes d'opcodes supportés)
types Display supported opcode types (Ex: jmp esp) (Affiche les types d'opcodes supportés)
platforms Display supported platforms (Affiche les plateformes supportées)
modules Display information about specific modules (Affiche les informations sur des modules particuliers)
search Search for opcodes given a set of criteria (Recherche des opcodes en fonction d'un ensemble de critères)
La commande stats permet d'afficher les statistiques courantes sur la base de données, comme le nombre d'opcodes et modules actuellement indexés par la base de données et la date de dernière mise à jour de la base de données.
$ ./msfopcode stats Last Updated : Sat Sep 03 01:32:00 CDT 2005 Number of Opcodes : 12177419 Number of Opcode Types : 320 Number of Platforms : 14 Number of Architectures : 1 Number of Modules : 17683 Number of Module Segments: 71457 Number of Module Imports : 2065492 Number of Module Exports : 927637
La commande locales liste les lieux actuellement supportés par la base de données. Dans le futur, davantage de lieux seront indexés pour fournir une vision plus complète de la portabilité des opcodes.
$ ./msfopcode locales English French
La commande metatypes liste les meta-types d'opcodes actuellement supportés par la base de données. Un meta-type d'opcode est défini comme une catégorie générale d'opcodes basée sur l'action qu'ils réalisent, comme effectuer un saut vers un registre, effectuer un pop/pop/ret, etc. Le meta-type aide à catégoriser différents types d'opcodes spécifiques.
$ ./msfopcode metatypes pop/pop/ret jmp reg call reg jmp [reg + offset] call [reg + offset] popad/ret popaw/ret push reg/ret
La commande groups liste les groupes d'opcodes actuellement supportés par la base de données. La différence entre un "groupe d'opcodes" et un "meta-type d'opcodes" est qu'un groupe d'opcodes associe les opcodes en fonction de l'action spécifique qu'ils réalisent, comme transitionner le pointeur d'instruction à la valeur courante d'un registre spécifique, comme ESP.
$ ./msfopcode groups eax => eip ebx => eip ecx => eip edx => eip edi => eip esi => eip ebp => eip esp => eip [esp + 8] => eip [reg + offset] => eip [esp + 0x10] => eip [esp + 0x20] => eip [reg] => eip
La commande types liste tous les différents types d'opcodes spécifiques supportés par la base de données. Un type d'opcode est une instance d'un opcode spécifique ou des opcodes qui forment un bloc d'instruction logique, comme un jmp esp. Les types d'opcodes sont regroupés en utilisant les groupes d'opcodes et les meta-types.
$ ./msfopcode types jmp esp call esp push esp, ret jmp ebp call ebp push ebp, ret jmp eax ...
La commande platforms liste les versions de systèmes d'exploitation actuellement supportés par la base de données. Actuellement, la base de données supporte les versions de Windows NT SP3 à 2003 SP1. La base de données ne tient pas compte des hotfixs. Les plateformes peuvent être optionnellement filtrées en spécifiant l'option -p. Par exemple, -p 2000 n'affichera que les versions de Windows 2000 supportées.
$ ./msfopcode platforms Windows NT 4.0.3.0 SP3 (IA32) Windows NT 4.0.4.0 SP4 (IA32) Windows NT 4.0.5.0 SP5 (IA32) Windows NT 4.0.6.0 SP6 (IA32) Windows 2000 5.0.0.0 SP0 (IA32) Windows 2000 5.0.1.0 SP1 (IA32) Windows 2000 5.0.2.0 SP2 (IA32) Windows 2000 5.0.3.0 SP3 (IA32) Windows 2000 5.0.4.0 SP4 (IA32) Windows XP 5.1.0.0 SP0 (IA32) Windows XP 5.1.1.0 SP1 (IA32) Windows XP 5.1.2.0 SP2 (IA32) Windows 2003 Server 5.2.0.0 SP0 (IA32) Windows 2003 Server 5.2.1.0 SP1 (IA32)
L'une des fonctionnalités majeures de la base de données d'opcodes est qu'elle indexe des informations détaillées sur les modules. Par exemple, la base de données contient actuellement des informations sur les imports, exports, segments et attributs de module spécifique pour tous les modules importés dans la base de données. Cela permet d'obtenir des références croisées sur plusieurs modules, ... La commande modules est utilisée pour extraire les informations sur les modules.
$ ./msfopcode modules -h
Usage: msfopcode modules
OPTIONS:
-E Include module export information (Inclus les informations d'export des modules)
-I Include module import information (Inclus les informations d'import des modules)
-S Include module segment information (Inclus les informations de segment des modules)
-d Display detailed output (Affiche les informations détaillées)
-h Help banner (Affiche cette aide)
-l A comma separated list of locales to filter (Ex: English) (Liste de locales, séparée par des virgules, à filtrer)
-m A comma separated list of module names to filter (Ex: kernel32.dll,user32.dll) (Liste de noms de modules, séparée par des virgules, à filtrer)
-p A comma separated list of operating system names to filter (Ex: 2000,XP) (Liste de noms d'OS, séparée par des virgules, à filtrer)
-x Dump the raw XML response (Capture la réponse XML brute)
L'explication dans l'utilisation pour chaque option est assez explicite, mais l'idée de base est qu'il est possible de chercher des modules dans la base de données avec la possibilité de filtrer les résultats sur les noms de fichiers, locales et version de système d'exploitation. Pour les résultats retournés, les informations sur les imports, exports et segments des modules, et des informations détaillées peuvent être retournées. Par exemple, pour voir toutes les versions de kernel32.dll actuellement référencées dans la base de données, l'on peut utiliser la commande suivante:
$ ./msfopcode modules -m kernel32.dll
Matching Modules
================
Name Base Address Size Version Timestamp Locale
---- ------------ ---- ------- --------- ------
kernel32.dll 0x77e70000 790528 5.0.2191.1 Tue Dec 14 17:20:09 CST 1999 French
kernel32.dll 0x77e40000 1056768 5.2.3790.1830031 Thu Mar 24 20:30:42 CST 2005 English
kernel32.dll 0x77e40000 999424 5.2.3790.3 Tue Mar 25 03:42:44 CST 2003 English
kernel32.dll 0x77f00000 385024 4.0.0.0 Fri Apr 25 15:33:31 CDT 1997 English
kernel32.dll 0x77ef0000 421888 4.0.0.0 Mon Mar 29 18:10:58 CST 1999 English
kernel32.dll 0x77f00000 385024 4.0.0.0 Sun Feb 28 17:49:07 CST 1999 English
kernel32.dll 0x77f00000 385024 4.0.0.0 Tue Jul 20 18:19:59 CDT 1999 English
kernel32.dll 0x77e80000 745472 5.0.2191.1 Wed Dec 01 01:37:24 CST 1999 English
kernel32.dll 0x77e80000 741376 5.0.2195.1600 Fri Jun 09 21:03:14 CDT 2000 English
kernel32.dll 0x77e80000 741376 5.0.2195.2778 Fri May 04 17:34:08 CDT 2001 English
kernel32.dll 0x77e80000 745472 5.0.2195.5400 Tue Jul 23 03:13:13 CDT 2002 English
kernel32.dll 0x7c4e0000 757760 5.0.2195.6688 Thu Jun 19 22:43:40 CDT 2003 English
kernel32.dll 0x77e60000 937984 5.1.2600.0 Sat Aug 18 01:33:02 CDT 2001 English
kernel32.dll 0x77e60000 942080 5.1.2600.11061 Thu Aug 29 06:40:40 CDT 2002 English
kernel32.dll 0x7c800000 999424 5.1.2600.21802 Wed Aug 04 03:56:36 CDT 2004 English
Si l'on souhaite obtenir uniquement les versions de kernel32.dll sur Windows XP anglais, il suffit d'ajouter des paramètres:
$ ./msfopcode modules -m kernel32.dll -p XP -l English
Matching Modules
================
Name Base Address Size Version Timestamp Locale
---- ------------ ---- ------- --------- ------
kernel32.dll 0x77e60000 937984 5.1.2600.0 Sat Aug 18 01:33:02 CDT 2001 English
kernel32.dll 0x77e60000 942080 5.1.2600.11061 Thu Aug 29 06:40:40 CDT 2002 English
kernel32.dll 0x7c800000 999424 5.1.2600.21802 Wed Aug 04 03:56:36 CDT 2004 English
Pour afficher les informations détaillées sur les modules correspondants, l'on peut spécifier le paramètre -d:
$ ./msfopcode modules -m kernel32.dll -p XP -l English -d
.-============================================
Name : kernel32.dll
Base Address: 0x77e60000
Size : 937984
Version : 5.1.2600.0
Timestamp : Sat Aug 18 01:33:02 CDT 2001
Locale : English
Platforms :
Windows XP 5.1.0.0 SP0 (IA32)
.-============================================
Name : kernel32.dll
Base Address: 0x77e60000
Size : 942080
Version : 5.1.2600.11061
Timestamp : Thu Aug 29 06:40:40 CDT 2002
Locale : English
Platforms :
Windows XP 5.1.1.0 SP1 (IA32)
.-============================================
Name : kernel32.dll
Base Address: 0x7c800000
Size : 999424
Version : 5.1.2600.21802
Timestamp : Wed Aug 04 03:56:36 CDT 2004
Locale : English
Platforms :
Windows XP 5.1.2.0 SP2 (IA32)
Le véritable objectif de la base de données d'opcodes, est la possibilité de pouvoir chercher des opcodes spécifiques parmi plusieurs versions de systèmes d'exploitation différents, en croisant les résultats, afin de déterminer la portabilité de l'adresse de retour. Pour cette raison, le script msfopcode fournit la commande search:
$ ./msfopcode search -h
Usage: msfopcode search
OPTIONS:
-M A comma separated list of opcode meta types to filter (Ex: jmp reg) (Liste de meta-types, séparée par des virgules, à filtrer)
-P Results must span more than one operating system version (Les résultats doivent correspondre à plus d'une version de système d'exploitation)
-a A comma separated list of addresses to filter (Ex: 0x41424344) (Liste d'adresses, séparée par des virgules, à filtrer)
-g A comma separated list of opcode groups to filter (Ex: esp => eip) (Liste de groupes d'opcodes, séparée par des virgules, à filtrer)
-h Help banner (Affiche cette aide)
-l A comma separated list of locales to filter (Ex: English) (Liste de locales, séparée par des virgules, à filtrer)
-m A comma separated list of module names to filter (Ex: kernel32.dll,user32.dll) (Liste de noms de modules, séparée par des virgules, à filtrer)
-p A comma separated list of operating system names to filter (Ex: 2000,XP) (Liste de noms de systèmes d'exploitation, séparée par des virgules, à filtrer)
-t A semi-colon separated list of opcode types to filter (Ex: jmp esp,call esp) (Liste de types d'opcodes, séparée par des points-virgule, à filtrer)
-x Dump the raw XML response (Capture la réponse XML brute)
A l'instar de la commande modules, la commande search fournit une manière de limiter les résultats. Dans ce cas, les résultats peuvent être filtrés sur le meta-type, groupe, type, OS, module, locale et même adresses. Cela permet d'obtenir très finement les résultats souhaités. De plus, l'on peut demander au serveur de ne retourner uniquement les résultats qui sont portables en utilisant l'option -P. (Il demeure quelques problèmes avec cette option actuellement.)
Pour chercher toutes les occurrences d'un groupe d'opcodes ecx => eip dans ws2help.dll sur Windows 2000 et XP, l'on peut utiliser la commande:
$ ./msfopcode search -p 2000,XP -m ws2help.dll -g "ecx => eip"
Opcodes
=======
Address Type OS
------- ---- --
0x74fa3112 call ecx Windows 2000 5.0.0.0 SP0 (IA32) (ws2help.dll)
Windows 2000 5.0.1.0 SP1 (IA32) (ws2help.dll)
Windows 2000 5.0.2.0 SP2 (IA32) (ws2help.dll)
Windows 2000 5.0.4.0 SP4 (IA32) (ws2help.dll)
0x71aa1224 push ecx, ret Windows XP 5.1.0.0 SP0 (IA32) (ws2help.dll)
Windows XP 5.1.1.0 SP1 (IA32) (ws2help.dll)
0x71aa396d call ecx Windows XP 5.1.0.0 SP0 (IA32) (ws2help.dll)
Windows XP 5.1.1.0 SP1 (IA32) (ws2help.dll)
0x71aa3de3 call ecx Windows XP 5.1.2.0 SP2 (IA32) (ws2help.dll)
0x71aa163b push ecx, ret Windows XP 5.1.2.0 SP2 (IA32) (ws2help.dll)
0x75023112 call ecx Windows 2000 5.0.0.0 SP0 (IA32) (ws2help.dll)
Windows 2000 5.0.1.0 SP1 (IA32) (ws2help.dll)
Windows 2000 5.0.2.0 SP2 (IA32) (ws2help.dll)
Windows 2000 5.0.3.0 SP3 (IA32) (ws2help.dll)
Windows 2000 5.0.4.0 SP4 (IA32) (ws2help.dll)
Pour limiter les résultats uniquement à ceux qui sont portables, l'on peut ajouter l'option -P :
$ ./msfopcode search -p 2000,XP -m ws2help.dll -g "ecx => eip" -P
Opcodes
=======
Address Type OS
------- ---- --
0x74fa3112 call ecx Windows 2000 5.0.0.0 SP0 (IA32) (ws2help.dll)
Windows 2000 5.0.1.0 SP1 (IA32) (ws2help.dll)
Windows 2000 5.0.2.0 SP2 (IA32) (ws2help.dll)
Windows 2000 5.0.4.0 SP4 (IA32) (ws2help.dll)
0x71aa1224 push ecx, ret Windows XP 5.1.0.0 SP0 (IA32) (ws2help.dll)
Windows XP 5.1.1.0 SP1 (IA32) (ws2help.dll)
0x71aa396d call ecx Windows XP 5.1.0.0 SP0 (IA32) (ws2help.dll)
Windows XP 5.1.1.0 SP1 (IA32) (ws2help.dll)
0x75023112 call ecx Windows 2000 5.0.0.0 SP0 (IA32) (ws2help.dll)
Windows 2000 5.0.1.0 SP1 (IA32) (ws2help.dll)
Windows 2000 5.0.2.0 SP2 (IA32) (ws2help.dll)
Windows 2000 5.0.3.0 SP3 (IA32) (ws2help.dll)
Windows 2000 5.0.4.0 SP4 (IA32) (ws2help.dll)
Pour le développement, le script peut être utilisé pour obtenir les résultats dans un format XML brut, afin que des extensions puissent être écrites pour l'interface dans le futur par des tiers. Cela peut être obtenu en spécifiant le paramètre -x.