
LLEF (ausgesprochen ɬɛf - "hlyeff") ist ein LLDB -Plugin, das es für RE und VR auf niedriger Ebene verwendbarer macht. Ähnlich wie GEF, aber für LLDB.
Es verwendet die Python -API von LLDB, um zusätzliche Statusausgabe und einige neue Befehle hinzuzufügen, damit Sicherheitsforscher LLDB leichter zur Analyse von Software verwenden können, wenn sie ausgeführt werden.
Die folgenden Anweisungen installieren LLEF so, dass es standardmäßig von LLDB verwendet wird.
cd <repo>./install.sh~/.lldbinit ) oder manuelle Installation.LLDB verwendet die Syntax der AT & T -Demontage für X86 -Binärdateien standardmäßig. Der Installationsprogramm bietet eine Option, um dies zu überschreiben.
lldb-15 < optional binary to debug >Verschiedene Befehle zum Einstellen, Speichern, Laden und Auflisten von LLEF -spezifischen Befehlen:
(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
Die Einstellungen werden in einer Datei gespeichert .llef
[LLEF]
<llefsettings> = <value>
| Einstellung | Typ | Beschreibung |
|---|---|---|
| color_output | Boolean | Aktivieren/deaktivieren Sie die Ausgabe des Farbanschlusss |
| Register_Coloring | Boolean | Aktivieren/Deaktivieren Sie die Registrierfärbung |
| show_legend | Boolean | Legendenausgabe aktivieren/deaktivieren |
| show_register | Boolean | Register aktivieren/deaktivieren |
| show_stack | Boolean | Stapelabgabe aktivieren/deaktivieren |
| show_code | Boolean | Code -Ausgabe aktivieren/deaktivieren |
| show_threads | Boolean | Aktivieren/deaktivieren Sie die Threads Ausgang |
| show_trace | Boolean | Trace -Ausgang aktivieren/deaktivieren |
| Force_Arch | Saite | Force Register Display Architecture (experimentell) |
| rebase_addresses | Boolean | Aktivieren/deaktivieren Sie die Rebase -Ausgabe der Adresse |
| rebase_offset | Int | Setzen Sie den REBASE -Offset (Standard 0x100000) |
| show_all_register | Boolean | Aktivieren/deaktivieren Sie die erweiterte Registerausgabe |
Ermöglicht das Festlegen von LLEF -GUI -Farben:
(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
Stützte Farben: Blau, Grün, Gelb, Rot, Pink, Cyan, Grau
| Farbe |
|---|
| Register_Color |
| modified_register_color |
| code_color |
| heap_color |
| stack_color |
| STRING_COLOR |
| stack_address_color |
| function_name_color |
| Anweisung_Color |
| Hervorhebung_Instruction_Color |
| line_color |
| rebased_address_color |
| Abschnitt_Header_Color |
| Hervorhebt_index_color |
| INDEX_COLOR |
| Derferenced_Value_Color |
| Dereferenced_register_Color |
| Frame_argument_name_color |
| read_memory_address_color |
Speicherinhalt anzeigen mit:
(lldb) hexdump type address [--size SIZE] [--reverse]
z.B
(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
Aktualisieren Sie die LLEF -GUI mit:
(lldb) context
Aktualisieren Sie die Komponenten der LLEF -GUI mit:
(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)
Dies ist automatisch und druckt alle aktuell implementierten Informationen an einem Pause.
Konfigurierbar mit der rebase_addresses , die die Adresse der Adresse REBASING SETTEN, führt eine Suche nach jeder in der Ausgabe angegebenen Codeadresse aus, um die zugehörige binäre und relative Adresse anzuzeigen. Diese relative Adresse wird durch den Wert ausgeglichen, der bei der Einstellung rebase_offset definiert ist, die standardmäßig an die Ghidra -Basisadresse von 0x100000 ausfällt. Das Ergebnis ist eine Adressausgabe, die leicht kopiert und in eine IDE -Funktion "Gehen Sie zur Adresse" kopiert und eingefügt werden kann, ohne dass die Mathematik aus der Laufzeitadresse konvertiert werden muss.
Nach der Laufzeitadresse werden in Klammern neu gestaltete Adressen angezeigt: 
LLDB wird mit Python -Modulen gebündelt, die für LLEF erforderlich sind. Wenn Sie LLDB mit LLEF starten, begegnen Sie ModuleNotFoundError -Nachrichten, es ist wahrscheinlich, dass Sie die LLDB -Python -Module auf Ihrem Python -Pfad manuell hinzufügen müssen.
Führen Sie dazu Folgendes aus, um Ihren Standort für Site-Packages festzulegen:
python3 -m site --user-site Suchen Sie dann den Standort LLDB Python Module. Dies liegt in der Regel an einem Ort wie /usr/lib/llvm-15/lib/python3.10/dist-packages ab, hängt jedoch von Ihrer Python-Version ab.
Ändern und führen Sie Folgendes aus, um den oben genannten LLDB-Modulpfad in eine neue Datei lldb.pth in den oben entdeckten Standort aus Site-Packages hinzuzufügen.
echo " /usr/lib/llvm-15/lib/python3.10/dist-packages " > ~ /.local/lib/python3.10/site-packages/lldb.pth Es wurde beobachtet, dass das Rendern der LLEF -Ausgabe an jedem Haltepunkt auf einigen Plattformen langsam ist. Die Grundursache dafür wurde auf den zugrunde liegenden GetMemoryRegions LLDB -API -Aufruf zurückgeführt. Glücklicherweise wird dies nur verwendet, um festzustellen, ob Registerwerte auf Code-, Stack- oder Heap -Adressen hinweisen.
Deaktivieren Sie die Funktion "Register" -Färbung und potenziell erheblich verbessert die Funktion der LLEF -Leistung. Deaktivieren Sie die Funktion register_coloring mithilfe des folgenden Befehls llefsettings .
llefsettings set register_coloring False
Wir stehen hier offensichtlich auf den Schultern der Riesen - wir möchten Hugsy für GEF, insbesondere, aus dem dieses Werkzeug stark inspiriert werden! Bitte betrachten Sie diese Nachahmung als Schmeichelei.
Wenn Sie ein bisschen mehr über LLEF lesen möchten, können Sie unseren Start -Blog -Beitrag besuchen.