• 使用Intellij IDEA的 FlowDroid 安装&测试


    intellij + maven 配置FlowDroid

    FlowDroid是一款使用Java实现的针对Android的静态污点分析框架,发表于PLDI'2014。

    源码分为两部分:

    • soot-infoflow:通用的污点分析
    • soot-infoflow-android:建模安卓组件生命周期等

    依赖Soot和Heros:

    • Soot:起初是Java优化框架,现常被用于Java和安卓应用的分析、插桩、优化、可视化等(Call-graph construction, Def/use chain…)
    • Heros- IFDS框架:将函数间的数据流分析问题转化为图可达问题

    环境

    Intellij 2021.2.2  community

    jdk 1.8  。注意配置JAVA_HOME等环境变量

    android-studio-2021.1.1.22-windows,android sdk。注意android_home、%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools等环境变量配置。

    本地maven 3.8.5(非必须) 。注意配置相关环境变量MAVEN_HOME、本地仓库设置、修改settings。

    FlowDroid 2.9 

      releases见 https://github.com/secure-software-engineering/FlowDroid/releases

      源码是  Feb 28,2022版本 d8c80ac  ;或见云盘 

    环境变量设置

    可以每次执行时在terminal 

    linux:
    EXPORT ANDROID_JARS=<Android JAR folder>   the "platforms" directory inside your Android SDK installation folder
    EXPORT DROIDBENCH=<DroidBench folder>  the location of DroidBench, our micro-benchmark suite
    
    windows:
    
    SET ANDROID_JARS=C:\Users\Erio\AppData\Local\Android\Sdk\platforms
    ECHO %ANDROID_JARS%
    SET DROIDBENCH=C:\Program1\DroidBench-master\DroidBench-master
    ECHO %DROIDBENCH%

    或直接增加两个环境变量。

    ANDROID_JARS=C:\Users\Erio\AppData\Local\Android\Sdk\platforms

    DROIDBENCH=C:\Program1\DroidBench-master\DroidBench-master

    使用FlowDroid  Releases

    releases即提前编译、配置好的工具,可以直接使用。

    获取release有两种方式:

    1.使用maven将release添加到项目

        <dependencies>
            <dependency>
                <groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
                <artifactId>soot-infoflow</artifactId>
                <version>2.10.0</version>
            </dependency>
            <dependency>
                <groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
                <artifactId>soot-infoflow-summaries</artifactId>
                <version>2.10.0</version>
            </dependency>
            <dependency>
                <groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
                <artifactId>soot-infoflow-android</artifactId>
                <version>2.10.0</version>
            </dependency>
        </dependencies>

     2.从github下载

    https://github.com/secure-software-engineering/FlowDroid/releases

    若只想使用命令行工具,直接下载soot-infoflow-cmd-2.9.0-jar-with-dependencies.jar 即可

    使用例:

    java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar \
        -a <APK File> \
        -p <Android JAR folder> \
        -s <SourcesSinks file>

    使用源码编译构建 FlowDroid

    https://github.com/secure-software-engineering/FlowDroid  下载zip。

    使用intellij open为项目

    mvn -DskipTests install (关于maven相关指令 clean、compile、package、install、rf等等,可以百度下)。

    直接mvni nstall会报错,因为部分测试用的的apk,不在DroidBench中

    如果有问题可以 mvn clean,mvn -DskipTests install。

    build success

     

    PS:

    1.可以在module setting中设置整个文件夹为sources,或者只把想编译的module设置为sources。

    2.要使用ide自带的mvn,可以在右上角添加mvn configuration。只需要加参数  -DskipTests install

     

    测试

     单个apk测试

    参考 https://anemone.top/pl-FlowDroid%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%BB%8D%E5%92%8C%E8%AF%95%E7%94%A8/

    linux  $表示之前设置的环境变量;这里Droidbench也可以用环境变量,或者直接复制相关apk到项目目录下

    EXPORT ANDROID_JARS=<Android JAR folder>   the "platforms" directory inside your Android SDK installation folder
    EXPORT DROIDBENCH=<DroidBench folder>  the location of DroidBench, our micro-benchmark suite


    java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar -a DroidBench/apk/GeneralJava/Clone1.apk -p $ANDROID_JARS -s soot-infoflow-android/SourcesAndSinks.txt

    windows:
    注意两个环境变量使用% %。

       java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar -a %DroidBench%/apk/GeneralJava/Clone1.apk -p %ANDROID_JARS% -s soot-infoflow-android/SourcesAndSinks.txt

     在windows intellij,可以cmd,再引用环境变量地址% %;

    也可以直接用写死的地址比如 C:\Program1\DroidBench-master\DroidBench-master/apk/GeneralJava/Clone1.apk

     分析结果

    ...............................
    [main] INFO soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - Memory consumption after path building: 45 MB [main] INFO soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - Path reconstruction took 0 seconds [main] WARN soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - No results found. [main] INFO soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - Data flow solver took 0 seconds. Maximum memory consumption: 120 MB [main] INFO soot.jimple.infoflow.android.SetupApplication - Found 0 leaks

      多个apk

    可以用DROIDBENCH 所有的apk测试,需要修改项目的test部分

    javadoc api文档

    用winrar解压编译得到的  xxx-javadoc.jar即可得到相关文档。也可以下载release中的javadoc.jar。

    Javadoc是根据代码里的注释规范生成的

     可以从index.html开始阅读

    过程中遇到的问题

     使用mvn install,build failure

    test时报错 java.lang.RuntimeException: file 'C:\Program1\DroidBench-master\DroidBench-master\Aliasing/SimpleAliasing1.apk' does not exist!

    一开始以为是环境变量错误,修改%DROIDBENCH%后 mvn clean  mvn install。还是相同的问题。

    环境变量没有刷新。重启项目刷新。还是相同的问题。

    最后发现是Test使用的DROIDBENCH中的一部分apk不存在。就mvn -DskipTests install跳过test,后续用自己的apk测试

    关于使用本地maven 或intellij自带的maven

    如果为了操作简便,直接使用intellij自带的即可。

    如果考虑到和eclipse共享库和配置、避免maven和ide升级导致的问题等等,可以选择修改为本地的maven。

    这里我使用的是本地maven

     

     参考:

    官方文档:

    https://github.com/secure-software-engineering/FlowDroid  

    https://blogs.uni-paderborn.de/sse/tools/flowdroid/

    简介:

    https://zhuanlan.zhihu.com/p/79802252?from_voters_page=true

    https://anemone.top/pl-FlowDroid%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%BB%8D%E5%92%8C%E8%AF%95%E7%94%A8/

    https://e0hyl.github.io/BLOG-OF-E0/FlowDroid/

    https://segmentfault.com/a/1190000019977434

  • 相关阅读:
    模拟最烂的网速
    TableView编辑状态下跳转页面的崩溃处理
    Swift的Optional类型
    autolayout之后获取uiview的frame
    Swift中的闭包(Closure)[转]
    Swift1.2与Xcode6.3 beta
    python技巧31[python中使用enum][转]
    Python初学者的捷径[译]
    tornado+bootstrap急速搭建你自己的网站
    Windows下nginx+tomcat实现简单的负载均衡、动静分离等
  • 原文地址:https://www.cnblogs.com/lqerio/p/16016581.html
Copyright © 2020-2023  润新知