arguslab / Argus-SAF

Argus static analysis framework
Apache License 2.0
181 stars 49 forks source link

Index out of bound #47

Closed sangamk closed 6 years ago

sangamk commented 6 years ago

For somewhat large apps with large activities I always seem to get the same an IndexOutOfBoundException. I use component based analysis:

 ComponentBasedAnalysis.prepare(Set(apk))(FiniteDuration(5, TimeUnit.MINUTES))
 val cba = new ComponentBasedAnalysis(yard)

App I used: https://apkpure.com/peak-%E2%80%93-brain-games-training/com.brainbow.peak.app

The error:

java.lang.IndexOutOfBoundsException: 0
    at scala.collection.LinearSeqOptimized.apply(LinearSeqOptimized.scala:63)
    at scala.collection.LinearSeqOptimized.apply$(LinearSeqOptimized.scala:61)
    at scala.collection.immutable.List.apply(List.scala:86)
    at org.argus.jawa.alir.pta.rfa.ReachingFactsAnalysisHelper$.$anonfun$getUnknownObject$6(ReachingFactsAnalysisHelper.scala:166)
    at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:156)
    at org.argus.jawa.alir.pta.rfa.ReachingFactsAnalysisHelper$.getUnknownObject(ReachingFactsAnalysisHelper.scala:161)
    at org.argus.jawa.alir.pta.model.ModelCallHandler.doModelCall(ModelCallHandler.scala:126)
    at org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis$Callr.$anonfun$resolveCall$4(AndroidReachingFactsAnalysis.scala:86)
    at scala.collection.immutable.Set$Set1.foreach(Set.scala:95)
    at org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis$Callr.resolveCall(AndroidReachingFactsAnalysis.scala:75)
    at org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis$Callr.resolveCall(AndroidReachingFactsAnalysis.scala:56)
    at org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.jumpF$1(MonotoneDataFlowAnalysisFramework.scala:397)
    at org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.visitForward(MonotoneDataFlowAnalysisFramework.scala:424)
    at org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.calculateResult(MonotoneDataFlowAnalysisFramework.scala:437)
    at org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.visit(MonotoneDataFlowAnalysisFramework.scala:443)
    at org.argus.jawa.alir.dfa.InterIngredientProvider.doProcess$1(IngredientProviderImpl.scala:128)
    at org.argus.jawa.alir.dfa.InterIngredientProvider.process(IngredientProviderImpl.scala:156)
    at org.argus.jawa.alir.dfa.InterIngredientProvider.process(IngredientProviderImpl.scala:71)
    at org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$.build(MonotoneDataFlowAnalysisFramework.scala:450)
    at org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$.apply(MonotoneDataFlowAnalysisFramework.scala:95)
    at org.argus.jawa.alir.pta.rfa.ReachingFactsAnalysis.process(ReachingFactsAnalysis.scala:58)
    at org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis.build(AndroidReachingFactsAnalysis.scala:49)
    at org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$$anon$1.processElement(ComponentBasedAnalysis.scala:58)
    at org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$$anon$1.processElement(ComponentBasedAnalysis.scala:43)
    at org.argus.jawa.core.util.WorklistAlgorithm.run(WorklistAlgorithm.scala:40)
    at org.argus.jawa.core.util.WorklistAlgorithm.run$(WorklistAlgorithm.scala:36)
    at org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$$anon$1.run(ComponentBasedAnalysis.scala:43)
    at org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$.$anonfun$prepare$1(ComponentBasedAnalysis.scala:76)
    at org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$.$anonfun$prepare$1$adapted(ComponentBasedAnalysis.scala:40)
    at scala.collection.immutable.Set$Set1.foreach(Set.scala:95)
    at org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$.prepare(ComponentBasedAnalysis.scala:40)
    at iccparser.BaseAppParser.componentBasedGraph(BaseAppParser.scala:156)
    at Argus.run(Argus.scala:31)
    at MainKt.main(Main.kt:28)
