이것은 2014 년에 작성된 Android 응용 프로그램 (JAAD, JAADS, JAADS, Original Name Jade Renamed)입니다. Jaadas는 안드로이드 애플리케이션에 대한 해석 및 프로세스 내 정적 분석을 제공하기 위해 Soot의 힘을 가진 Java 및 Scala로 작성된 도구입니다. 이 기능에는 API 오용 분석, 로컬 부대 서비스 (의도 충돌) 분석, 절차 간 스타일 오 테인트 흐름 분석 (의도에서 민감한 API, 즉 의도로부터의 의도를 얻을 수있는 정보를 얻고 활동을 시작하는 데 사용)가 포함됩니다.
Jaadas는 또한 Multidex를 하나로 결합하여 완전히 분석 할 수 있습니다. Jaadas의 탐지 기능의 대부분은 Groovy Config 파일 및 텍스트 파일 (Soot의 소스 및 싱크 파일)으로 정의 할 수 있습니다.
Jaadas는 단일 JAR 아카이브에 포장되어 있으며 기본 취약성 규칙 파일을 제공합니다. Jaadas에는 두 가지 주요 모드가 있습니다.
FullAnalysis 절차 간 전체 신청 분석 및 절차 간 데이터 흐름 분석을 포함하여 Jaadas 및 Soot의 전체 힘을 공개합니다. 그러나 많은 시간을 소비 할 수 있으며 메모리가 작은 기계 (<16GB)에서 마무리하지 않을 수도 있습니다. 기본값은 전체 모드입니다.
FastAnalysis 일반적으로 1 분 이내에 마무리되며 대규모 배치 분석을위한 것입니다. Maxmium 유연성을 달성하기 위해 절차 간 분석이 비활성화됩니다. 정상적인 상황 에서이 모드는 일반 감사에 충분합니다.
-fastanalysis는 fastanalysis를 가능하게하고 fullanalysis를 비활성화합니다.
분석을위한 명령 줄 : java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -C 옵션 -c는 오염 규칙, 소스 및 싱크, 취약한 API 설명 등을 포함한 구성 파일의 디렉토리로 제공되어야합니다. 구성 파일 내용을 이해하지 못하면 수정하지 마십시오. 그대로 두십시오.
### -P 옵션 -p 옵션은 Android 플랫폼 디렉토리를 지정합니다. 일반적으로 $ {android_sdk}/플랫폼/를 가리 킵니다.
Soot는 특정 버전의 Platform.jar가 제시되어야합니다 (예 : 분석 대상에 TargetSDK = 22가있는 경우 Soot는 Platforms/Android-22/Android.jar를 찾을 것입니다. 그렇지 않으면 오류가 발생합니다. 특정 항아리가 없다면 실제로 Android-16.jar를 지적하는 위치를 상징 할 수 있습니다. 분석 결과 정밀도에 영향을 미치지 않습니다.
-f 옵션 분석 할 APK를 지정합니다.
Jaadas는 결과를 콘솔로 목록에 출력하고 JSON-ED 결과를 출력/ 디렉토리에 씁니다. {MD5_OF_INPUT_APK} .txt. 샘플은이 repo의 출력 디렉토리에서 찾을 수 있습니다 : 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 옵션을 추가하십시오.
Jaadas는 Gradle에 의해 조직됩니다. 소스 디렉토리의 루트에서 gradle fatJar 실행하고 ./jade/build/에서 단일 구분 항아리가 생성됩니다. 각 디렉토리는 원래 git 하위 모듈을 나타냅니다. 단순화를 위해 동일한 루트 디렉토리로 결합하여 원하는대로 변경할 수 있습니다.
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-assessment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
좋은 프레임 워크를 제공해 주신 Soot Authors (https://github.com/sable/soot)에게 감사드립니다.
이것은 단지 연구 프로토 타입 일 뿐이며 자신의 위험에 사용됩니다. 결과에는 정적 분석의 특성으로 인해 잘못된 양성 및 잘못된 부정이 포함될 수 있습니다. 자유롭게 포크하고 당기십시오.
jdk> = 1.8 (필수)
Scala> = 2.11 테스트