Это совместная рамка оценки усовершенствованных дефектов для Android -приложений (JAADS, оригинальное имя Джейд, переименованное в то, чтобы избежать потенциальной проблемы с товарным знаком), написанный в 2014 году. Jaadas - это инструмент, написанный на Java и Scala с силой SOOT, чтобы обеспечить как межпроцедурную, так и интрапроцедурную статическое анализ приложений Android. Его особенности включают анализ злоупотребления API, анализ локальной дениальной работы (Crash), анализ поток потока в стиле между процедурами (от намерения до чувствительного API, то есть получение посылки от намерения и используйте его для начала деятельности).
Jaadas также могут объединить Multidex в один и вообще анализировать их. Большинство возможностей обнаружения Jaadas можно определить в Groovy Config File и текстовом файле (источник и раковина SOOT).
Jaadas упакован в один архив JAR, и я предоставляю файл правил уязвимости по умолчанию. Есть два основных режима для Jaadas.
FullAnalysis выпускает полную мощность Jaadas и SOOT, включая межпроцедурный анализ всего применения и анализ межпроцедурного потока данных. Но это также может потреблять много времени и не может закончить на машинах с небольшой памятью (<16 ГБ). По умолчанию полномочий.
FastAnalysis обычно заканчивается менее чем за 1 минуту и предназначен для крупномасштабного партийного анализа. Анализ межпроцедуры отключен для достижения максимальной гибкости. В нормальных ситуациях этого режима достаточно для общего аудита.
-Фастанализ обеспечивает фасанализ и отключает фулнализ.
Командная строка для анализа: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -C опция -c должен быть предоставлен в качестве каталога для файлов конфигурации, включая правила Taint, источник и раковина, уязвимое описание API и так далее. Если вы не понимаете содержимое файлов конфигурации, не изменяйте его, оставьте его таким, как есть.
### -опция P -p опция Указывает каталог платформы Android, который обычно указывает на $ {android_sdk}/platforms/.
SOOT требует, чтобы конкретная версия Platform.JAR была представлена, например, если в вашей цели анализа есть целевые показатели = 22, то сажа будет искать платформы/Android-22/Android.jar, в противном случае вызовет ошибку. Если у вас нет конкретной банки, на самом деле вы можете просто сделать символическую в этом положении, указывая, что у вас уже есть, скажем, Android-16.jar, чтобы сделать саму счастливым. Это не повлияет на точность результата анализа.
-f опция Указывает APK, который будет проанализирован.
Jaadas выведет результат в списке в консоли, а также записывает результат json-ed на вывод/ каталог: {md5_of_input_apk} .txt. Образец можно найти в выходном каталоге этого репо: https://github.com/flankerhqd/jaadas/blob/master/output/92db77bbe1cae9004f11ef9d3d6cbf08.txt
Фрагмент:
}, {
"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)> "
}]}Чтобы избежать OOM, добавить опцию -xmx в командную линию, например, java -jar -xmx8192m jade -0.1.jar
Джаадас организован Грэдл. Run gradle fatJar в корне справочного каталога и однополосной JAR будет генерироваться по адресу ./jade/build/ Каждый каталог фактически представляет подмодуль GIT. Для простоты я объединяю их в те же корневые каталоги, и вы можете изменить их по своему желанию, отслеживать изменения сажи вверх по течению.
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-assesment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
Спасибо авторам сажи (https://github.com/sable/soot) за предоставление такой хорошей структуры.
Это всего лишь исследовательский прототип, используйте свой собственный риск. Результаты могут содержать ложные позитивы и ложные отрицательные из -за характера статического анализа. Не стесняйтесь вилка и потяните ее.
JDK> = 1,8 (должен)
Scala> = 2,11 протестирован