ERROR@ComponentBasedAnalysis:Analyzing component com.brainbow.peak.app.ui.games.GamesListActivity has error: 0
scala.collection.LinearSeqOptimized.apply(LinearSeqOptimized.scala:63)
scala.collection.LinearSeqOptimized.apply$(LinearSeqOptimized.scala:61)
scala.collection.immutable.List.apply(List.scala:86)
org.argus.jawa.alir.pta.rfa.ReachingFactsAnalysisHelper$.$anonfun$getUnknownObject$6(ReachingFactsAnalysisHelper.scala:166)
scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:156)
org.argus.jawa.alir.pta.rfa.ReachingFactsAnalysisHelper$.getUnknownObject(ReachingFactsAnalysisHelper.scala:161)
org.argus.jawa.alir.pta.model.ModelCallHandler.doModelCall(ModelCallHandler.scala:126)
org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis$Callr.$anonfun$resolveCall$4(AndroidReachingFactsAnalysis.scala:86)
scala.collection.immutable.Set$Set1.foreach(Set.scala:95)
org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis$Callr.resolveCall(AndroidReachingFactsAnalysis.scala:75)
org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis$Callr.resolveCall(AndroidReachingFactsAnalysis.scala:56)
org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.jumpF$1(MonotoneDataFlowAnalysisFramework.scala:397)
org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.visitForward(MonotoneDataFlowAnalysisFramework.scala:424)
org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.calculateResult(MonotoneDataFlowAnalysisFramework.scala:437)
org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$Mdaf$1.visit(MonotoneDataFlowAnalysisFramework.scala:443)
org.argus.jawa.alir.dfa.InterIngredientProvider.doProcess$1(IngredientProviderImpl.scala:128)
org.argus.jawa.alir.dfa.InterIngredientProvider.process(IngredientProviderImpl.scala:156)
org.argus.jawa.alir.dfa.InterIngredientProvider.process(IngredientProviderImpl.scala:71)
org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$.build(MonotoneDataFlowAnalysisFramework.scala:450)
org.argus.jawa.alir.dfa.MonotoneDataFlowAnalysisFramework$.apply(MonotoneDataFlowAnalysisFramework.scala:95)
org.argus.jawa.alir.pta.rfa.ReachingFactsAnalysis.process(ReachingFactsAnalysis.scala:58)
org.argus.amandroid.alir.pta.reachingFactsAnalysis.AndroidReachingFactsAnalysis.build(AndroidReachingFactsAnalysis.scala:49)
org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$$anon$1.processElement(ComponentBasedAnalysis.scala:58)
org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$$anon$1.processElement(ComponentBasedAnalysis.scala:43)
org.argus.jawa.core.util.WorklistAlgorithm.run(WorklistAlgorithm.scala:40)
org.argus.jawa.core.util.WorklistAlgorithm.run$(WorklistAlgorithm.scala:36)
org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$$anon$1.run(ComponentBasedAnalysis.scala:43)
org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$.$anonfun$prepare$1(ComponentBasedAnalysis.scala:76)
org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$.$anonfun$prepare$1$adapted(ComponentBasedAnalysis.scala:40)
scala.collection.immutable.Set$Set1.foreach(Set.scala:95)
org.argus.amandroid.alir.componentSummary.ComponentBasedAnalysis$.prepare(ComponentBasedAnalysis.scala:40)
iccparser.BaseAppParser.componentBasedGraph(BaseAppParser.scala:156)
sangamk commented 6 years ago

It seems like the error is coming from this line in ReachingFactsAnalysisHelper. getParameterTypes is empty:

        else if(!calleeMethod.isStatic) calleeMethod.getSignature.getParameterTypes(i - 1)
fgwei commented 6 years ago

It seems a bug to handle indirect calls. I pushed a fix in develop branch, you can give a try.

sangamk commented 6 years ago

Thx, I tested it against two apps. It seems to be fixed. Will the fix be available on master (maven) or will I have to assemble the dev branch for now.

fgwei commented 6 years ago

I will push to master shortly and let you know.

fgwei commented 6 years ago

I pushed to master.