secure-software-engineering / FlowDroid

FlowDroid Static Data Flow Tracker
GNU Lesser General Public License v2.1
1.02k stars 292 forks source link

Met this error: Multiple application classes in app #650

Open Gao-Chuan opened 9 months ago

Gao-Chuan commented 9 months ago

I'm using this version of FlowDroid:

    implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow:2.12.0")
    implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-summaries:2.12.0")
    implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-android:2.12.0")
    implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-integration:2.12.0")
    implementation("de.fraunhofer.sit.sse.flowdroid:soot-infoflow-cmd:2.12.0")

Here is my code that triggered the error:

        // Run the data flow analysis
        InfoflowResults infoflow_results = app.runInfoflow();

Here is how I set the soot:

        // Start to init flowdroid
        File file = new File(apk_path);
        String apkPath = file.getAbsolutePath();

        final InfoflowAndroidConfiguration config = new InfoflowAndroidConfiguration();
        config.getAnalysisFileConfig().setTargetAPKFile(apkPath);
        config.getAnalysisFileConfig().setAndroidPlatformDir(platform_path);
//        To provide single view to analysis
        config.setMergeDexFiles(true);
//        Write analysis result to files for further analysis
        config.setWriteOutputFiles(true);
        config.getAnalysisFileConfig().setSourceSinkFile("res/SourcesAndSinks.txt");

        Options.v().set_whole_program(true);
        Options.v().set_process_multiple_dex(true);
        Options.v().set_allow_phantom_refs(true);
//      Less debug info
//        Options.v().set_verbose(false);

        Scene.v().loadNecessaryClasses();

        SetupApplication app = new SetupApplication(config);
        app.constructCallgraph();

Here's the SourceAndSink.txt

#### SOURCES
<class: void method(boolean, android.content.Context)>:0 -> _SOURCE_

#### SINKS

# Shared Preferences
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putInt(java.lang.String,int)> -> _SINK_
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putLong(java.lang.String,long)> -> _SINK_
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putString(java.lang.String,java.lang.String)> -> _SINK_
<android.content.SharedPreferences$Editor: android.content.SharedPreferences$Editor putBoolean(java.lang.String,boolean)> -> _SINK_

# File I/O
<java.io.FileOutputStream: void write(byte[])> -> _SINK_
<java.io.Writer: void write(java.lang.String)> -> _SINK_

# Network operations
<java.net.HttpURLConnection: java.io.OutputStream getOutputStream()> -> _SINK_
<okhttp3.OkHttpClient: okhttp3.Call newCall(okhttp3.Request)> -> _SINK_

More context log:

[main] INFO soot.jimple.infoflow.android.SetupApplication - Initializing Soot...
[main] INFO soot.jimple.infoflow.android.SetupApplication - Loading dex files...
[main] INFO soot.jimple.infoflow.android.SetupApplication - ARSC file parsing took 0.0270868 seconds
[main] INFO soot.jimple.infoflow.memory.MemoryWarningSystem - Registered a memory warning system for 7,236 MiB
[main] INFO soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator - Creating Android entry point for 74 components...
[main] WARN soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator - Cannot generate constructor for phantom class androidx.startup.InitializationProvider
[main] ERROR soot.jimple.infoflow.android.SetupApplication - Could not calculate callback methods
java.lang.RuntimeException: Multiple application classes in app
    at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.initializeApplicationClass(AndroidEntryPointCreator.java:344)
    at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.createDummyMainInternal(AndroidEntryPointCreator.java:148)
    at soot.jimple.infoflow.entryPointCreators.BaseEntryPointCreator.createDummyMain(BaseEntryPointCreator.java:154)
    at soot.jimple.infoflow.android.entryPointCreators.AbstractAndroidEntryPointCreator.createDummyMain(AbstractAndroidEntryPointCreator.java:32)
    at soot.jimple.infoflow.android.SetupApplication.createMainMethod(SetupApplication.java:1127)
    at soot.jimple.infoflow.android.SetupApplication.calculateCallbackMethods(SetupApplication.java:719)
    at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:528)
    at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:475)
    at soot.jimple.infoflow.android.SetupApplication.processEntryPoint(SetupApplication.java:1566)
    at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1532)
    at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1479)
    at org.example.Main.main(Main.java:156)
[main] INFO soot.jimple.infoflow.memory.MemoryWarningSystem - Shutting down the memory warning system...
Exception in thread "main" java.lang.RuntimeException: Multiple application classes in app
    at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.initializeApplicationClass(AndroidEntryPointCreator.java:344)
    at soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointCreator.createDummyMainInternal(AndroidEntryPointCreator.java:148)
    at soot.jimple.infoflow.entryPointCreators.BaseEntryPointCreator.createDummyMain(BaseEntryPointCreator.java:154)
    at soot.jimple.infoflow.android.entryPointCreators.AbstractAndroidEntryPointCreator.createDummyMain(AbstractAndroidEntryPointCreator.java:32)
    at soot.jimple.infoflow.android.SetupApplication.createMainMethod(SetupApplication.java:1127)
    at soot.jimple.infoflow.android.SetupApplication.calculateCallbackMethods(SetupApplication.java:719)
    at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:528)
    at soot.jimple.infoflow.android.SetupApplication.calculateCallbacks(SetupApplication.java:475)
    at soot.jimple.infoflow.android.SetupApplication.processEntryPoint(SetupApplication.java:1566)
    at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1532)
    at soot.jimple.infoflow.android.SetupApplication.runInfoflow(SetupApplication.java:1479)
    at org.example.Main.main(Main.java:156)

> Task :Main.main() FAILED
hkkrrr commented 3 months ago

hi. I've encountered the same issue as you. Have you resolved it?