이 저장소는 FlowDroid 데이터 흐름 분석 도구를 호스팅합니다. FlowDroid는 Android 앱 및 Java 프로그램에서 데이터 흐름을 정적으로 계산합니다. 그 목표는 연구자와 실무자에게 자체 연구 프로젝트 및 제품 구현을 기반으로 도구 및 도서관을 제공하는 것입니다. 우리는 Flowdroid가 이제 산업뿐만 아니라 학계에서 널리 사용되고 있음을 알게되어 기쁩니다.
Maven을 사용하여 FlowDroid를 직접 구축하거나 GitHub에서 여기에서 릴리스를 다운로드 할 수 있습니다.
FlowDroid는 이제 Maven Central에서 찾을 수 있습니다. Maven 빌드에서 FlowDroid를 사용하려면 pom.xml 파일에 다음을 포함하십시오. 특정 문제가 없으면 최신 버전을 사용하는 것이 좋습니다. 이 경우 알려주십시오 (아래 문의 참조).
<dependencies>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-summaries</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-android</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
FlowDroid를 빠르게 시작하려면 아래의 "데이터 흐름 추적기 사용"을보십시오. 명령 줄 도구 만 사용하려면 "Soot-Infoflow-CMD-Jar-with-dependencies.jar"파일 만 있으면됩니다.
릴리스 페이지에는 공식적으로 게시 한 각 릴리스에 대한 모든 사전 제작 된 JAR 파일이 포함되어 있습니다. 특정 문제가 없으면 최신 버전을 사용하는 것이 좋습니다. 이 경우 알려주십시오 (아래 문의 참조).
FlowDroid를 빠르게 시작하려면 아래의 "데이터 흐름 추적기 사용"을보십시오. 명령 줄 도구 만 사용하려면 "Soot-Infoflow-CMD-Jar-with-dependencies.jar"파일 만 있으면됩니다.
요구 사항 :
처음으로 Flowdroid는 Parent Module (즉 프로젝트의 루트 폴더)에서 구축해야합니다. 전체 테스트 스위트는 약 30 분이 걸리므로 다음을 구축 할 때 테스트를 비활성화하는 것이 좋습니다.
mvn install -DskipTests테스트를 활성화하여 빌드를 실행하려면 몇 가지 추가 단계가 필요합니다.
rt.jar 기본 위치에 있어야합니다 (또는 rt.jar $JAVA_HOME/lib/ 내부에 배치하십시오).--recursive 수용 체로 복제)ANDROID_JARS 환경 변수는 Android 플랫폼 디렉토리 (일반적으로 $HOME/Android/Sdk/platforms/ )로 설정해야합니다.우리는 Eclipse IDE를 사용하여 Flowdroid에서 작업합니다. 모든 모듈은 Eclipse 프로젝트이며 Eclipse IDE로 가져올 수 있습니다. 그것들은 거기에 Maven 프로젝트로 나타나며 Eclipse는 필요한 모든 의존성을 다운로드해야합니다.
명령 줄 인터페이스 (Module Soot-Infoflow-CMD)를 통해 FlowDroid를 사용하거나 라이브러리로 사용할 수 있습니다. 일반적으로 무언가를 구현하고 구성 요소로 데이터 흐름 트래커가 필요한 경우 FlowDroid 모듈을 JAR 파일로 통합하여 더 나은 것이 좋습니다. 결과가 빨리 필요한 경우 명령 줄 인터페이스를 실행하십시오.
FlowDroid는 Windows, Mac OS 및 Linux에서 지원됩니다.
명령 줄 도구를 사용하여 데이터 흐름 트래커를 실행하려면 다음 명령을 사용할 수 있습니다.
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar
-a <APK File>
-p <Android JAR folder>
-s <SourcesSinks file>
Android Jar 폴더는 Android SDK 설치 폴더 내부의 "플랫폼"디렉토리입니다. 소스 및 싱크에 대한 정의 파일은 민감한 정보의 출처로 취급해야 할 사항과 외부 세계에 민감한 데이터를 유출 할 수있는 싱크로 취급 해야하는 내용을 정의합니다. 이러한 정의는 사용 사례에 따라 다릅니다. 그러나 개인 정보 문제를 찾고 있다면 "Soot-Infoflow-Android"폴더의 기본 파일 "sourcesandsinks.txt"를 시작점으로 사용할 수 있습니다.
명령 줄 도구의 다른 옵션을 찾으려면 "-help"옵션으로 도구를 실행하거나 mainclass.initializecommandlineoptions () "메소드를 소스 코드 (module soot-infoflow-cmd)를 살펴볼 수 있습니다.
일부 앱의 경우 FlowDroid가 큰 앱의 경우 매우 오래 걸립니다. 성능, 정밀도 및 리콜간에 트레이드 오프를 구성 할 수있는 다양한 옵션이 있습니다.
-ns 정적 필드에서 테인트를 추적하지 않고 정적 초기화기를 무시합니다.-ne 예외적 인 흐름을 추적하지 마십시오.시간 초과를 정의 할 수도 있습니다.
-dt N n 초 후에 데이터 흐름 분석을 중단하고 지금까지 얻은 결과를 반환합니다.-ct N n 초 후 콜 그라프 구조 중에 콜백 컬렉션을 중단하고 지금까지 (불완전한) 콜 그라프를 계속 구성합니다.-rt N n 초 후에 결과 컬렉션을 중단하고 지금까지 얻은 결과를 반환합니다.시간 초과는 부가 적입니다. 3 단계 모두 도구가 결과를 반환하고 전달할 수 있도록 시간 초과를 완료하거나 시간 초과해야합니다.
Flowdroid를 자신의 솔루션에 라이브러리로 포함하려면 해당 JAR 파일을 직접 참조 할 수 있습니다. Maven을 사용하는 경우 FlowDroid를 참조로 추가하고 Maven이 필요한 모든 구성 요소를 해결할 수 있습니다. 분석하려는 내용 (Android 앱 또는 Java 프로그램)에 따라 종속성이 다를 수 있습니다.
이 섹션에서는 FlowDroid를 사용하여 일반적인 작업을위한 코드 및 구성 스 니펫을 수집합니다.
간단한 데이터 흐름 분석을 실행하려면 다음 코드를 사용할 수 있습니다. 자리 표시 자 androidJarFolder Android SDK 설치의 platforms 디렉토리의 위치로 교체해야합니다. 자리 표시 자 apkPath APK 파일의 전체 파일 경로를 나타냅니다. 데이터 흐름 결과는 InfoflowResults 클래스를 통해 액세스 할 수 있습니다.
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
데이터 흐름 분석은 기본 Stubdroid 라이브러리 요약을 사용합니다. 기본 구성에서 이러한 요약은 summariesManual 폴더에 저장되며 변경할 필요가 없습니다.
Flowdroid의 작동 방식에 대한 세부 사항을 읽으려면 Steven Arzt의 박사 학위 논문이 시작하기에 좋은 장소입니다.
기부금은 항상 환영합니다. Flowdroid는 우리가 연구 커뮤니티 전체에 유용하기를 희망하여 출판 한 오픈 소스 프로젝트입니다. 공식 코드 저장소에서보고 싶은 새 기능이나 버그 수정이 있으시면 GitHub에서 Merge 요청을 열고 귀하가 수행 한 작업에 대한 간단한 설명을 통해 저희에게 문의하십시오 (아래 참조).
FlowDroid는 LGPL 라이센스에 따라 라이센스 파일을 참조하십시오. 이는 기본적으로 도구를 자유롭게 사용할 수 있음을 의미합니다 (상업용 폐쇄 소스 프로젝트에서도). 그러나 도구를 확장하거나 수정하면 LGPL에서도 변경 사항을 사용할 수 있어야합니다. 이를 통해 커뮤니티 노력으로서 도구를 계속 개선 할 수 있습니다.
문제가 발생하면 그을음 메일 링리스트에 도움을 요청할 수 있습니다. [email protected]로 문의하십시오.