Esta é uma estrutura de avaliação avançada de defeitos avançados para aplicações do Android (Jaads, nome original Jade renomeado para evitar possíveis questões de marca registrada), escrita em 2014. Jaadas é uma ferramenta escrita em Java e Scala com o poder da fuligem para fornecer análises estáticas intocadas e intraproceduras para aplicações de andróides. Suas características incluem análise de uso indevido da API, análise de descendência local de serviço (falha de intenção), análise de fluxo de mancha do estilo entre procedimento (da intenção à API sensível, ou seja, recebendo uma intenção parcelável e usá-la para iniciar a atividade).
As jaadas também podem combinar o Multidex em um e analisá -las completamente. A maioria dos recursos de detecção de Jaadas pode ser definida no arquivo de configuração Groovy e no arquivo de texto (o arquivo de origem e afundamento da Soot).
Jaadas está embalado em um único arquivo de jar e eu forneço um arquivo de regras de vulnerabilidade padrão. Existem dois modos principais para Jaadas.
FullAnalysis libera todo o poder de Jaadas e fuligem, incluindo análise de aplicativo inteiro inter-procedimento e análise de fluxo de dados entre procedimento. Mas também pode consumir muito tempo e não pode terminar em máquinas com memória pequena (<16 GB). O padrão é o modo completo.
FastAnalysis geralmente termina em menos de 1 minuto e se destina a análises de lote em larga escala. A análise entre procedimentos está desativada para obter flexibilidade de maxmium. Em situações normais, esse modo é suficiente para auditoria comum.
-Fastanálise permite a análise de aceleração e desativa a lisonálise.
Linha de comando para análise: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -C Opção -c deve ser fornecida como diretório para arquivos de configuração, incluindo regras de mancha, fonte e afundamento, descrição da API vulnerável e assim por diante. Se você não entender o conteúdo dos arquivos de configuração, não os modifique, deixe -os como está.
### -P Opção -p Opção Especifica o diretório da plataforma Android, que geralmente apenas aponta para $ {Android_sdk}/plataformas/.
A fuligem exige que a versão específica do plataform.jar seja apresentada, por exemplo, se o seu destino de análise tiver o destinosdk = 22, a fuligem procurará plataformas/android-22/android.jar, caso contrário, aumentará o erro. Se você não tem o frasco específico, na verdade, pode fazer um simbólico nessa posição apontando o que você já tem, digamos, Android-16.jar para fazer a fuligem feliz. Não afetará a precisão do resultado da análise.
-f opção especifica o apk a ser analisado.
JAADAS Resultará em uma lista para consolar e também gravará o resultado JSON-ED para saída/ diretório: {md5_of_input_apk} .txt. Uma amostra pode ser encontrada no diretório de saída deste repo: https://github.com/flankerhqd/jaadas/blob/master/output/92db77bbe1cae9004f11ef9d3d6cbf08.txt
Trecho:
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r24 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r24) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void sendBroadcast(android.content.Intent,java.lang.String)>($r27, $r24) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r4 = virtualinvoke $r2.<android.content.Intent: android.os.Bundle getExtras()>() " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r6 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r6) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r9 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r9) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}]}Para evitar a OOM, adicione a opção -xmx ao CommandLine, por exemplo, java -jar -xmx8192m jade -0.1.jar
Jaadas é organizado por Gradle. Run gradle fatJar na raiz do diretório de origem e no jar com um único conjunto será gerado em ./jade/build/ Cada diretório realmente representa um submódulo Git originalmente. Por simplicidade, estou combinando -os com os mesmos diretórios raiz e você pode alterá -lo como desejar, rastrear as mudanças de fuligem a montante.
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-arsessment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
Obrigado autores de fuligem (https://github.com/sable/soot) por fornecer uma estrutura tão boa.
Este é apenas um protótipo de pesquisa, use por sua conta e risco. Os resultados podem conter falsos positivos e falsos negativos devido à natureza da análise estática. Sinta -se à vontade para bifurcar e puxá -lo.
Jdk> = 1,8 (obrigatório)
Scala> = 2.11 testado