Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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
redexer — O framework de instrumentação binária Redexer para bytecode Dalvik | Kitploit
Ferramentas/GitHubGitHub/plum-umd/redexer
Segurança AndroidAnálise EstáticaAnálise Dinâmica (Sandboxing)Engenharia ReversaAnálise de BináriosPapers e PesquisaAprendizado e Educação
GitHubplum-umd/redexer

redexer

O framework de instrumentação binária Redexer para bytecode Dalvik

Ver Repositório
17431há 5 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
Site

Build Status

redexer

Redexer é uma ferramenta de reengenharia que manipula binários de aplicativos Android. Essa ferramenta é capaz de analisar um arquivo DEX em uma estrutura de dados na memória; inferir com quais parâmetros o aplicativo usa certas permissões (nomeamos esse recurso de RefineDroid); modificar e desanalisar essa estrutura de dados para produzir um arquivo DEX de saída (nomeamos esses recursos de Dr. Android, que significa Dalvik Rewriting for Android).

Publicações

  • Dr. Android and Mr. Hide: Fine-grained Permissions in Android Applications. Jinseong Jeon, Kristopher K. Micinski, Jeffrey A. Vaughan, Ari Fogel, Nikhilesh Reddy, Jeffrey S. Foster, e Todd Millstein. In ACM CCS Workshop on Security and Privacy in Smartphones and Mobile Devices (SPSM '12), Out 2012.

Requisitos

  • OCaml e Ruby

Esta ferramenta é testada sob OCaml 4.09.0 e Ruby 1.8.6(7), então você precisa instalá-los (ou versões superiores).

  • Gerenciador de pacotes/bibliotecas OCaml e biblioteca SHA

Para manipular uma assinatura SHA-1 (hash) no formato DEX, utilizamos a biblioteca OCaml SHA via ocamlfind/findlib, um gerenciador de bibliotecas OCaml. A maneira mais fácil de instalar ambos é usando OPAM, um gerenciador de pacotes OCaml, que possui ambos os pacotes---OPAM ocamlfind e OPAM sha.

Você também pode compilar e/ou instalar ambos os pacotes diretamente. Se estiver usando uma máquina Linux, pode encontrar facilmente as distribuições.

Caso contrário, por exemplo, usando um Mac, você precisa compilá-los por conta própria. Você pode encontrar os códigos-fonte originais aqui. Compile executando make, e vincule o diretório resultante ao diretório raiz site-lib do ocamlfind; ou sudo make install.

Se estiver usando um PC, você precisa instalar ocamlfind/findlib e FlexDLL primeiro. Certifique-se de que suas variáveis de ambiente estejam configuradas corretamente da seguinte forma:

root@kitploit:~
OCAMLLIB=C:\OCaml\lib
CAML_LD_LIBRARY_PATH=%OCAMLLIB%\stublibs
FLEXLINKFLAGS=-L%MinGW%\lib -L%MinGW%\lib\gcc\mingw32\N.N.N
  • Pacotes OPAM:

    • sha
    • str
    • ppx_deriving
    • ppx_deriving_yojson
    • yojson
  • Android SDK (ou fontes)

Para desempacotar e reempacotar arquivos apk, usamos apktool, uma ferramenta de reengenharia APK de código aberto. Como ele usa aapt, Android Asset Packaging Tool, você precisa instalar o Android SDK ou as fontes. Além disso, usamos zipalign, que também vem do Android SDK, para otimizar aplicativos reescritos.

Você pode definir caminhos para as ferramentas base do Android adicionando o seguinte ao seu perfil:

root@kitploit:~
ANDROID_HOME=$HOME/android-sdk    # seu próprio caminho aqui!
export ANDROID_HOME

PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools/19.0.0    # número da versão instalada
export PATH
  • RubyGems e Nokogiri

Os scripts principais são escritos em Ruby e requerem RubyGems, um gerenciador de pacotes Ruby, e Nokogiri, uma biblioteca XML para manipular arquivos de manifesto.

  • (opcional) graphviz dot

Se você quiser ver gráficos (ex: grafo de chamadas, grafo de fluxo de controle, árvore de dominância, etc.), você precisa instalar graphviz dot.

Compilar

Para compilar o redexer, basta make! Você pode ver o binário redexer no nível superior.

root@kitploit:~
$ make (clean)

Antes de usar a ferramenta, cabe ao usuário instalar o arquivo de plataforma mais recente para o apktool. Por exemplo, você precisa fazer

root@kitploit:~
$ java -jar tools/apktool.jar if [arquivo de plataforma adequado]

Você também pode gerar documentos de API em formato html.

root@kitploit:~
$ make api

Uso

  • ajuda

Você pode ver todas as opções que a ferramenta oferece:

root@kitploit:~
$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
  • desanalisar (unparse)

Assim como o dexdump no Android SDK, o redexer permite visualizar o conteúdo interno do arquivo dex fornecido em formato YAML.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd unparse [--to blah.yml]
  • despejar método (dump method)

Esta opção despeja instruções para um método especificado.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
  • identidade (identity)

Este recurso serve para testar os módulos de análise e despejo do redexer. Ele provavelmente gera um arquivo dex idêntico.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd id [--to blah.dex]
  • informação (info)

Você também pode ver estatísticas básicas sobre o arquivo dex, por exemplo, # instr.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
  • classes

Esta opção imprime todos os nomes de classes definidos no arquivo dex.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes

Pode ser útil para pesquisar bibliotecas de terceiros específicas, por exemplo,

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes | egrep 'apache'
  • api

Esta opção imprime o uso da API no arquivo dex.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api [--sdk android.]
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api --sdk com.facebook.
  • estatísticas de opcode

Você não tem curiosidade sobre como alguns opcodes são raramente usados em bytecodes Dalvik? Ele mostrará o histograma de todos os opcodes, ou você pode consultar com que frequência um opcode exato é usado no aplicativo fornecido.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd opstat [--op opcode1,opcode2,...]

Por exemplo,

root@kitploit:~
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat --op div-int/lit16,nop
  • Análise de resolução de Intent

Esta opção realiza análise de resolução de Intent baseada em propagação, e imprime as transições entre classes Activity.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
  • grafo de chamadas (call graph)

Esta opção gera um arquivo pdf que descreve um grafo de chamadas do arquivo fornecido. Se você não especificar o nome do pdf, cg.pdf será usado.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cg [--to blah.pdf] [--no-pdf]
  • grafo de fluxo de controle (control-flow graph)

Esta opção gera um arquivo pdf que mostra um grafo de fluxo de controle do método fornecido. Acrescente um nome de método a um nome de classe com ponto: class_name.method_name

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cfg --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • árvore de dominância (post) (post dominator tree)

Esta opção é semelhante ao recurso acima, exceto que descreve a árvore de dominância (post).

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd (p)dom --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • análise de vivacidade (liveness analysis)

Esta opção realiza uma análise clássica de fluxo de dados reverso.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd live --mtd cls.mtd
  • análise de propagação de constantes (constant-propagation analysis)

Esta opção realiza uma análise clássica de fluxo de dados direto.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd const --mtd cls.mtd
  • análise de definição alcançável (reaching definition analysis)

Esta opção realiza uma análise clássica de fluxo de dados direto.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd
  • dependentes (dependants)

Esta opção encontra dependência de classes.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dependants --mtd cls.mtd
  • atividade inicial (launcher activity)

Esta opção imprime o nome da atividade inicial do apk fornecido.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd launcher
  • exportado (exported)

Esta opção informa quais componentes estão expostos para fora.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd exported
  • activity, service, provider, receiver

Estas opções imprimem componentes básicos do Android declarados no manifesto.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd [activity | service | provider | receiver]
  • custom_views

Esta opção explora definições de layout em recursos e imprime visualizações personalizadas (custom views).

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd custom_views
  • fragments

Esta opção explora definições de layout em recursos e imprime elementos Fragment.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd fragments
  • buttons

Esta opção explora definições de layout em recursos e imprime Botões, juntamente com seu id (ou texto), bem como o método de callback (se existir).

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd buttons
  • permissões declaradas no manifesto do aplicativo

Esta opção imprime as permissões que o apk usa.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd permissions
  • versão do SDK alvo (target SDK version)

Esta opção imprime qual versão do SDK o apk requer.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd sdk

Se você não quiser desempacotar o arquivo apk, na verdade, você pode fazer o mesmo com uma combinação de comandos:

root@kitploit:~
$ aapt dump badging target.apk | grep 'targetSdkVersion' | tr -dc 0-9.\\n
  • Hello, DEX

Esta opção geraria um arquivo dex que imprime uma mensagem simples. Esse arquivo dex é feito apenas usando as APIs do redexer.

root@kitploit:~
$ ruby scripts/cmd.rb --cmd hello

Verifique seu conteúdo interno.

root@kitploit:~
$ dexdump -d results/classes.dex

Se estiver interessado, você pode testar esse arquivo dex da seguinte forma. Assuma que o caminho para ANDROID_SDK está definido.

root@kitploit:~
// cria um jar temporário adequado para a Dalvik VM
$ aapt add temp.jar results/classes.dex

// (opcional) se você não criou um avd, crie um.
$ android create avd -n myAVD1 -t android-8

// inicie seu emulador
$ emulator -avd myAVD1 &

// envie o jar temporário
$ adb push temp.jar /data

// conecte ao shell adb
$ adb shell

// finalmente, execute o dex
# /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar \
 -classpath /data/temp.jar Hello
Hello, DEX
#
  • logging (registro)

Esta é uma variante do recurso de reescrita. Usando este recurso, você pode registrar o comportamento de aplicativos de pontos de vista específicos. O arquivo dex pré-construído para a biblioteca de logging é fornecido: data/logging.dex. Se você quiser adicionar mais recursos ou utilitários, compile-o da seguinte forma:

root@kitploit:~
$ cd logging
$ gradle copyDex
$ cd ..

Em seguida, use o seguinte comando:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging

O trim.py pode capturar as sequências de chamada-retorno do aplicativo instrumentado. (Você deve primeiro instrumentar o aplicativo em teste usando o redexer.)

Se esses logs forem curtos o suficiente, i.e., o telefone (ou emulador) puder armazenar todas as informações na memória, você pode usar o modo offline do script:

root@kitploit:~
$ ./scripts/trim.py -d

Note que todos os parâmetros da linha de comando serão passados para adb logcat, e por padrão, org.umd.logging:I *:S é passado para filtrar logs irrelevantes.

Se os logs transbordarem, você deve usar o modo online:

root@kitploit:~
$ ./scripts/trim.py

O script captura a interrupção de tecla, então você pode finalizar o logging via Ctrl+C.

Em ambos os modos, os logs são salvos em log.txt e exibidos na tela de uma vez. Assim, após coletar os logs, você pode precisar mover esse arquivo, por exemplo:

root@kitploit:~
$ mv log.txt app.scenario.txt
  • logging de interações do usuário

O recurso de logging acima é geral, pois você pode especificar o que registrar no nível de método. (Veja o módulo logging para mais detalhes.) No entanto, isso às vezes é muito detalhado e pode induzir degradação de desempenho. Este recurso foi projetado para registrar apenas interações do usuário. Usando este recurso, você pode capturar apenas eventos relacionados à interface do usuário (UI). Similarmente, o arquivo dex pré-construído para a biblioteca de logging é fornecido: data/logging-ui.dex. Se você quiser modificar a verbosidade das informações de UI, compile-o da seguinte forma:

root@kitploit:~
$ cd logging-ui
$ gradle copyDex
$ cd ..

Em seguida, use o seguinte comando:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging_ui

A biblioteca de logging é herdada do serviço android a11y, que requer consentimento explícito do usuário. Assim, após instalar o apk reescrito, vá para Settings/Accessibility e ative o serviço UI Logging. (Esta etapa pode ser vista como similar a ativar o modo de depuração do dispositivo.) No logcat, as mensagens com tags org.umd.logging_ui.* são interações entre o usuário e o aplicativo em teste.

  • exploração dirigida (directed exploration)

Esta opção encontra caminhos de transição de componentes em direção a chamadas de método alvo.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd directed

Você pode especificar métodos alvo a serem invocados em data/directed.txt

Esses caminhos de transição de componentes são usados para direcionar aplicativos a testar vulnerabilidades de segurança em bibliotecas de terceiros. Mais detalhes são descritos no seguinte artigo:

root@kitploit:~
* Brahmastra: Driving Apps to Test the Security of Third-Party Components.
R. Bhoraskar, et al., In 23rd Usenix Security Symposium (Security '14).

O withTimeout.rb pode construir um arquivo de skip para um aplicativo automaticamente. Este script executa cmd.rb com um tempo limite específico, usado para limitar o tempo gasto instrumentando qualquer classe individual. Esta é uma solução temporária para a classe ocasional que fica presa em um loop durante a instrumentação. Quando este script encontra uma classe que falha, ele a adiciona ao arquivo de skip e continua de onde parou. Uma vez que withTimeout tenha terminado, haverá um arquivo chamado [nome do apk]-skip.txt no diretório de dados, que pode ser usado para construir um aplicativo totalmente instrumentado para esse apk. Para usar withTimeout, basta chamar

root@kitploit:~
$ ruby scripts/withTimeout.rb TIMEOUT COMMANDS
 

Onde TIMEOUT é a duração do tempo limite desejado em segundos (300 é recomendado) e COMMANDS são todas as entradas regulares da linha de comando que você passaria para scripts/cmd.rb para o apk.

Baixar ferramenta