
LLEF (pronunciado ɬɛf - "Hlyeff") é um plug -in LLDB para torná -lo mais utilizável para RE e VR de baixo nível. Semelhante ao GEF, mas para LLDB.
Ele usa a API Python do LLDB para adicionar saída de status extra e alguns novos comandos, para que os pesquisadores de segurança possam usar mais facilmente o LLDB para analisar o software enquanto estiver em execução.
As instruções abaixo instalarão o LLEF para que seja usado pelo LLDB por padrão.
cd <repo>./install.sh~/.lldbinit ) ou manual.O LLDB usa sintaxe de desmontagem da AT&T para binários x86 por padrão. O instalador oferece uma opção para substituir isso.
lldb-15 < optional binary to debug >Vários comandos para definir, salvar, carregar e listar comandos específicos do 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
As configurações são armazenadas em um arquivo .llef localizado em seu diretório residencial formatado como seguinte:
[LLEF]
<llefsettings> = <value>
| Contexto | Tipo | Descrição |
|---|---|---|
| color_output | Booleano | Ativar/desativar a saída do terminal de cores |
| Register_coloring | Booleano | Ativar/desativar a coloração do registro |
| show_legend | Booleano | Ativar/desativar a saída da legenda |
| show_registers | Booleano | Ativar/desativar a saída dos registros |
| show_stack | Booleano | Ativar/desativar a saída da pilha |
| show_code | Booleano | Ativar/desativar a saída do código |
| show_threads | Booleano | Ativar/desativar a saída dos encadeamentos |
| show_trace | Booleano | Ativar/desativar a saída de rastreio |
| force_arch | Corda | Arquitetura de exibição de registro de força (experimental) |
| rebase_addresses | Booleano | Ativar/desativar o endereço Rebase Saída |
| rebase_offset | Int | Defina o deslocamento do Rebase (padrão 0x100000) |
| show_all_registers | Booleano | Ativar/desativar a saída do registro estendido |
Permite definir as cores LLEF GUI:
(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
Cores suportadas: azul, verde, amarelo, vermelho, rosa, ciano, cinza
| Cor |
|---|
| register_color |
| modificado_register_color |
| code_color |
| HEAP_COLOR |
| Stack_color |
| string_color |
| Stack_address_color |
| function_name_color |
| Instruction_color |
| destacado_instruction_color |
| line_color |
| rebased_address_color |
| Section_Header_Color |
| destacado_index_color |
| index_color |
| DEREFERENCED_VALUE_COLOR |
| DEREFERENCED_REGISTER_COLOR |
| frame_argument_name_color |
| read_memory_address_color |
Veja o conteúdo da memória com:
(lldb) hexdump type address [--size SIZE] [--reverse]
por exemplo
(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
Atualize a GUI da LLEF com:
(lldb) context
Atualizar componentes da GUI da LLEF com:
(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)
Isso é automático e imprime todas as informações implementadas atualmente em um ponto de interrupção.
Configurável com o rebase_addresses Definindo o endereço Recurso Rebasing Executa uma pesquisa para cada endereço de código apresentado na saída para exibir o endereço binário e relativo associado. Este endereço relativo é compensado pelo valor definido na configuração rebase_offset , que padroniza o endereço base Ghidra de 0x100000 . O resultado é uma saída de endereço que pode ser facilmente copiada e colada em um recurso "vá para endereçar" do IDE sem precisar fazer as matemáticas para converter do endereço de tempo de execução.
Os endereços rebaixados são mostrados entre colchetes após o endereço de tempo de execução: 
O LLDB vem com módulos Python necessários para a execução do LLEF. Se no lançamento do LLDB com o LLEF, você encontrará mensagens ModuleNotFoundError , é provável que você precise adicionar manualmente os módulos Python LLDB no seu caminho Python.
Para fazer isso, execute o seguinte para estabelecer o local do seu site:
python3 -m site --user-site Em seguida, localize o local dos módulos Python LLDB. Normalmente, isso está em um local como /usr/lib/llvm-15/lib/python3.10/dist-packages , mas depende da sua versão python.
Por fim, modifique e execute o seguinte para adicionar o caminho do módulo LLDB acima em um novo arquivo lldb.pth no local de pacotes de site descoberto acima.
echo " /usr/lib/llvm-15/lib/python3.10/dist-packages " > ~ /.local/lib/python3.10/site-packages/lldb.pth Observou -se que a saída do LLEF em cada ponto de interrupção é lenta em algumas plataformas. A causa raiz disso foi atribuída à chamada de API GetMemoryRegions LLDB subjacente. Felizmente, isso é usado apenas para se identificar se os valores de registro apontam para codificar, pilha ou endereços de heap.
Para desativar a coloração do registro e potencialmente melhorar significativamente o desempenho do LLEF, desative o recurso register_coloring usando o seguinte comando llefsettings .
llefsettings set register_coloring False
Obviamente, estamos nos ombros dos gigantes aqui - gostaríamos de creditar Hugsy por Gef em particular, da qual essa ferramenta se inspira pesada ! Por favor, considere esta imitação como bajulação?
Se você quiser ler um pouco mais sobre o LLEF, poderá visitar nossa postagem no blog de lançamento.