Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
shadow — Framework de exploração de heap do jemalloc | Kitploit
Ferramentas/GitHubGitHub/census/shadow
Forensia de MemóriaExploraçãoEngenharia ReversaDepuradoresExploração de Binários
GitHubcensus/shadow

shadow

Framework de exploração de heap do jemalloc

Ver Repositório
4697125há 4 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

shadow :: De Mysteriis Dom jemalloc

shadow é um framework de exploração de heap jemalloc. Foi projetado para ser agnóstico em relação à aplicação alvo que usa jemalloc como seu alocador de heap (seja a libc do Android, Firefox, libc do FreeBSD, jemalloc standalone, ou qualquer outro). A versão atual (2.0) foi testada extensivamente com os seguintes alvos:

  • Android 6-9 libc (ARM32 e ARM64)
  • Firefox (x86 e x86-64) no Windows e Linux

Além do código-fonte da ferramenta, este repositório também inclui documentação sobre configuração de um ambiente de depuração userland Android para utilizar o shadow, uma visão geral rápida das estruturas jemalloc do Android usando o shadow, e algumas notas sobre como bugs de free() duplo, desalinhado e arbitrário se comportam no jemalloc do Android.

Uso

Quando você emite um comando específico do jemalloc pela primeira vez, o shadow analisa todos os metadados jemalloc que conhece e os salva em um arquivo pickle do Python. Comandos subsequentes usam este arquivo pickle em vez de analisar os metadados da memória novamente para serem mais rápidos.

Quando você souber que o estado dos metadados jemalloc mudou (por exemplo, quando você fez algumas alocações ou acionou uma coleta de lixo), use o comando jeparse para re-analisar os metadados e recriar o arquivo pickle.

Instalação no Android

O primeiro passo é instalar o pyrsistence na sua máquina host.

Em um dispositivo com root, faça o seguinte:

host$ adb shell
phone$ su root
phone# ps -e

Da saída do ps selecione um processo, por exemplo com.google.process.gapps:

...
u0_a19    4679  3214  1668980 69216 SyS_epoll_ 7fa5f41430 S com.google.process.gapps
...
phone$ cd /data/local/tmp
phone$ ./gdbserver64 :5039 --attach 4679

Você pode encontrar os binários do GDB server para ARM32 e ARM64 no diretório "bin". Ou, se você não confia em nós, faça:

host$ git clone http://android.googlesource.com/toolchain/gdb
host$ cd ./gdb/gdb-7.11
host$ mkdir build64; cd build64
host$ ../configure --program-prefix=aarch64-eabi-linux- --target=aarch64-eabi-linux --disable-werror
host$ make
host$ sudo make install

Então na máquina host, faça:

host$ adb forward tcp:5039 tcp:5039
host$ aarch64-eabi-linux-gdb
(gdb) target remote :5039
(gdb) source /dir/with/shadow/gdb_driver.py
(gdb) jeparse -c /dir/with/shadow/cfg/android7_64.cfg
(gdb) jeruns -c

Às vezes o servidor GDB para de escutar se você demorar muito para emitir o comando target remote :5039. Então, se você vir erros estranhos ao emitir o comando jeparse, apenas comece do início.

Instalação no Windows/Firefox

shadow para Windows/Firefox foi testado com o seguinte:

  • Windows 8.1 e 10 x86-64
  • Windows 7 SP1 x86 e x86-64
  • Várias versões do WinDBG
  • pykd versão 0.3.2.8
  • Muitas versões diferentes do Firefox (tanto x86-64 quanto x86), incluindo a mais recente estável (55.0)

Nota: Se você trabalha com uma versão do Firefox anterior à 36.0, use o branch mozjs!

Primeiro você precisa configurar o WinDBG com o servidor de símbolos da Mozilla. Você também precisa instalar o pykd. Então copie o diretório shadow que você clonou do GitHub para algum caminho (por exemplo C:\tmp\).

Você também pode encontrar um exemplo de script de inicialização do WinDBG no arquivo "windbg-init.cmd". Coloque-o em C:\tmp\ e inicie o WinDBG com windbg.exe -c "$$>< C:\tmp\windbg-init.cmd".

Finalmente, de dentro do WinDBG, emita os seguintes comandos:

!load pykd.pyd
!py c:\\tmp\\shadow\\pykd_driver help

[shadow] De Mysteriis Dom jemalloc
[shadow] shadow v2.0
[shadow] Firefox v56.0a1 (x86-64)

[shadow] jemalloc-specific commands:
[shadow]   jechunks                : dump info on all available chunks
[shadow]   jearenas                : dump info on jemalloc arenas
[shadow]   jerun [-m] <address>    : dump info on a single run
[shadow]                                 -m : map content preview to metadata
[shadow]   jeruns [-cs]            : dump info on jemalloc runs
[shadow]                                 -c : current runs only
[shadow]                    -s <size class> : runs for the given size class only
[shadow]   jebins                  : dump info on jemalloc bins
[shadow]   jebininfo               : dump info on bin sizes 
[shadow]   jesize2bin              : convert size to bin index
[shadow]   jeregions <size class>  : dump all runs that host the regions of
[shadow]                             the given size class
[shadow]   jesearch [-cs] <hex>    : search the heap for the given hex dword
[shadow]                                 -c : current runs only
[shadow]                    -s <size class> : regions of the given size only
[shadow]   jeinfo <address>        : display all available details for an address
[shadow]   jedump [path]           : store the heap snapshot to the current
[shadow]                             working directory or to the specified path
[shadow]   jestore [path]          : jedump alias
[shadow]   jetcaches               : dump info on all tcaches
[shadow]   jetcache [-bs] <tid>    : dump info on single tcache
[shadow]                    -b <bin index>  : info for the given bin index only
[shadow]                    -s <size class> : info for the given size class only
[shadow]   jeparse [-crv]           : parse jemalloc structures from memory
[shadow]                   -c <config file> : jemalloc target config file
[shadow]                                 -r : read content preview
[shadow]                                 -v : produce debug.log
[shadow] Firefox-specific (pykd only) commands:
[shadow]   nursery                 : display info on the SpiderMonkey GC nursery
[shadow]   symbol [-vjdx] <size>   : display all Firefox symbols of the given size
[shadow]                                 -v : only class symbols with vtable
[shadow]                                 -j : only symbols from SpiderMonkey
[shadow]                                 -d : only DOM symbols
[shadow]                                 -x : only non-SpiderMonkey symbols
[shadow]   pa <address> [<length>] : modify the ArrayObject's length (default new length 0x666)
[shadow] Android-specific commands:
[shadow]   jefreecheck [-bm]                : display addresses that can be passed to free()
[shadow]                     -b <bin index> : display addresses that will be freed to
[shadow]                                      the tcache bin of <bin index>
[shadow]                          -m <name> : only search this specific module
[shadow] Generic commands:
[shadow]   jeversion               : output version number
[shadow]   jehelp                  : this help message

Se você não vir a mensagem de ajuda acima, fez algo errado ;)

Suporte a símbolos

Nota: Esta funcionalidade é atualmente exclusiva do Firefox/Windows!

O comando symbol permite que você pesquise por classes (e estruturas) do SpiderMonkey e DOM de tamanhos específicos. Isso é útil quando você está tentando explorar bugs de use-after-free ou quando deseja posicionar objetos vítima interessantes para sobrescrever/corromper.

Baixar ferramenta