
LLEF (prononcé ɬɛf - "hlyeff") est un plugin LLDB pour le rendre plus utilisable pour RE et VR de bas niveau. Similaire au GEF, mais pour LLDB.
Il utilise l'API Python de LLDB pour ajouter une sortie d'état supplémentaire et quelques nouvelles commandes, afin que les chercheurs en sécurité puissent plus facilement utiliser LLDB pour analyser le logiciel pendant son exécution.
Les instructions ci-dessous installeront LLEF afin qu'elle soit utilisée par LLDB par défaut.
cd <repo>./install.sh~/.lldbinit ) ou installation manuelle.LLDB utilise la syntaxe de démontage AT&T pour les binaires x86 par défaut. Le programme d'installation offre une option pour remplacer cela.
lldb-15 < optional binary to debug >Diverses commandes pour définir, enregistrer, charger et répertorier les commandes spécifiques LLEF:
(lldb) llefsettings --help
list list all settings
save Save settings to config file
reload Reload settings from config file (retain session values)
reset Reload settings from config file (purge session values)
set Set LLEF settings
Les paramètres sont stockés dans un fichier .llef situé dans votre répertoire domestique formaté comme suivant:
[LLEF]
<llefsettings> = <value>
| Paramètre | Taper | Description |
|---|---|---|
| color_output | Booléen | Activer / désactiver la sortie du terminal couleur |
| registre_coloring | Booléen | Activer / désactiver la coloration du registre |
| show_legend | Booléen | Activer / désactiver la sortie de légende |
| show_registers | Booléen | Activer / désactiver la sortie des registres |
| show_stack | Booléen | Activer / désactiver la sortie de la pile |
| show_code | Booléen | Activer / désactiver la sortie du code |
| show_threads | Booléen | Activer / désactiver la sortie des filetages |
| show_trace | Booléen | Activer / désactiver la sortie de trace |
| force_arch | Chaîne | Architecture d'affichage du registre de force (expérimental) |
| Rebase_Address | Booléen | Activer / désactiver la sortie de la sortie de l'adresse |
| Rebase_offset | Int | Définissez le décalage de Rebase (par défaut 0x100000) |
| show_all_registers | Booléen | Activer / désactiver la sortie du registre étendu |
Permet de régler les couleurs de GUI LLEF:
(lldb) llefcolorsettings --help
list list all color settings
save Save settings to config file
reload Reload settings from config file (retain session values)
reset Reload settings from config file (purge session values)
set Set LLEF color settings
Couleurs supportées: bleu, vert, jaune, rouge, rose, cyan, gris
| Couleur |
|---|
| registre_color |
| Modified_register_color |
| code_color |
| tas_color |
| stack_color |
| string_color |
| stack_address_color |
| function_name_color |
| instruction_color |
| mis en surbrillance_instruction_color |
| line_color |
| Rebased_Address_Color |
| section_header_color |
| mis en surbrillance_index_color |
| index_color |
| déréférencé_value_color |
| déréférencé_register_color |
| frame_argument_name_color |
| read_memory_address_color |
Afficher la mémoire du contenu avec:
(lldb) hexdump type address [--size SIZE] [--reverse]
par exemple
(lldb) hexdump byte 0x7fffffffecc8 --size 0x38
0x7fffffffecc8 3d 2f 75 73 72 2f 6c 6f 63 61 6c 2f 73 62 69 6e =/usr/local/sbin
0x7fffffffecd8 3a 2f 75 73 72 2f 6c 6f 63 61 6c 2f 62 69 6e 3a :/usr/local/bin:
0x7fffffffece8 2f 75 73 72 2f 73 62 69 6e 3a 2f 75 73 72 2f 62 /usr/sbin:/usr/b
0x7fffffffecf8 69 6e 3a 2f 73 62 69 6e in:/sbin
(lldb) hexdump word 0x7fffffffecc8 --reverse
0x7fffffffece6│+001e: 0x4654
0x7fffffffece4│+001c: 0x4361
0x7fffffffece2│+001a: 0x746f
0x7fffffffece0│+0018: 0x4e23
0x7fffffffecde│+0016: 0x3f73
0x7fffffffecdc│+0014: 0x6968
0x7fffffffecda│+0012: 0x742d
0x7fffffffecd8│+0010: 0x6564
0x7fffffffecd6│+000e: 0x6f63
0x7fffffffecd4│+000c: 0x6564
0x7fffffffecd2│+000a: 0x2d75
0x7fffffffecd0│+0008: 0x6f79
0x7fffffffecce│+0006: 0x2d64
0x7fffffffeccc│+0004: 0x6964
0x7fffffffecca│+0002: 0x2d79
0x7fffffffecc8│+0000: 0x6857
Actualisez l'interface graphique llef avec:
(lldb) context
Actualiser les composants de l'interface graphique LLEF avec:
(lldb) context [{registers,stack,code,threads,trace,all} ...]
(lldb) pattern create 10
[+] Generating a pattern of 10 bytes (n=4)
aaaabaaaca
[+] Pattern saved in variable: $8
(lldb) pattern create 100 -n 2
[+] Generating a pattern of 100 bytes (n=2)
aabacadaea
[+] Pattern saved in variable: $9
(lldb) pattern search $rdx
[+] Found in $10 at index 45 (big endian)
(lldb) pattern search $8
[+] Found in $10 at index 0 (little endian)
(lldb) pattern search aaaabaaac
[+] Found in $8 at index 0 (little endian)
(lldb) pattern search 0x61616161626161616361
[+] Found in $8 at index 0 (little endian)
Ceci est automatique et imprime toutes les informations actuellement implémentées à un point de rupture.
Configurable avec la rebase_addresses Seammer la fonction de rebasing d'adresse effectue une recherche pour chaque adresse de code présentée dans la sortie pour afficher l'adresse binaire et relative associée. Cette adresse relative est décalée par la valeur définie dans le réglage rebase_offset qui par défaut à l'adresse de base Ghidra de 0x100000 . Le résultat est une sortie d'adresse qui peut être facilement copiée et collée dans une fonction IDE "allez à l'adresse" sans avoir à faire les calculs pour se convertir à partir de l'adresse d'exécution.
Les adresses rebasées sont affichées entre parenthèses après l'adresse d'exécution: 
LLDB est livré avec des modules Python qui sont nécessaires pour que LLEF fonctionne. Si lors du lancement de LLDB avec LLEF, vous rencontrez des messages ModuleNotFoundError , il est probable que vous aurez besoin d'ajouter manuellement les modules LLDB Python sur votre chemin Python.
Pour ce faire, exécutez ce qui suit pour établir votre emplacement sur les packages de sites:
python3 -m site --user-site Localisez ensuite l'emplacement des modules LLDB Python. Ceci est généralement à un emplacement tel que /usr/lib/llvm-15/lib/python3.10/dist-packages mais dépend de votre version Python.
Enfin, modifiez et exécutez les éléments suivants pour ajouter le chemin du module LLDB ci-dessus dans un nouveau fichier lldb.pth dans l'emplacement des packages de sites découvert ci-dessus.
echo " /usr/lib/llvm-15/lib/python3.10/dist-packages " > ~ /.local/lib/python3.10/site-packages/lldb.pth Il a été observé que la sortie LLEF à chaque point d'arrêt est lente sur certaines plates-formes. La cause profonde de cela a été retracée à l'appel API GetMemoryRegions sous-jacent. Heureusement, cela est uniquement utilisé pour identifier si les valeurs d'enregistrement pointent vers le code, la pile ou les adresses de tas.
Pour désactiver la coloration du registre et potentiellement améliorer considérablement les performances LLEF, désactivez la fonction register_coloring à l'aide de la commande llefsettings suivante.
llefsettings set register_coloring False
Nous nous tenons évidemment sur les épaules des géants ici - nous aimerions créditer Hugsy pour GEF en particulier, à partir de laquelle cet outil inspire une forte inspiration! Veuillez considérer cette imitation comme une flatterie?
Si vous souhaitez en lire un peu plus sur LLEF, vous pouvez visiter notre article de blog de lancement.