├── .gitignore ├── .gitmodules ├── .project ├── .settings └── org.eclipse.m2e.core.prefs ├── LICENSE ├── README.MD ├── pom.xml ├── soot-infoflow-android ├── .classpath ├── .gitattributes ├── .gitignore ├── .project ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.eclipse.m2e.core.prefs ├── AndroidCallbacks.txt ├── SourcesAndSinks.txt ├── SourcesAndSinks_SharedPrefsOnly.txt ├── iccta_testdata_ic3_results │ ├── Apps_AND_IC3Results_MAPPING.txt │ ├── de.ecspride_1.txt │ ├── edu.mit.icc_action_string_operations_1.txt │ ├── edu.mit.icc_broadcast_programmatic_intentfilter_1.txt │ ├── edu.mit.icc_component_not_in_manifest_1.txt │ ├── edu.mit.icc_componentname_class_constant_1.txt │ ├── edu.mit.icc_concat_action_string_1.txt │ ├── edu.mit.icc_event_ordering_1.txt │ ├── edu.mit.icc_intent_component_name_1.txt │ ├── edu.mit.icc_intent_passed_through_api_1.txt │ ├── edu.mit.icc_non_constant_class_object_1.txt │ ├── edu.mit.icc_pass_action_string_through_api_1.txt │ ├── edu.mit.icc_service_messages_1.txt │ ├── edu.mit.icc_unresolvable_intent_1.txt │ ├── edu.mit.shared_preferences_1.txt │ ├── edu.mit.to_components_share_memory_1.txt │ └── lu.uni.snt.serval_1.txt ├── insecureBank │ └── InsecureBank.apk ├── lib │ ├── junit.jar │ ├── org.hamcrest.core_1.3.0.jar │ └── protobuf-java-2.5.0.jar ├── pom.xml ├── schema │ ├── FlowDroidConfiguration.xsd │ └── SourcesAndSinks.xsd ├── src │ └── soot │ │ └── jimple │ │ └── infoflow │ │ ├── android │ │ ├── InfoflowAndroidConfiguration.java │ │ ├── SetupApplication.java │ │ ├── axml │ │ │ ├── AXmlAttribute.java │ │ │ ├── AXmlColorValue.java │ │ │ ├── AXmlComplexValue.java │ │ │ ├── AXmlDocument.java │ │ │ ├── AXmlElement.java │ │ │ ├── AXmlHandler.java │ │ │ ├── AXmlNamespace.java │ │ │ ├── AXmlNode.java │ │ │ ├── AXmlTypes.java │ │ │ ├── ApkHandler.java │ │ │ ├── flags │ │ │ │ ├── BitwiseFlagSystem.java │ │ │ │ └── InputType.java │ │ │ └── parsers │ │ │ │ ├── AXML20Parser.java │ │ │ │ ├── AXmlConstants.java │ │ │ │ ├── AbstractBinaryXMLFileParser.java │ │ │ │ └── IBinaryXMLFileParser.java │ │ ├── callbacks │ │ │ ├── AbstractCallbackAnalyzer.java │ │ │ ├── AndroidCallbackDefinition.java │ │ │ ├── ComponentReachableMethods.java │ │ │ ├── DefaultCallbackAnalyzer.java │ │ │ ├── FastCallbackAnalyzer.java │ │ │ ├── filters │ │ │ │ ├── AbstractCallbackFilter.java │ │ │ │ ├── AlienFragmentFilter.java │ │ │ │ ├── AlienHostComponentFilter.java │ │ │ │ ├── ApplicationCallbackFilter.java │ │ │ │ ├── ICallbackFilter.java │ │ │ │ └── UnreachableConstructorFilter.java │ │ │ └── xml │ │ │ │ ├── CollectedCallbacks.java │ │ │ │ └── CollectedCallbacksSerializer.java │ │ ├── config │ │ │ ├── SootConfigForAndroid.java │ │ │ ├── XMLConfigurationParser.java │ │ │ ├── XMLConfigurationWriter.java │ │ │ └── XMLConstants.java │ │ ├── data │ │ │ ├── AndroidMemoryManager.java │ │ │ ├── AndroidMethod.java │ │ │ ├── CategoryDefinition.java │ │ │ └── parsers │ │ │ │ ├── CSVPermissionMethodParser.java │ │ │ │ ├── CategorizedAndroidSourceSinkParser.java │ │ │ │ ├── IPermissionMethodParser.java │ │ │ │ ├── PScoutPermissionMethodParser.java │ │ │ │ └── PermissionMethodParser.java │ │ ├── entryPointCreators │ │ │ ├── AbstractAndroidEntryPointCreator.java │ │ │ ├── AndroidEntryPointConstants.java │ │ │ ├── AndroidEntryPointCreator.java │ │ │ ├── AndroidEntryPointUtils.java │ │ │ ├── DummyMainFieldElementTag.java │ │ │ └── components │ │ │ │ ├── AbstractComponentEntryPointCreator.java │ │ │ │ ├── ActivityEntryPointCreator.java │ │ │ │ ├── ActivityEntryPointInfo.java │ │ │ │ ├── BroadcastReceiverEntryPointCreator.java │ │ │ │ ├── ComponentEntryPointCollection.java │ │ │ │ ├── ComponentEntryPointInfo.java │ │ │ │ ├── ContentProviderEntryPointCreator.java │ │ │ │ ├── FragmentEntryPointCreator.java │ │ │ │ ├── ServiceConnectionEntryPointCreator.java │ │ │ │ ├── ServiceEntryPointCreator.java │ │ │ │ └── ServiceEntryPointInfo.java │ │ ├── iccta │ │ │ ├── App.java │ │ │ ├── Ic3Data.java │ │ │ ├── Ic3Provider.java │ │ │ ├── Ic3ResultLoader.java │ │ │ ├── IccInstrumentDestination.java │ │ │ ├── IccInstrumenter.java │ │ │ ├── IccLink.java │ │ │ ├── IccLinkProvider.java │ │ │ ├── IccRedirectionCreator.java │ │ │ └── MessageHandler.java │ │ ├── manifest │ │ │ ├── BaseProcessManifest.java │ │ │ ├── ComponentType.java │ │ │ ├── IActivity.java │ │ │ ├── IAndroidApplication.java │ │ │ ├── IAndroidComponent.java │ │ │ ├── IBroadcastReceiver.java │ │ │ ├── IComponentContainer.java │ │ │ ├── IContentProvider.java │ │ │ ├── IManifestHandler.java │ │ │ ├── IService.java │ │ │ ├── ProcessManifest.java │ │ │ ├── binary │ │ │ │ ├── AbstractBinaryAndroidComponent.java │ │ │ │ ├── BinaryAndroidApplication.java │ │ │ │ ├── BinaryManifestActivity.java │ │ │ │ ├── BinaryManifestBroadcastReceiver.java │ │ │ │ ├── BinaryManifestContentProvider.java │ │ │ │ └── BinaryManifestService.java │ │ │ └── containers │ │ │ │ ├── EagerComponentContainer.java │ │ │ │ └── EmptyComponentContainer.java │ │ ├── resources │ │ │ ├── ARSCFileParser.java │ │ │ ├── AbstractResourceParser.java │ │ │ ├── IResourceHandler.java │ │ │ ├── LayoutFileParser.java │ │ │ └── controls │ │ │ │ ├── AndroidLayoutControl.java │ │ │ │ ├── EditTextControl.java │ │ │ │ ├── GenericLayoutControl.java │ │ │ │ └── LayoutControlFactory.java │ │ ├── results │ │ │ └── xml │ │ │ │ ├── InfoflowResultsSerializer.java │ │ │ │ └── XmlConstants.java │ │ └── source │ │ │ ├── AccessPathBasedSourceSinkManager.java │ │ │ ├── AndroidSourceSinkManager.java │ │ │ ├── ConfigurationBasedCategoryFilter.java │ │ │ ├── UnsupportedSourceSinkFormatException.java │ │ │ └── parsers │ │ │ └── xml │ │ │ ├── AbstractXMLSourceSinkParser.java │ │ │ ├── ResourceUtils.java │ │ │ ├── XMLConstants.java │ │ │ └── XMLSourceSinkParser.java │ │ └── collections │ │ └── codeOptimization │ │ └── StringResourcesResolver.java ├── test │ └── soot │ │ └── jimple │ │ └── infoflow │ │ └── android │ │ └── test │ │ ├── BaseJUnitTests.java │ │ ├── droidBench │ │ ├── AliasingTest.java │ │ ├── AndroidSpecificTest.java │ │ ├── ArrayAndListTest.java │ │ ├── CallbackTest.java │ │ ├── EmulatorDetectionTest.java │ │ ├── FieldAndObjectSensitivityTest.java │ │ ├── GeneralJavaTest.java │ │ ├── ImplicitFlowTest.java │ │ ├── InterAppCommunicationTest.java │ │ ├── InterComponentCommunicationTest.java │ │ ├── JUnitTests.java │ │ ├── LifecycleTest.java │ │ ├── ReflectionICCTest.java │ │ ├── ReflectionTest.java │ │ ├── ThreadingTest.java │ │ ├── backward │ │ │ ├── AliasingTest.java │ │ │ ├── AndroidSpecificTest.java │ │ │ ├── ArrayAndListTest.java │ │ │ ├── CallbackTest.java │ │ │ ├── EmulatorDetectionTest.java │ │ │ ├── FieldAndObjectSensitivityTest.java │ │ │ ├── GeneralJavaTest.java │ │ │ ├── ImplicitFlowTest.java │ │ │ ├── InterAppCommunicationTest.java │ │ │ ├── InterComponentCommunicationTest.java │ │ │ ├── LifecycleTest.java │ │ │ ├── ReflectionICCTest.java │ │ │ ├── ReflectionTest.java │ │ │ └── ThreadingTest.java │ │ └── forward │ │ │ ├── AliasingTest.java │ │ │ ├── AndroidSpecificTest.java │ │ │ ├── ArrayAndListTest.java │ │ │ ├── CallbackTest.java │ │ │ ├── EmulatorDetectionTest.java │ │ │ ├── FieldAndObjectSensitivityTest.java │ │ │ ├── GeneralJavaTest.java │ │ │ ├── ImplicitFlowTest.java │ │ │ ├── InterAppCommunicationTest.java │ │ │ ├── InterComponentCommunicationTest.java │ │ │ ├── LifecycleTest.java │ │ │ ├── ReflectionICCTest.java │ │ │ ├── ReflectionTest.java │ │ │ └── ThreadingTest.java │ │ ├── insecureBank │ │ └── InsecureBankTests.java │ │ ├── manifest │ │ └── ProcessManifestTest.java │ │ ├── otherAPKs │ │ ├── AlwaysShortenTests.java │ │ ├── JUnitTests.java │ │ └── OtherAPKTests.java │ │ ├── sourceToSinks │ │ ├── JUnitTests.java │ │ └── SourceToSinksTest.java │ │ └── xmlParser │ │ ├── SigToAndroidMethodTest.java │ │ └── XmlParserTest.java ├── testAPKs │ ├── 9458cfb51c90130938abcef7173c3f6d44a02720.apk │ ├── FlowDroidAliasActivity.apk │ ├── ReturnParameterTest.apk │ └── SourceSinkDefinitions │ │ ├── SourceToSink1.apk │ │ ├── SourceToSink2.apk │ │ ├── SourceToSink3.apk │ │ ├── SourceToSink4.apk │ │ ├── SourceToSink5.apk │ │ ├── SourceToSink6.apk │ │ ├── sourcesAndSinks.xml │ │ └── sourcesAndSinksOldFormat.xml └── testXmlParser │ ├── additionalFlows.xml │ ├── complete.txt │ ├── complete.xml │ ├── completeOld.txt │ ├── empty.txt │ ├── empty.xml │ ├── invalidReturnCallType.xml │ ├── missingParts.xml │ ├── missingPartsOld.txt │ ├── notValid.xml │ └── returnCallType.xml ├── soot-infoflow-cmd ├── .classpath ├── .gitignore ├── .project ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.eclipse.m2e.core.prefs ├── build │ └── .gitignore ├── pom.xml ├── schema │ ├── FlowDroidConfiguration.xsd │ └── SourcesAndSinks.xsd ├── sootOutput │ ├── android.app.Activity.jimple │ ├── android.content.ServiceConnection.jimple │ ├── de.fraunhofer.sit.deserializationvuln.BuildConfig.jimple │ ├── de.fraunhofer.sit.deserializationvuln.MainActivity.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$attr.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$color.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$drawable.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$id.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$layout.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$mipmap.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$string.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$style.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R$styleable.jimple │ ├── de.fraunhofer.sit.deserializationvuln.R.jimple │ └── dummyMainClass.jimple └── src │ └── soot │ └── jimple │ └── infoflow │ └── cmd │ ├── AbortAnalysisException.java │ └── MainClass.java ├── soot-infoflow-integration ├── .classpath ├── .gitignore ├── .project ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.eclipse.m2e.core.prefs ├── SourcesAndSinks_GeoLocationNetworkOnly.txt ├── pom.xml ├── res │ ├── AndroidRiverSourcesAndSinks.xml │ ├── MultipleSinkDefs.xml │ ├── OutputStreamAndWriters.xml │ └── RiverSourcesAndSinks.xml ├── test │ └── soot │ │ └── jimple │ │ └── infoflow │ │ ├── collections │ │ └── test │ │ │ ├── AliasListTestCode.java │ │ │ ├── AliasMapTestCode.java │ │ │ ├── ArrayTestCode.java │ │ │ ├── CollectionsTestCode.java │ │ │ ├── Helper.java │ │ │ ├── IteratorTestCode.java │ │ │ ├── JSONTestCode.java │ │ │ ├── ListAddAllItselfTestCode.java │ │ │ ├── SimpleListTestCode.java │ │ │ ├── SimpleMapTestCode.java │ │ │ ├── SimpleMultimapTestCode.java │ │ │ ├── SimpleQueueTestCode.java │ │ │ ├── SimpleStackTestCode.java │ │ │ ├── SimpleTableTestCode.java │ │ │ ├── SimpleVectorTestCode.java │ │ │ └── junit │ │ │ ├── AliasListTests.java │ │ │ ├── AliasMapTests.java │ │ │ ├── AndroidTests.java │ │ │ ├── ArrayTests.java │ │ │ ├── CollectionsTests.java │ │ │ ├── FlowDroidTest.java │ │ │ ├── FlowDroidTests.java │ │ │ ├── IntervalTests.java │ │ │ ├── IteratorTests.java │ │ │ ├── JSONTests.java │ │ │ ├── ListAddAllItselfTests.java │ │ │ ├── SimpleListTests.java │ │ │ ├── SimpleMapTests.java │ │ │ ├── SimpleMultimapTests.java │ │ │ ├── SimpleQueueTests.java │ │ │ ├── SimpleStackTests.java │ │ │ ├── SimpleTableTests.java │ │ │ ├── SimpleVectorTests.java │ │ │ └── inherited │ │ │ ├── infoflow │ │ │ ├── ArrayTests.java │ │ │ ├── ListTests.java │ │ │ ├── MapTests.java │ │ │ ├── QueueTests.java │ │ │ ├── SetTests.java │ │ │ └── VectorTests.java │ │ │ └── infoflowSummaries │ │ │ └── SummaryTaintWrapperTests.java │ │ └── integration │ │ └── test │ │ ├── MultipleSinkTestCode.java │ │ ├── OutputStreamTestCode.java │ │ ├── RiverTestCode.java │ │ └── junit │ │ ├── AndroidRegressionTests.java │ │ ├── BackwardAndroidRegressionTests.java │ │ └── river │ │ ├── AndroidRiverTests.java │ │ ├── BaseJUnitTests.java │ │ ├── EasyTaintWrapperRiverTests.java │ │ ├── EasyTaintWrapperRiverWithoutPathsTests.java │ │ ├── MultipleSinkTests.java │ │ ├── MultipleSinksWithoutPathsTest.java │ │ ├── OutputStreamTests.java │ │ ├── RiverBaseJUnitTests.java │ │ ├── RiverTests.java │ │ ├── SummaryTaintWrapperRiverTests.java │ │ └── SummaryTaintWrapperRiverWithoutPathsTests.java └── testAPKs │ ├── Collections │ ├── AppWithConstantFields.apk │ └── StringResourcesTest.apk │ ├── ConditionalFlowTest.apk │ ├── CoordinatesToURLParameter.apk │ ├── ExternalCacheDirTest.apk │ ├── ExternalFileWithNativeName.apk │ ├── KotlinCollectionApp.apk │ ├── MapClearTest.apk │ ├── PrintWriterTest.apk │ ├── ThreadRunnable.apk │ ├── ThreadRunnableIndirect.apk │ ├── TypeHierarchyTest.apk │ ├── XMLCallbackAPI33.apk │ ├── flowsensitiveOverwrite.apk │ └── identityOverObjectInit.apk ├── soot-infoflow-summaries ├── .classpath ├── .gitignore ├── .project ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.eclipse.m2e.core.prefs ├── build │ └── .gitignore ├── pom.xml ├── schema │ ├── ClassSummary.xsd │ └── SummaryMetaData.xsd ├── src │ └── soot │ │ └── jimple │ │ └── infoflow │ │ ├── collections │ │ ├── data │ │ │ ├── IndexConstraint.java │ │ │ └── KeyConstraint.java │ │ ├── parser │ │ │ └── CollectionXMLConstants.java │ │ └── taintWrappers │ │ │ └── PrioritizingMethodSummaryProvider.java │ │ └── methodSummary │ │ ├── DefaultSummaryConfig.java │ │ ├── Main.java │ │ ├── data │ │ ├── factory │ │ │ └── SourceSinkFactory.java │ │ ├── provider │ │ │ ├── AbstractMethodSummaryProvider.java │ │ │ ├── ConcurrentEagerSummaryProvider.java │ │ │ ├── ConcurrentLazySummaryProvider.java │ │ │ ├── ConcurrentMergingSummaryProvider.java │ │ │ ├── EagerSummaryProvider.java │ │ │ ├── IMethodSummaryProvider.java │ │ │ ├── LazySummaryProvider.java │ │ │ ├── MemorySummaryProvider.java │ │ │ ├── MergingSummaryProvider.java │ │ │ └── XMLSummaryProvider.java │ │ ├── sourceSink │ │ │ ├── AbstractFlowSinkSource.java │ │ │ ├── ConstraintType.java │ │ │ ├── FlowClear.java │ │ │ ├── FlowConstraint.java │ │ │ ├── FlowSink.java │ │ │ ├── FlowSource.java │ │ │ └── InvalidFlowSpecificationException.java │ │ └── summary │ │ │ ├── AbstractMethodSummary.java │ │ │ ├── ClassMethodSummaries.java │ │ │ ├── ClassSummaries.java │ │ │ ├── ConcurrentClassSummaries.java │ │ │ ├── GapDefinition.java │ │ │ ├── ImmutableClassSummaries.java │ │ │ ├── ImmutableMethodSummaries.java │ │ │ ├── ImplicitLocation.java │ │ │ ├── IsAliasType.java │ │ │ ├── MethodClear.java │ │ │ ├── MethodFlow.java │ │ │ ├── MethodSummaries.java │ │ │ ├── SourceSinkType.java │ │ │ └── SummaryMetaData.java │ │ ├── generator │ │ ├── IClassSummaryHandler.java │ │ ├── ISummaryInfoflow.java │ │ ├── SummaryGenerationTaintWrapper.java │ │ ├── SummaryGenerator.java │ │ ├── SummaryGeneratorConfiguration.java │ │ ├── SummaryGeneratorFactory.java │ │ ├── SummaryInfoflow.java │ │ ├── SummaryNativeCallHandler.java │ │ └── gaps │ │ │ ├── AbstractGapManager.java │ │ │ ├── ConcurrentGapManager.java │ │ │ ├── GapManager.java │ │ │ ├── IGapManager.java │ │ │ └── NullGapManager.java │ │ ├── handler │ │ └── SummaryTaintPropagationHandler.java │ │ ├── postProcessor │ │ ├── InfoflowResultPostProcessor.java │ │ ├── InvalidPathBuilderStateException.java │ │ ├── SummaryFlowCompactor.java │ │ ├── SummaryPathBuilder.java │ │ ├── SummaryPathBuilderContext.java │ │ └── SummarySourceContextAndPath.java │ │ ├── source │ │ └── SummarySourceSinkManager.java │ │ ├── taintWrappers │ │ ├── AccessPathFragment.java │ │ ├── AccessPathPropagator.java │ │ ├── ReportMissingSummaryWrapper.java │ │ ├── SummaryTaintWrapper.java │ │ ├── Taint.java │ │ ├── TaintWrapperFactory.java │ │ └── resolvers │ │ │ ├── SummaryQuery.java │ │ │ ├── SummaryResolver.java │ │ │ └── SummaryResponse.java │ │ ├── util │ │ └── AliasUtils.java │ │ └── xml │ │ ├── AbstractXMLReader.java │ │ ├── MetaDataReader.java │ │ ├── SummaryReader.java │ │ ├── SummaryWriter.java │ │ ├── SummaryXMLException.java │ │ ├── XMLConstants.java │ │ └── XMLMetaDataConstants.java ├── summariesManual │ ├── SummaryMetaData.xml │ ├── System.ArraySegment`1.xml │ ├── System.Net.Http.ByteArrayContent.xml │ ├── System.Net.Http.HttpRequestMessage.xml │ ├── System.Net.Http.StringContent.xml │ ├── System.Object.xml │ ├── System.Security.SecureString.xml │ ├── System.String.xml │ ├── System.Text.Encoding.xml │ ├── System.Text.StringBuilder.xml │ ├── android.content.ClipData.xml │ ├── android.content.ComponentName.xml │ ├── android.content.Intent.xml │ ├── android.content.IntentFilter$AuthorityEntry.xml │ ├── android.content.IntentFilter.xml │ ├── android.content.pm.ApplicationInfo.xml │ ├── android.content.pm.PackageItemInfo.xml │ ├── android.database.Cursor.xml │ ├── android.graphics.Bitmap.xml │ ├── android.graphics.Color.xml │ ├── android.graphics.Point.xml │ ├── android.graphics.PointF.xml │ ├── android.graphics.Rect.xml │ ├── android.location.Address.xml │ ├── android.location.Criteria.xml │ ├── android.location.Location.xml │ ├── android.net.Uri$Builder.xml │ ├── android.net.Uri.xml │ ├── android.os.BaseBundle.xml │ ├── android.os.Bundle.xml │ ├── android.os.Message.xml │ ├── android.os.Parcel.xml │ ├── android.os.PatternMatcher.xml │ ├── android.os.PersistableBundle.xml │ ├── android.telephony.SmsMessage.xml │ ├── android.telephony.gsm.SmsMessage.xml │ ├── android.text.Editable.xml │ ├── android.text.TextUtils.xml │ ├── android.text.format.Formatter.xml │ ├── android.util.Base64.xml │ ├── android.util.Base64InputStream.xml │ ├── android.util.Base64OutputStream.xml │ ├── android.util.Half.xml │ ├── android.util.JsonReader.xml │ ├── android.util.JsonWriter.xml │ ├── android.util.LruCache.xml │ ├── android.util.MutableBoolean.xml │ ├── android.util.MutableByte.xml │ ├── android.util.MutableChar.xml │ ├── android.util.MutableDouble.xml │ ├── android.util.MutableFloat.xml │ ├── android.util.MutableInt.xml │ ├── android.util.MutableLong.xml │ ├── android.util.MutableShort.xml │ ├── android.util.Pair.xml │ ├── android.util.PrintStreamPrinter.xml │ ├── android.util.PrintWriterPrinter.xml │ ├── android.util.Range.xml │ ├── android.util.Size.xml │ ├── android.util.SizeF.xml │ ├── android.util.SparseArray.xml │ ├── android.util.SparseBooleanArray.xml │ ├── android.util.SparseIntArray.xml │ ├── android.util.SparseLongArray.xml │ ├── android.webkit.WebResourceRequest.xml │ ├── android.widget.Button.xml │ ├── android.widget.CheckBox.xml │ ├── android.widget.EditText.xml │ ├── android.widget.TextView.xml │ ├── android.widget.Toast.xml │ ├── androidx.collection.SimpleArrayMap.xml │ ├── com.baidu.location.BDLocation.xml │ ├── com.esotericsoftware.kryo.io.ByteBufferOutput.xml │ ├── com.esotericsoftware.kryo.io.Output.xml │ ├── com.google.api.client.http.HttpResponse.xml │ ├── com.google.common.collect.HashBasedTable.xml │ ├── com.google.common.collect.HashMultimap.xml │ ├── com.google.common.collect.Multimap.xml │ ├── com.google.common.collect.Table$Cell.xml │ ├── com.google.common.collect.Table.xml │ ├── com.google.common.io.BaseEncoding.xml │ ├── com.google.common.io.ByteStreams.xml │ ├── com.google.common.math.BigIntegerMath.xml │ ├── com.google.common.math.DoubleMath.xml │ ├── com.google.common.math.IntMath.xml │ ├── com.google.common.math.LongMath.xml │ ├── com.google.gson.Gson.xml │ ├── com.google.gson.stream.JsonReader.xml │ ├── com.mashape.unirest.http.HttpResponse.xml │ ├── com.mashape.unirest.request.BaseRequest.xml │ ├── com.mashape.unirest.request.GetRequest.xml │ ├── com.mashape.unirest.request.HttpRequest.xml │ ├── com.ning.http.client.Response.xml │ ├── com.squareup.okhttp.Response.xml │ ├── com.squareup.okhttp.ResponseBody.xml │ ├── cz.msebera.android.httpclient.HttpResponse.xml │ ├── cz.msebera.android.httpclient.util.EntityUtils.xml │ ├── jakarta.servlet.ServletResponse.xml │ ├── jakarta.servlet.http.HttpServletResponse.xml │ ├── java.io.BufferedInputStream.xml │ ├── java.io.BufferedOutputStream.xml │ ├── java.io.BufferedReader.xml │ ├── java.io.BufferedWriter.xml │ ├── java.io.ByteArrayInputStream.xml │ ├── java.io.ByteArrayOutputStream.xml │ ├── java.io.CharArrayReader.xml │ ├── java.io.CharArrayWriter.xml │ ├── java.io.DataInputStream.xml │ ├── java.io.DataOutputStream.xml │ ├── java.io.File.xml │ ├── java.io.FileInputStream.xml │ ├── java.io.FileOutputStream.xml │ ├── java.io.FileReader.xml │ ├── java.io.FileWriter.xml │ ├── java.io.FilterInputStream.xml │ ├── java.io.InputStream.xml │ ├── java.io.InputStreamReader.xml │ ├── java.io.LineNumberReader.xml │ ├── java.io.ObjectInputStream$GetField.xml │ ├── java.io.ObjectInputStream.xml │ ├── java.io.ObjectOutputStream$PutField.xml │ ├── java.io.ObjectOutputStream.xml │ ├── java.io.OutputStream.xml │ ├── java.io.OutputStreamWriter.xml │ ├── java.io.PrintStream.xml │ ├── java.io.PrintWriter.xml │ ├── java.io.StringReader.xml │ ├── java.io.StringWriter.xml │ ├── java.lang.Appendable.xml │ ├── java.lang.Boolean.xml │ ├── java.lang.Byte.xml │ ├── java.lang.CharSequence.xml │ ├── java.lang.Character.xml │ ├── java.lang.Class.xml │ ├── java.lang.Double.xml │ ├── java.lang.Exception.xml │ ├── java.lang.Float.xml │ ├── java.lang.Integer.xml │ ├── java.lang.Long.xml │ ├── java.lang.Math.xml │ ├── java.lang.NullPointerException.xml │ ├── java.lang.Object.xml │ ├── java.lang.ProcessBuilder.xml │ ├── java.lang.RuntimeException.xml │ ├── java.lang.Short.xml │ ├── java.lang.String.xml │ ├── java.lang.StringBuffer.xml │ ├── java.lang.StringBuilder.xml │ ├── java.lang.System.xml │ ├── java.lang.Thread.xml │ ├── java.lang.ThreadLocal.xml │ ├── java.lang.Throwable.xml │ ├── java.lang.invoke.StringConcatFactory.xml │ ├── java.lang.ref.PhantomReference.xml │ ├── java.lang.ref.SoftReference.xml │ ├── java.lang.ref.WeakReference.xml │ ├── java.lang.reflect.Array.xml │ ├── java.lang.reflect.Field.xml │ ├── java.math.BigDecimal.xml │ ├── java.math.BigInteger.xml │ ├── java.net.HttpCookie.xml │ ├── java.net.HttpURLConnection.xml │ ├── java.net.InetAddress.xml │ ├── java.net.InetSocketAddress.xml │ ├── java.net.PasswordAuthentication.xml │ ├── java.net.Proxy.xml │ ├── java.net.URI.xml │ ├── java.net.URL.xml │ ├── java.net.URLConnection.xml │ ├── java.net.URLDecoder.xml │ ├── java.net.URLEncoder.xml │ ├── java.nio.ByteBuffer.xml │ ├── java.nio.CharBuffer.xml │ ├── java.nio.DoubleBuffer.xml │ ├── java.nio.FloatBuffer.xml │ ├── java.nio.IntBuffer.xml │ ├── java.nio.LongBuffer.xml │ ├── java.nio.ShortBuffer.xml │ ├── java.nio.file.Path.xml │ ├── java.nio.file.Paths.xml │ ├── java.security.SecureRandom.xml │ ├── java.sql.ResultSet.xml │ ├── java.util.ArrayList.xml │ ├── java.util.Arrays.xml │ ├── java.util.Collection.xml │ ├── java.util.Collections.xml │ ├── java.util.Deque.xml │ ├── java.util.Enumeration.xml │ ├── java.util.HashMap.xml │ ├── java.util.HashSet.xml │ ├── java.util.Iterator.xml │ ├── java.util.LinkedList.xml │ ├── java.util.List.xml │ ├── java.util.ListIterator.xml │ ├── java.util.Map$Entry.xml │ ├── java.util.Map.xml │ ├── java.util.Optional.xml │ ├── java.util.OptionalDouble.xml │ ├── java.util.OptionalInt.xml │ ├── java.util.OptionalLong.xml │ ├── java.util.PriorityQueue.xml │ ├── java.util.Properties.xml │ ├── java.util.Queue.xml │ ├── java.util.Random.xml │ ├── java.util.Scanner.xml │ ├── java.util.Set.xml │ ├── java.util.Spliterator$OfDouble.xml │ ├── java.util.Spliterator$OfInt.xml │ ├── java.util.Spliterator$OfLong.xml │ ├── java.util.Spliterator$OfPrimitive.xml │ ├── java.util.Spliterator.xml │ ├── java.util.Stack.xml │ ├── java.util.StringTokenizer.xml │ ├── java.util.Vector.xml │ ├── java.util.concurrent.CopyOnWriteArrayList.xml │ ├── java.util.concurrent.CountDownLatch.xml │ ├── java.util.concurrent.Future.xml │ ├── java.util.concurrent.PriorityBlockingQueue.xml │ ├── java.util.concurrent.atomic.AtomicBoolean.xml │ ├── java.util.concurrent.atomic.AtomicInteger.xml │ ├── java.util.concurrent.atomic.AtomicLong.xml │ ├── java.util.concurrent.atomic.AtomicReference.xml │ ├── java.util.concurrent.atomic.AtomicReferenceArray.xml │ ├── java.util.function.UnaryOperator.xml │ ├── java.util.regex.Matcher.xml │ ├── java.util.regex.Pattern.xml │ ├── java.util.stream.Stream.xml │ ├── java.util.zip.GZIPOutputStream.xml │ ├── java.util.zip.ZipOutputStream.xml │ ├── javax.crypto.Cipher.xml │ ├── javax.ejb.EnterpriseBean.xml │ ├── javax.ejb.EntityBean.xml │ ├── javax.ejb.MessageDrivenBean.xml │ ├── javax.ejb.SessionBean.xml │ ├── javax.naming.directory.InitialDirContext.xml │ ├── javax.net.ssl.HttpsURLConnection.xml │ ├── javax.servlet.GenericServlet.xml │ ├── javax.servlet.ServletConfig.xml │ ├── javax.servlet.ServletContext.xml │ ├── javax.servlet.ServletInputStream.xml │ ├── javax.servlet.ServletOutputStream.xml │ ├── javax.servlet.ServletRequest.xml │ ├── javax.servlet.ServletRequestWrapper.xml │ ├── javax.servlet.ServletResponse.xml │ ├── javax.servlet.ServletResponseWrapper.xml │ ├── javax.servlet.http.Cookie.xml │ ├── javax.servlet.http.HttpServlet.xml │ ├── javax.servlet.http.HttpServletRequest.xml │ ├── javax.servlet.http.HttpServletRequestWrapper.xml │ ├── javax.servlet.http.HttpServletResponse.xml │ ├── javax.servlet.http.HttpServletResponseWrapper.xml │ ├── javax.servlet.http.HttpSession.xml │ ├── javax.servlet.jsp.JspContext.xml │ ├── javax.xml.transform.stream.StreamSource.xml │ ├── jdk.internal.misc.Unsafe.xml │ ├── kotlin.collections.CollectionsKt.xml │ ├── kotlin.collections.CollectionsKt___CollectionsKt.xml │ ├── okhttp3.Headers$Builder.xml │ ├── okhttp3.Headers.xml │ ├── okhttp3.HttpUrl$Builder.xml │ ├── okhttp3.HttpUrl.xml │ ├── okhttp3.Request$Builder.xml │ ├── okhttp3.Request.xml │ ├── okhttp3.RequestBody.xml │ ├── okhttp3.Response.xml │ ├── okhttp3.ResponseBody.xml │ ├── okio.Base64.xml │ ├── okio.Buffer.xml │ ├── okio.ByteString.xml │ ├── org.apache.commons.codec.BinaryDecoder.xml │ ├── org.apache.commons.codec.BinaryEncoder.xml │ ├── org.apache.commons.codec.Decoder.xml │ ├── org.apache.commons.codec.Encoder.xml │ ├── org.apache.commons.codec.StringDecoder.xml │ ├── org.apache.commons.codec.StringEncoder.xml │ ├── org.apache.commons.codec.binary.Base32.xml │ ├── org.apache.commons.codec.binary.Base64.xml │ ├── org.apache.commons.codec.binary.BaseNCodec.xml │ ├── org.apache.commons.codec.binary.Hex.xml │ ├── org.apache.commons.codec.digest.Crypt.xml │ ├── org.apache.commons.codec.digest.DigestUtils.xml │ ├── org.apache.commons.codec.digest.Sha2Crypt.xml │ ├── org.apache.commons.codec.digest.UnixCrypt.xml │ ├── org.apache.commons.codec.net.URLCodec.xml │ ├── org.apache.commons.lang.StringEscapeUtils.xml │ ├── org.apache.commons.lang3.StringEscapeUtils.xml │ ├── org.apache.commons.lang3.StringUtils.xml │ ├── org.apache.commons.mail.MultiPartEmail.xml │ ├── org.apache.commons.mail.SimpleEmail.xml │ ├── org.apache.http.HttpResponse.xml │ ├── org.apache.http.RequestLine.xml │ ├── org.apache.http.auth.KerberosCredentials.xml │ ├── org.apache.http.auth.NTCredentials.xml │ ├── org.apache.http.auth.UsernamePasswordCredentials.xml │ ├── org.apache.http.client.entity.UrlEncodedFormEntity.xml │ ├── org.apache.http.client.fluent.Content.xml │ ├── org.apache.http.client.fluent.Response.xml │ ├── org.apache.http.client.methods.AbstractExecutionAwareRequest.xml │ ├── org.apache.http.client.methods.CloseableHttpResponse.xml │ ├── org.apache.http.client.methods.HttpDelete.xml │ ├── org.apache.http.client.methods.HttpEntityEnclosingRequestBase.xml │ ├── org.apache.http.client.methods.HttpGet.xml │ ├── org.apache.http.client.methods.HttpHead.xml │ ├── org.apache.http.client.methods.HttpOptions.xml │ ├── org.apache.http.client.methods.HttpPatch.xml │ ├── org.apache.http.client.methods.HttpPost.xml │ ├── org.apache.http.client.methods.HttpPut.xml │ ├── org.apache.http.client.methods.HttpRequestBase.xml │ ├── org.apache.http.client.methods.HttpTrace.xml │ ├── org.apache.http.entity.AbstractHttpEntity.xml │ ├── org.apache.http.entity.StringEntity.xml │ ├── org.apache.http.entity.mime.content.AbstractContentBody.xml │ ├── org.apache.http.entity.mime.content.ByteArrayBody.xml │ ├── org.apache.http.entity.mime.content.FileBody.xml │ ├── org.apache.http.entity.mime.content.InputStreamBody.xml │ ├── org.apache.http.entity.mime.content.StringBody.xml │ ├── org.apache.http.impl.client.AbstractHttpClient.xml │ ├── org.apache.http.impl.client.AutoRetryHttpClient.xml │ ├── org.apache.http.impl.client.BasicCredentialsProvider.xml │ ├── org.apache.http.impl.client.CloseableHttpClient.xml │ ├── org.apache.http.impl.client.ContentEncodingHttpClient.xml │ ├── org.apache.http.impl.client.DecompressingHttpClient.xml │ ├── org.apache.http.impl.client.DefaultHttpClient.xml │ ├── org.apache.http.impl.client.SystemDefaultCredentialsProvider.xml │ ├── org.apache.http.impl.client.SystemDefaultHttpClient.xml │ ├── org.apache.http.message.AbstractHttpMessage.xml │ ├── org.apache.http.message.BasicHttpEntityEnclosingRequest.xml │ ├── org.apache.http.message.BasicHttpRequest.xml │ ├── org.apache.http.message.BasicNameValuePair.xml │ ├── org.apache.http.util.EntityUtils.xml │ ├── org.apache.logging.log4j.util.Strings.xml │ ├── org.apache.logging.log4j.util.Unbox.xml │ ├── org.asynchttpclient.Response.xml │ ├── org.eclipse.jetty.client.api.ContentResponse.xml │ ├── org.joda.time.DateTimeZone.xml │ ├── org.joda.time.tz.ZoneInfoProvider.xml │ ├── org.json.JSONArray.xml │ ├── org.json.JSONObject.xml │ ├── org.w3c.dom.Document.xml │ ├── org.w3c.dom.Element.xml │ ├── org.w3c.dom.Node.xml │ ├── org.w3c.dom.NodeList.xml │ ├── org.xml.sax.InputSource.xml │ ├── org.xml.sax.XMLReader.xml │ ├── org.xmlpull.v1.XmlSerializer.xml │ └── sun.misc.Unsafe.xml ├── test │ └── soot │ │ └── jimple │ │ └── infoflow │ │ └── test │ │ ├── .gitignore │ │ └── methodSummary │ │ ├── ApiClass.java │ │ ├── ApiClassClient.java │ │ ├── ApiInternalClass.java │ │ ├── ArbitraryAccessPath.java │ │ ├── Callbacks.java │ │ ├── ContextSensitivity.java │ │ ├── Data.java │ │ ├── Data2.java │ │ ├── FieldToPara.java │ │ ├── FieldToReturn.java │ │ ├── GapClass.java │ │ ├── IApiClass.java │ │ ├── IGapClass.java │ │ ├── IUserCodeClass.java │ │ ├── InheritanceTests.java │ │ ├── ListTestCode.java │ │ ├── Pair.java │ │ ├── ParaToField.java │ │ ├── ParaToParaFlows.java │ │ ├── ParaToReturn.java │ │ ├── TestCollection.java │ │ ├── UserCodeClass.java │ │ └── junit │ │ ├── ApiTestHelper.java │ │ ├── ApiTests.java │ │ ├── ArbitraryAccessPathTests.java │ │ ├── BaseSummaryTaintWrapperTests.java │ │ ├── CallbackTests.java │ │ ├── ContextSensitivityTests.java │ │ ├── DataClassTests.java │ │ ├── FieldToParaTests.java │ │ ├── FieldToReturnTests.java │ │ ├── HierarchyTests.java │ │ ├── InheritanceTests.java │ │ ├── JDKTests.java │ │ ├── JUnitTests.java │ │ ├── ParaToFieldTests.java │ │ ├── ParaToParaTests.java │ │ ├── ParaToReturnTests.java │ │ ├── SummaryTaintWrapperTests.java │ │ ├── TaintWrapperFactory.java │ │ ├── TestHelper.java │ │ ├── WrapperListTestConfig.java │ │ ├── WrapperListTests.java │ │ ├── WrapperMapTests.java │ │ ├── WrapperQueueTests.java │ │ ├── WrapperSetTests.java │ │ ├── WrapperVectorTests.java │ │ ├── backward │ │ ├── SummaryTaintWrapperTests.java │ │ ├── WrapperListTests.java │ │ ├── WrapperMapTests.java │ │ ├── WrapperQueueTests.java │ │ ├── WrapperSetTests.java │ │ └── WrapperVectorTests.java │ │ └── forward │ │ ├── SummaryTaintWrapperTests.java │ │ ├── WrapperListTests.java │ │ ├── WrapperMapTests.java │ │ ├── WrapperQueueTests.java │ │ ├── WrapperSetTests.java │ │ └── WrapperVectorTests.java └── testSummaries │ ├── soot.jimple.infoflow.test.methodSummary.ApiClass.xml │ ├── soot.jimple.infoflow.test.methodSummary.Data.xml │ ├── soot.jimple.infoflow.test.methodSummary.GapClass.xml │ └── soot.jimple.infoflow.test.methodSummary.TestCollection.xml └── soot-infoflow ├── .classpath ├── .externalToolBuilders ├── org.eclipse.pde.ManifestBuilder.launch └── org.eclipse.pde.SchemaBuilder.launch ├── .gitattributes ├── .gitignore ├── .project ├── .settings ├── org.eclipse.core.resources.prefs ├── org.eclipse.jdt.core.prefs ├── org.eclipse.jdt.ui.prefs └── org.eclipse.m2e.core.prefs ├── BackwardsWrapperExcludeList.txt ├── EasyTaintWrapperSource.txt ├── META-INF └── MANIFEST.MF ├── SecuriBenchReadme.txt ├── license.txt ├── pom.xml ├── schema └── ClassSummaryC.xsd ├── securiBench └── securibench │ └── micro │ ├── BasicTestCase.java │ ├── MicroTestCase.java │ ├── aliasing │ ├── Aliasing1.java │ ├── Aliasing2.java │ ├── Aliasing3.java │ ├── Aliasing4.java │ ├── Aliasing5.java │ └── Aliasing6.java │ ├── arrays │ ├── Arrays1.java │ ├── Arrays10.java │ ├── Arrays2.java │ ├── Arrays3.java │ ├── Arrays4.java │ ├── Arrays5.java │ ├── Arrays6.java │ ├── Arrays7.java │ ├── Arrays8.java │ └── Arrays9.java │ ├── basic │ ├── Basic0.java │ ├── Basic1.java │ ├── Basic10.java │ ├── Basic11.java │ ├── Basic12.java │ ├── Basic13.java │ ├── Basic14.java │ ├── Basic15.java │ ├── Basic16.java │ ├── Basic17.java │ ├── Basic18.java │ ├── Basic19.java │ ├── Basic2.java │ ├── Basic20.java │ ├── Basic21.java │ ├── Basic22.java │ ├── Basic23.java │ ├── Basic24.java │ ├── Basic25.java │ ├── Basic26.java │ ├── Basic27.java │ ├── Basic28.java │ ├── Basic29.java │ ├── Basic3.java │ ├── Basic30.java │ ├── Basic31.java │ ├── Basic32.java │ ├── Basic33.java │ ├── Basic34.java │ ├── Basic35.java │ ├── Basic36.java │ ├── Basic37.java │ ├── Basic38.java │ ├── Basic39.java │ ├── Basic4.java │ ├── Basic40.java │ ├── Basic41.java │ ├── Basic42.java │ ├── Basic5.java │ ├── Basic6.java │ ├── Basic7.java │ ├── Basic8.java │ └── Basic9.java │ ├── collections │ ├── Collections1.java │ ├── Collections10.java │ ├── Collections11.java │ ├── Collections11b.java │ ├── Collections12.java │ ├── Collections13.java │ ├── Collections14.java │ ├── Collections2.java │ ├── Collections3.java │ ├── Collections4.java │ ├── Collections5.java │ ├── Collections6.java │ ├── Collections7.java │ ├── Collections8.java │ └── Collections9.java │ ├── datastructures │ ├── Datastructures1.java │ ├── Datastructures2.java │ ├── Datastructures3.java │ ├── Datastructures4.java │ ├── Datastructures5.java │ └── Datastructures6.java │ ├── factories │ ├── Factories1.java │ ├── Factories2.java │ └── Factories3.java │ ├── inter │ ├── Inter1.java │ ├── Inter10.java │ ├── Inter11.java │ ├── Inter12.java │ ├── Inter13.java │ ├── Inter14.java │ ├── Inter2.java │ ├── Inter3.java │ ├── Inter4.java │ ├── Inter5.java │ ├── Inter6.java │ ├── Inter7.java │ ├── Inter8.java │ └── Inter9.java │ ├── pred │ ├── Pred1.java │ ├── Pred2.java │ ├── Pred3.java │ ├── Pred4.java │ ├── Pred5.java │ ├── Pred6.java │ ├── Pred7.java │ ├── Pred8.java │ └── Pred9.java │ ├── reflection │ ├── Refl1.java │ ├── Refl2.java │ ├── Refl3.java │ └── Refl4.java │ ├── sanitizers │ ├── Sanitizers1.java │ ├── Sanitizers2.java │ ├── Sanitizers3.java │ ├── Sanitizers4.java │ ├── Sanitizers5.java │ └── Sanitizers6.java │ ├── session │ ├── Session1.java │ ├── Session2.java │ └── Session3.java │ └── strong_updates │ ├── StrongUpdates1.java │ ├── StrongUpdates2.java │ ├── StrongUpdates3.java │ ├── StrongUpdates4.java │ └── StrongUpdates5.java ├── src └── soot │ └── jimple │ └── infoflow │ ├── AbstractInfoflow.java │ ├── AnalysisPhase.java │ ├── BackwardsInfoflow.java │ ├── IInfoflow.java │ ├── Infoflow.java │ ├── InfoflowConfiguration.java │ ├── InfoflowManager.java │ ├── aliasing │ ├── AbstractAliasStrategy.java │ ├── AbstractBulkAliasStrategy.java │ ├── AbstractInteractiveAliasStrategy.java │ ├── Aliasing.java │ ├── BackwardsFlowSensitiveAliasStrategy.java │ ├── FlowSensitiveAliasStrategy.java │ ├── IAliasingStrategy.java │ ├── ImplicitFlowAliasStrategy.java │ ├── LazyAliasingStrategy.java │ ├── NullAliasStrategy.java │ └── PtsBasedAliasStrategy.java │ ├── callbacks │ └── CallbackDefinition.java │ ├── callmappers │ ├── CallerCalleeManager.java │ ├── ICallerCalleeArgumentMapper.java │ ├── IdentityCallerCalleeMapper.java │ ├── ReflectionCallerCalleeMapper.java │ ├── UnknownCallerCalleeMapper.java │ └── VirtualEdgeTargetCallerCalleeMapper.java │ ├── cfg │ ├── BiDirICFGFactory.java │ ├── DefaultBiDiICFGFactory.java │ ├── FlowDroidEssentialMethodTag.java │ ├── FlowDroidSinkStatement.java │ ├── FlowDroidSourceStatement.java │ ├── FlowDroidUserClass.java │ └── LibraryClassPatcher.java │ ├── cmdInfoflow.java │ ├── codeOptimization │ ├── AddNopStmt.java │ ├── DeadCodeEliminator.java │ ├── ICodeOptimizer.java │ └── InterproceduralConstantValuePropagator.java │ ├── collect │ ├── AtomicBitSet.java │ ├── BlackHoleCollection.java │ ├── ConcurrentCountingMap.java │ ├── ConcurrentHashSet.java │ ├── ConcurrentIdentityHashMap.java │ ├── ConcurrentIdentityHashMultiMap.java │ ├── IdentityPair.java │ ├── IdentityWrapper.java │ ├── MutableTwoElementSet.java │ ├── MyConcurrentHashMap.java │ └── WeakConcurrentHashSet.java │ ├── collections │ ├── ICollectionsSupport.java │ ├── analyses │ │ ├── ListSizeAnalysis.java │ │ └── ReadOnlyListViewAnalysis.java │ ├── codeOptimization │ │ ├── ConstantTagFolding.java │ │ └── ReplacementCandidates.java │ ├── context │ │ ├── IntervalContext.java │ │ ├── KeySetContext.java │ │ ├── PositionBasedContext.java │ │ ├── UnknownContext.java │ │ └── ValueBasedContext.java │ ├── problems │ │ └── rules │ │ │ └── forward │ │ │ ├── ArrayWithIndexPropagationRule.java │ │ │ └── CollectionWrapperPropagationRule.java │ ├── strategies │ │ ├── containers │ │ │ ├── AbstractListStrategy.java │ │ │ ├── ConstantMapStrategy.java │ │ │ ├── ConstantMapStrategyFactory.java │ │ │ ├── DefaultConfigContainerStrategyFactory.java │ │ │ ├── IContainerStrategy.java │ │ │ ├── IContainerStrategyFactory.java │ │ │ ├── SmashAllContainerStrategy.java │ │ │ ├── TestConstantStrategy.java │ │ │ └── shift │ │ │ │ ├── IShiftOperation.java │ │ │ │ ├── InvalidateShift.java │ │ │ │ ├── MinMaxShift.java │ │ │ │ └── PreciseShift.java │ │ └── widening │ │ │ ├── AbstractWidening.java │ │ │ ├── WideningOnRevisitStrategy.java │ │ │ ├── WideningOnShiftOperationStrategy.java │ │ │ ├── WideningStrategy.java │ │ │ └── WideningTaintPropagationHandler.java │ └── util │ │ ├── AliasAbstractionSet.java │ │ ├── ConcurrentSetWithRunnable.java │ │ ├── ImmutableArraySet.java │ │ ├── MySpecialMultiMap.java │ │ ├── NonNullHashSet.java │ │ └── Tristate.java │ ├── config │ ├── IInfoflowConfig.java │ └── PreciseCollectionStrategy.java │ ├── data │ ├── AbstractMethodAndClass.java │ ├── Abstraction.java │ ├── AbstractionAtSink.java │ ├── AccessPath.java │ ├── AccessPathFactory.java │ ├── AccessPathFragment.java │ ├── ContainerContext.java │ ├── FlowDroidMemoryManager.java │ ├── SootFieldAndClass.java │ ├── SootMethodAndClass.java │ ├── SourceContext.java │ ├── SourceContextAndPath.java │ ├── accessPaths │ │ ├── IAccessPathReductionStrategy.java │ │ ├── SameFieldReductionStrategy.java │ │ └── This0ReductionStrategy.java │ └── pathBuilders │ │ ├── AbstractAbstractionPathBuilder.java │ │ ├── BatchPathBuilder.java │ │ ├── ConcurrentAbstractionPathBuilder.java │ │ ├── ContextInsensitivePathBuilder.java │ │ ├── ContextInsensitiveSourceFinder.java │ │ ├── ContextSensitivePathBuilder.java │ │ ├── DefaultPathBuilderFactory.java │ │ ├── EmptyPathBuilder.java │ │ ├── IAbstractionPathBuilder.java │ │ ├── IPathBuilderFactory.java │ │ └── RecursivePathBuilder.java │ ├── entryPointCreators │ ├── BaseEntryPointCreator.java │ ├── DefaultEntryPointCreator.java │ ├── IEntryPointCreator.java │ ├── SequentialEntryPointCreator.java │ ├── SimulatedCodeElementTag.java │ └── SimulatedDynamicInvokeTag.java │ ├── globalTaints │ └── GlobalTaintManager.java │ ├── handlers │ ├── PostAnalysisHandler.java │ ├── PreAnalysisHandler.java │ ├── ResultsAvailableHandler.java │ ├── ResultsAvailableHandler2.java │ ├── SequentialTaintPropagationHandler.java │ └── TaintPropagationHandler.java │ ├── ipc │ ├── DefaultIPCManager.java │ ├── EmptyIPCManager.java │ ├── IIPCManager.java │ └── MethodBasedIPCManager.java │ ├── memory │ ├── AbstractSolverWatcher.java │ ├── FlowDroidMemoryWatcher.java │ ├── FlowDroidTimeoutWatcher.java │ ├── IMemoryBoundedSolver.java │ ├── ISolverTerminationReason.java │ ├── ISolversTerminatedCallback.java │ ├── MemoryWarningSystem.java │ └── reasons │ │ ├── AbortRequestedReason.java │ │ ├── MultiReason.java │ │ ├── OutOfMemoryReason.java │ │ └── TimeoutReason.java │ ├── nativeCallHandler │ ├── AbstractNativeCallHandler.java │ ├── BackwardNativeCallHandler.java │ ├── DefaultNativeCallHandler.java │ └── INativeCallHandler.java │ ├── problems │ ├── AbstractInfoflowProblem.java │ ├── AliasProblem.java │ ├── BackwardsAliasProblem.java │ ├── BackwardsInfoflowProblem.java │ ├── InfoflowProblem.java │ ├── TaintPropagationResults.java │ └── rules │ │ ├── AbstractTaintPropagationRule.java │ │ ├── BackwardPropagationRuleManagerFactory.java │ │ ├── DefaultPropagationRuleManagerFactory.java │ │ ├── DummyArrayContext.java │ │ ├── EmptyPropagationRuleManagerFactory.java │ │ ├── IArrayContextProvider.java │ │ ├── IPropagationRuleManagerFactory.java │ │ ├── ITaintPropagationRule.java │ │ ├── IdentityPropagationRuleManager.java │ │ ├── PropagationRuleManager.java │ │ ├── backward │ │ ├── BackwardsArrayPropagationRule.java │ │ ├── BackwardsClinitRule.java │ │ ├── BackwardsExceptionPropagationRule.java │ │ ├── BackwardsImplicitFlowRule.java │ │ ├── BackwardsSinkPropagationRule.java │ │ ├── BackwardsSourcePropagationRule.java │ │ ├── BackwardsStrongUpdatePropagationRule.java │ │ └── BackwardsWrapperRule.java │ │ └── forward │ │ ├── ArrayPropagationRule.java │ │ ├── ExceptionPropagationRule.java │ │ ├── ImplicitPropagtionRule.java │ │ ├── SinkPropagationRule.java │ │ ├── SkipSystemClassRule.java │ │ ├── SourcePropagationRule.java │ │ ├── StaticPropagationRule.java │ │ ├── StopAfterFirstKFlowsPropagationRule.java │ │ ├── StrongUpdatePropagationRule.java │ │ ├── TypingPropagationRule.java │ │ └── WrapperPropagationRule.java │ ├── resources │ └── controls │ │ ├── JavaSwingLayoutControl.java │ │ ├── LayoutControl.java │ │ ├── SwingPasswordField.java │ │ └── SwingTextField.java │ ├── results │ ├── AbstractResultSourceSinkInfo.java │ ├── BackwardsInfoflowResults.java │ ├── DataFlowResult.java │ ├── InfoflowPerformanceData.java │ ├── InfoflowResults.java │ ├── ResultSinkInfo.java │ ├── ResultSourceInfo.java │ ├── util │ │ └── InfoflowResultComparator.java │ └── xml │ │ ├── AbstractSerializedSourceSink.java │ │ ├── InfoflowResultsReader.java │ │ ├── InfoflowResultsSerializer.java │ │ ├── SerializedAccessPath.java │ │ ├── SerializedInfoflowResults.java │ │ ├── SerializedPathElement.java │ │ ├── SerializedSinkInfo.java │ │ ├── SerializedSourceInfo.java │ │ └── XmlConstants.java │ ├── rifl │ ├── RIFLConstants.java │ ├── RIFLDocument.java │ ├── RIFLParser.java │ ├── RIFLSourceSinkDefinitionProvider.java │ └── RIFLWriter.java │ ├── river │ ├── AdditionalFlowCondition.java │ ├── AdditionalFlowInfoSourceContext.java │ ├── AdditionalFlowInfoSpecification.java │ ├── BackwardNoSinkRuleManagerFactory.java │ ├── ConditionalFlowPostProcessor.java │ ├── ConditionalFlowSourceSinkManagerWrapper.java │ ├── ConditionalSecondarySourceDefinition.java │ ├── EmptyUsageContextProvider.java │ ├── IAdditionalFlowSinkPropagationRule.java │ ├── IConditionalFlowManager.java │ ├── IUsageContextProvider.java │ ├── SecondaryFlowGenerator.java │ ├── SecondaryFlowListener.java │ └── SecondarySinkDefinition.java │ ├── solver │ ├── AbstractIFDSSolver.java │ ├── DefaultSolverPeerGroup.java │ ├── EndSummary.java │ ├── IFollowReturnsPastSeedsHandler.java │ ├── IInfoflowSolver.java │ ├── ISolverPeerGroup.java │ ├── IStrategyBasedParallelSolver.java │ ├── IncomingRecord.java │ ├── PredecessorShorteningMode.java │ ├── Propagator.java │ ├── cfg │ │ ├── BackwardsInfoflowCFG.java │ │ ├── IInfoflowCFG.java │ │ └── InfoflowCFG.java │ ├── executors │ │ ├── InterruptableExecutor.java │ │ └── SetPoolExecutor.java │ ├── fastSolver │ │ ├── DefaultSchedulingStrategy.java │ │ ├── FastSolverLinkedNode.java │ │ ├── IFDSSolver.java │ │ ├── ISchedulingStrategy.java │ │ ├── InfoflowSolver.java │ │ ├── LocalWorklistTask.java │ │ ├── WeakPathEdge.java │ │ └── flowInsensitive │ │ │ ├── FlowInsensitiveSolver.java │ │ │ └── InfoflowSolver.java │ ├── functions │ │ ├── SolverCallFlowFunction.java │ │ ├── SolverCallToReturnFlowFunction.java │ │ ├── SolverNormalFlowFunction.java │ │ └── SolverReturnFlowFunction.java │ ├── gcSolver │ │ ├── AbstractGarbageCollector.java │ │ ├── AbstractReferenceCountingGarbageCollector.java │ │ ├── AbstractReferenceProvider.java │ │ ├── AggressiveGarbageCollector.java │ │ ├── AheadOfTimeReferenceProvider.java │ │ ├── DefaultGarbageCollector.java │ │ ├── GCSolverPeerGroup.java │ │ ├── GarbageCollectionTrigger.java │ │ ├── GarbageCollectorPeerGroup.java │ │ ├── IFDSSolver.java │ │ ├── IGCReferenceProvider.java │ │ ├── IGarbageCollector.java │ │ ├── IGarbageCollectorPeer.java │ │ ├── InfoflowSolver.java │ │ ├── MethodLevelReferenceCountingGarbageCollector.java │ │ ├── NullGarbageCollector.java │ │ ├── OnDemandReferenceProvider.java │ │ ├── ThreadedGarbageCollector.java │ │ └── fpc │ │ │ ├── AbstrationDependencyGraph.java │ │ │ ├── AggressiveGarbageCollector.java │ │ │ ├── FineGrainedReferenceCountingGarbageCollector.java │ │ │ ├── IFDSSolver.java │ │ │ ├── IGraph.java │ │ │ ├── InfoflowSolver.java │ │ │ └── NormalGarbageCollector.java │ ├── memory │ │ ├── DefaultMemoryManagerFactory.java │ │ ├── IMemoryManager.java │ │ └── IMemoryManagerFactory.java │ └── sparseSolver │ │ ├── SparseInfoflowSolver.java │ │ └── propagation │ │ ├── AbstractSparsePropagation.java │ │ ├── DensePropagation.java │ │ ├── IPropagationStrategy.java │ │ ├── PreciseSparsePropagation.java │ │ └── SimpleSparsePropagation.java │ ├── sourcesSinks │ ├── definitions │ │ ├── AbstractSourceSinkDefinition.java │ │ ├── AccessPathTuple.java │ │ ├── FieldSourceSinkDefinition.java │ │ ├── FilteringSourceSinkDefinitionProvider.java │ │ ├── IAccessPathBasedSourceSinkDefinition.java │ │ ├── ISourceSinkCategory.java │ │ ├── ISourceSinkDefinition.java │ │ ├── ISourceSinkDefinitionProvider.java │ │ ├── ImmutableAccessPathTuple.java │ │ ├── InvalidAccessPathException.java │ │ ├── MethodSourceSinkDefinition.java │ │ ├── NullSourceSinkDefinitionProvider.java │ │ ├── SourceSinkCondition.java │ │ ├── SourceSinkType.java │ │ └── StatementSourceSinkDefinition.java │ └── manager │ │ ├── AbstractSourceSinkInfo.java │ │ ├── BaseSourceSinkManager.java │ │ ├── DefaultSourceSinkManager.java │ │ ├── EmptySourceSinkManager.java │ │ ├── IOneSourceAtATimeManager.java │ │ ├── IReversibleSourceSinkManager.java │ │ ├── ISourceSinkManager.java │ │ ├── MethodBasedSourceSinkManager.java │ │ ├── SinkInfo.java │ │ └── SourceInfo.java │ ├── taintWrappers │ ├── AbstractTaintWrapper.java │ ├── EasyTaintWrapper.java │ ├── IReversibleTaintWrapper.java │ ├── ITaintPropagationWrapper.java │ ├── ITaintWrapperDataFlowAnalysis.java │ ├── IdentityTaintWrapper.java │ ├── RecordingTaintWrapper.java │ └── TaintWrapperSet.java │ ├── threading │ ├── DefaultExecutorFactory.java │ └── IExecutorFactory.java │ ├── typing │ └── TypeUtils.java │ ├── util │ ├── ArgParser.java │ ├── BaseSelector.java │ ├── ByReferenceBoolean.java │ ├── DebugAbstractionTree.java │ ├── DebugFlowFunctionTaintPropagationHandler.java │ ├── ExtendedAtomicInteger.java │ ├── ResourceUtils.java │ ├── SootMethodRepresentationParser.java │ ├── SootUtils.java │ ├── SystemClassHandler.java │ ├── ThreadUtils.java │ ├── extensiblelist │ │ └── ExtensibleList.java │ └── preanalyses │ │ └── SingleLiveVariableAnalysis.java │ └── values │ ├── IValueProvider.java │ └── SimpleConstantValueProvider.java └── test └── soot └── jimple └── infoflow ├── config ├── ConfigForTest.java └── ConfigSecuriBench.java └── test ├── ArrayTestCode.java ├── BasicTestCode.java ├── CallbackTestCode.java ├── ConstantTestCode.java ├── ContextSensitivityTestCode.java ├── EasyWrapperTestCode.java ├── ExceptionTestCode.java ├── ForwardBackwardTest.java ├── HTTPTestCode.java ├── HeapTestCode.java ├── HierarchyTestCode.java ├── ImplicitFlowTestCode.java ├── InFunctionCode.java ├── InheritanceTestCode.java ├── LengthTestCode.java ├── ListTestCode.java ├── MapTestCode.java ├── MultiTestCode.java ├── OperationSemanticTestCode.java ├── OtherTestCode.java ├── OverwriteTestCode.java ├── QueueTestCode.java ├── ReflectionTestCode.java ├── SetTestCode.java ├── SingleJoinPointTestCode.java ├── SourceSinkTestCode.java ├── StaticTestCode.java ├── StringTestCode.java ├── ThreadTestCode.java ├── TypeTestCode.java ├── VectorTestCode.java ├── android ├── AccountManager.java ├── Base64.java ├── Bundle.java ├── ConnectionManager.java ├── Location.java ├── LocationManager.java ├── LocationProvider.java └── TelephonyManager.java ├── base └── AbstractJUnitTests.java ├── collect ├── AtomicBitSetTest.java └── ConcurrentCountingMapTest.java ├── junit ├── AlwaysShortenTests.java ├── ArrayTests.java ├── BasicTests.java ├── BytecodeTests.java ├── CallbackTests.java ├── ConstantTests.java ├── ContextSensitivityTests.java ├── EasyWrapperListTests.java ├── EasyWrapperTests.java ├── ExceptionTests.java ├── ExtensibleListTest.java ├── FutureTests.java ├── HTTPTests.java ├── HeapTests.java ├── HeapTestsPtsAliasing.java ├── HierarchyTests.java ├── ImplicitFlowTests.java ├── InFunctionTests.java ├── InheritanceTests.java ├── JUnitTests.java ├── LengthTests.java ├── ListTests.java ├── MapTests.java ├── MemoryWatcherTest.java ├── MethodRepresentationTests.java ├── MultiTest.java ├── OperationSemanticTests.java ├── OtherTests.java ├── OverwriteTests.java ├── QueueTests.java ├── ReflectionTests.java ├── SetTests.java ├── SingleJoinPointTests.java ├── SourceSinkTests.java ├── StaticTests.java ├── StringTests.java ├── ThreadTests.java ├── TypeTests.java ├── VectorTests.java ├── backward │ ├── AlwaysShortenTests.java │ ├── ArrayTests.java │ ├── BasicTests.java │ ├── BytecodeTests.java │ ├── CallbackTests.java │ ├── ConstantTests.java │ ├── ContextSensitivityTests.java │ ├── EasyWrapperListTests.java │ ├── EasyWrapperTests.java │ ├── ExceptionTests.java │ ├── FutureTests.java │ ├── HTTPTests.java │ ├── HeapTests.java │ ├── HierarchyTests.java │ ├── ImplicitFlowTests.java │ ├── InFunctionTests.java │ ├── InheritanceTests.java │ ├── LengthTests.java │ ├── ListTests.java │ ├── MapTests.java │ ├── MultiTest.java │ ├── OperationSemanticTests.java │ ├── OtherTests.java │ ├── OverwriteTests.java │ ├── QueueTests.java │ ├── ReflectionTests.java │ ├── SetTests.java │ ├── SingleJoinPointTests.java │ ├── SourceSinkTests.java │ ├── StaticTests.java │ ├── StringTests.java │ ├── ThreadTests.java │ ├── TypeTests.java │ └── VectorTests.java └── forward │ ├── AlwaysShortenTests.java │ ├── ArrayTests.java │ ├── BasicTests.java │ ├── BytecodeTests.java │ ├── CallbackTests.java │ ├── ConstantTests.java │ ├── ContextSensitivityTests.java │ ├── EasyWrapperListTests.java │ ├── EasyWrapperTests.java │ ├── ExceptionTests.java │ ├── FutureTests.java │ ├── HTTPTests.java │ ├── HeapTests.java │ ├── HeapTestsPtsAliasing.java │ ├── HierarchyTests.java │ ├── ImplicitFlowTests.java │ ├── InFunctionTests.java │ ├── InheritanceTests.java │ ├── LengthTests.java │ ├── ListTests.java │ ├── MapTests.java │ ├── MultiTest.java │ ├── OperationSemanticTests.java │ ├── OtherTests.java │ ├── OverwriteTests.java │ ├── QueueTests.java │ ├── ReflectionTests.java │ ├── SetTests.java │ ├── SingleJoinPointTests.java │ ├── SourceSinkTests.java │ ├── StaticTests.java │ ├── StringTests.java │ ├── ThreadTests.java │ ├── TypeTests.java │ └── VectorTests.java ├── securibench ├── AliasingTests.java ├── ArrayTests.java ├── BasicTests.java ├── CollectionTests.java ├── DatastructureTests.java ├── FactoryTests.java ├── InterTests.java ├── JUnitTests.java ├── PredTests.java ├── ReflectionTests.java ├── SanitizerTests.java ├── SessionTests.java ├── StrongUpdateTests.java ├── TestCaseCreator.java └── supportClasses │ ├── DummyHttpRequest.java │ ├── DummyHttpResponse.java │ ├── DummyHttpSession.java │ ├── DummyServletConfig.java │ ├── DummyServletContext.java │ └── DummyServletInputStream.java └── utilclasses ├── C1static.java ├── C2static.java ├── ClassWithField.java ├── ClassWithField2.java ├── ClassWithFinal.java ├── ClassWithStatic.java └── D1static.java /.gitignore: -------------------------------------------------------------------------------- 1 | soot-infoflow/jimpleCode/ 2 | soot-infoflow-summaries/build/ 3 | soot-infoflow-summaries/target/ 4 | /.metadata 5 | /.recommenders 6 | .idea/ 7 | *.iml 8 | target/ 9 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "DroidBench"] 2 | path = DroidBench 3 | url = https://github.com/secure-software-engineering/DroidBench.git 4 | branch = develop 5 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | parent 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.m2e.core.maven2Builder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.m2e.core.maven2Nature 16 | 17 | 18 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /soot-infoflow-android/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.java text 4 | *.class binary 5 | *.jar binary -------------------------------------------------------------------------------- /soot-infoflow-android/.gitignore: -------------------------------------------------------------------------------- 1 | bin 2 | /JimpleFiles 3 | /sootOutput 4 | /ant.settings 5 | /build 6 | /reports 7 | /insecureBank/InsecureBank 8 | /out.log 9 | /target 10 | -------------------------------------------------------------------------------- /soot-infoflow-android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | soot-infoflow-android 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /soot-infoflow-android/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | encoding/schema=UTF-8 4 | encoding/src=UTF-8 5 | encoding/test=UTF-8 6 | -------------------------------------------------------------------------------- /soot-infoflow-android/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /soot-infoflow-android/SourcesAndSinks_SharedPrefsOnly.txt: -------------------------------------------------------------------------------- 1 | -> _SINK_ 2 | -> _SINK_ 3 | -> _SINK_ 4 | -> _SINK_ 5 | -> _SINK_ 6 | -------------------------------------------------------------------------------- /soot-infoflow-android/iccta_testdata_ic3_results/de.ecspride_1.txt: -------------------------------------------------------------------------------- 1 | name: "de.ecspride" 2 | version: 1 3 | used_permissions: "android.permission.READ_PHONE_STATE" 4 | components { 5 | name: "de.ecspride.IntentSink2" 6 | kind: ACTIVITY 7 | exported: true 8 | intent_filters { 9 | attributes { 10 | kind: ACTION 11 | value: "android.intent.action.MAIN" 12 | } 13 | attributes { 14 | kind: CATEGORY 15 | value: "android.intent.category.LAUNCHER" 16 | } 17 | } 18 | } 19 | analysis_start: 1470642636 20 | analysis_end: 1470642638 21 | -------------------------------------------------------------------------------- /soot-infoflow-android/iccta_testdata_ic3_results/edu.mit.shared_preferences_1.txt: -------------------------------------------------------------------------------- 1 | name: "edu.mit.shared_preferences" 2 | version: 1 3 | used_permissions: "android.permission.READ_PHONE_STATE" 4 | components { 5 | name: "edu.mit.shared_preferences.MainActivity" 6 | kind: ACTIVITY 7 | exported: true 8 | intent_filters { 9 | attributes { 10 | kind: ACTION 11 | value: "android.intent.action.MAIN" 12 | } 13 | attributes { 14 | kind: CATEGORY 15 | value: "android.intent.category.LAUNCHER" 16 | } 17 | } 18 | } 19 | components { 20 | name: "edu.mit.shared_preferences.AnotherActivity" 21 | kind: ACTIVITY 22 | exported: true 23 | intent_filters { 24 | attributes { 25 | kind: ACTION 26 | value: "edu.mit.DroidBench" 27 | } 28 | } 29 | } 30 | analysis_start: 1470642653 31 | analysis_end: 1470642655 32 | -------------------------------------------------------------------------------- /soot-infoflow-android/iccta_testdata_ic3_results/edu.mit.to_components_share_memory_1.txt: -------------------------------------------------------------------------------- 1 | name: "edu.mit.to_components_share_memory" 2 | version: 1 3 | used_permissions: "android.permission.READ_PHONE_STATE" 4 | components { 5 | name: "edu.mit.to_components_share_memory.MainActivity" 6 | kind: ACTIVITY 7 | exported: true 8 | intent_filters { 9 | attributes { 10 | kind: ACTION 11 | value: "android.intent.action.MAIN" 12 | } 13 | attributes { 14 | kind: CATEGORY 15 | value: "android.intent.category.LAUNCHER" 16 | } 17 | } 18 | } 19 | components { 20 | name: "edu.mit.to_components_share_memory.AnotherActivity" 21 | kind: ACTIVITY 22 | exported: true 23 | intent_filters { 24 | attributes { 25 | kind: ACTION 26 | value: "edu.mit.DroidBench" 27 | } 28 | } 29 | } 30 | analysis_start: 1470642656 31 | analysis_end: 1470642658 32 | -------------------------------------------------------------------------------- /soot-infoflow-android/insecureBank/InsecureBank.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/insecureBank/InsecureBank.apk -------------------------------------------------------------------------------- /soot-infoflow-android/lib/junit.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/lib/junit.jar -------------------------------------------------------------------------------- /soot-infoflow-android/lib/org.hamcrest.core_1.3.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/lib/org.hamcrest.core_1.3.0.jar -------------------------------------------------------------------------------- /soot-infoflow-android/lib/protobuf-java-2.5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/lib/protobuf-java-2.5.0.jar -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/axml/AXmlTypes.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.axml; 2 | 3 | /** 4 | * Class containing type constants for Android XML files 5 | * 6 | * @author Steven Arzt 7 | * 8 | */ 9 | public class AXmlTypes { 10 | 11 | public static final int TYPE_INT_BOOLEAN = 0x00000012; 12 | public static final int TYPE_STRING = 0x00000003; 13 | public static final int TYPE_FIRST_INT = 0x00000010; 14 | public static final int TYPE_INT_HEX = 0x00000011; 15 | public static final int TYPE_REFERENCE = 0x00000001; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/callbacks/filters/AbstractCallbackFilter.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.callbacks.filters; 2 | 3 | import soot.jimple.infoflow.android.callbacks.ComponentReachableMethods; 4 | 5 | /** 6 | * Abstract base class for callback filters 7 | * 8 | * @author Steven Arzt 9 | * 10 | */ 11 | public abstract class AbstractCallbackFilter implements ICallbackFilter { 12 | 13 | protected ComponentReachableMethods reachableMethods = null; 14 | 15 | @Override 16 | public void setReachableMethods(ComponentReachableMethods rm) { 17 | this.reachableMethods = rm; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/iccta/IccLinkProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.iccta; 2 | 3 | import java.util.List; 4 | 5 | public interface IccLinkProvider 6 | { 7 | public List getIccLinks(); 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/iccta/MessageHandler.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.iccta; 2 | 3 | import java.util.Collection; 4 | 5 | import soot.Scene; 6 | import soot.SootClass; 7 | 8 | public final class MessageHandler { 9 | 10 | private MessageHandler() { 11 | } 12 | 13 | public static Collection getAllHandlers() { 14 | SootClass handler = Scene.v().getSootClass("android.os.Handler"); 15 | Collection h = Scene.v().getOrMakeFastHierarchy().getSubclassesOf(handler); 16 | 17 | return h; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/ComponentType.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest; 2 | 3 | /** 4 | * Enumeration containing the various component types supported in Android 5 | */ 6 | public enum ComponentType { 7 | Activity, Service, ContentProvider, BroadcastReceiver 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/IActivity.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest; 2 | 3 | import java.util.List; 4 | 5 | import soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointConstants; 6 | 7 | /** 8 | * An activity inside an Android app 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public interface IActivity extends IAndroidComponent { 14 | 15 | @Override 16 | default public List getLifecycleMethods() { 17 | return AndroidEntryPointConstants.getActivityLifecycleMethods(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/IBroadcastReceiver.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest; 2 | 3 | import java.util.List; 4 | 5 | import soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointConstants; 6 | 7 | /** 8 | * Interface for broadcast receivers inside an Android app 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public interface IBroadcastReceiver extends IAndroidComponent { 14 | 15 | @Override 16 | default public List getLifecycleMethods() { 17 | return AndroidEntryPointConstants.getBroadcastLifecycleMethods(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/IContentProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest; 2 | 3 | import java.util.List; 4 | 5 | import soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointConstants; 6 | 7 | /** 8 | * Interface for content providers inside an Android app 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public interface IContentProvider extends IAndroidComponent { 14 | 15 | @Override 16 | default public List getLifecycleMethods() { 17 | return AndroidEntryPointConstants.getContentproviderLifecycleMethods(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/IService.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest; 2 | 3 | import java.util.List; 4 | 5 | import soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointConstants; 6 | 7 | /** 8 | * Interface for services inside an Android app 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public interface IService extends IAndroidComponent { 14 | 15 | @Override 16 | default public List getLifecycleMethods() { 17 | return AndroidEntryPointConstants.getServiceLifecycleMethods(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/binary/BinaryManifestActivity.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest.binary; 2 | 3 | import soot.jimple.infoflow.android.axml.AXmlNode; 4 | import soot.jimple.infoflow.android.manifest.BaseProcessManifest; 5 | import soot.jimple.infoflow.android.manifest.IActivity; 6 | 7 | /** 8 | * An activity loaded from a binary Android manifest 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public class BinaryManifestActivity extends AbstractBinaryAndroidComponent implements IActivity { 14 | 15 | /** 16 | * Creates a new instance of the {@link BinaryManifestActivity} class 17 | * 18 | * @param node The binary XML node 19 | * @param manifest The manifest 20 | */ 21 | public BinaryManifestActivity(AXmlNode node, BaseProcessManifest manifest) { 22 | super(node, manifest); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/binary/BinaryManifestContentProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest.binary; 2 | 3 | import soot.jimple.infoflow.android.axml.AXmlNode; 4 | import soot.jimple.infoflow.android.manifest.BaseProcessManifest; 5 | import soot.jimple.infoflow.android.manifest.IContentProvider; 6 | 7 | /** 8 | * A content provider loaded from a binary Android manifest 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public class BinaryManifestContentProvider extends AbstractBinaryAndroidComponent implements IContentProvider { 14 | 15 | public BinaryManifestContentProvider(AXmlNode node, BaseProcessManifest manifest) { 16 | super(node, manifest); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/manifest/binary/BinaryManifestService.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.manifest.binary; 2 | 3 | import soot.jimple.infoflow.android.axml.AXmlNode; 4 | import soot.jimple.infoflow.android.manifest.BaseProcessManifest; 5 | import soot.jimple.infoflow.android.manifest.IService; 6 | 7 | /** 8 | * A service loaded from a binary Android manifest 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public class BinaryManifestService extends AbstractBinaryAndroidComponent implements IService { 14 | 15 | /** 16 | * Creates a new instance of the {@link BinaryManifestService} class 17 | * 18 | * @param node The binary XML node 19 | * @param manifest The manifest 20 | */ 21 | public BinaryManifestService(AXmlNode node, BaseProcessManifest manifest) { 22 | super(node, manifest); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/results/xml/XmlConstants.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.results.xml; 2 | 3 | /** 4 | * Class containing the tag and attribute names for serializing data flow 5 | * results to XML. 6 | * 7 | * @author Steven Arzt 8 | * 9 | */ 10 | class XmlConstants { 11 | 12 | class Tags { 13 | 14 | // presently not used 15 | 16 | } 17 | 18 | class Attributes { 19 | 20 | public static final String systemCategory = "SystemCategory"; 21 | public static final String userCategory = "UserCategory"; 22 | 23 | } 24 | 25 | class Values { 26 | 27 | public static final String TRUE = "true"; 28 | public static final String FALSE = "false"; 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /soot-infoflow-android/src/soot/jimple/infoflow/android/source/parsers/xml/ResourceUtils.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.source.parsers.xml; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | 6 | public class ResourceUtils { 7 | 8 | /** 9 | * Returns an input stream of a specified resource files, which is contained within the 10 | * JAR. This method does throw an exception in case the resource file was not found. 11 | * The caller responsible for closing the stream. 12 | * @param filename the resource file name 13 | * @return the input stream 14 | * @throws IOException 15 | */ 16 | public static InputStream getResourceStream(String filename) throws IOException { 17 | return soot.jimple.infoflow.util.ResourceUtils.getResourceStream(ResourceUtils.class, filename); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/BaseJUnitTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * Abstract base class for JUnit tests in the Android plugin 7 | * 8 | * @author Steven Arzt 9 | * 10 | */ 11 | public abstract class BaseJUnitTests { 12 | 13 | /** 14 | * Gets the root in which the FlowDroid Android project is located 15 | * 16 | * @return The directory in which the FlowDroid Android project is located 17 | */ 18 | public static File getInfoflowAndroidRoot() { 19 | File testRoot = new File("."); 20 | if (!new File(testRoot, "src").exists()) 21 | testRoot = new File(testRoot, "soot-infoflow-android"); 22 | if (!new File(testRoot, "src").exists()) 23 | throw new RuntimeException(String.format("Test root not found in %s", testRoot.getAbsolutePath())); 24 | return testRoot; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/AliasingTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class AliasingTest extends soot.jimple.infoflow.android.test.droidBench.AliasingTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/AndroidSpecificTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class AndroidSpecificTest extends soot.jimple.infoflow.android.test.droidBench.AndroidSpecificTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/ArrayAndListTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class ArrayAndListTest extends soot.jimple.infoflow.android.test.droidBench.ArrayAndListTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/CallbackTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class CallbackTest extends soot.jimple.infoflow.android.test.droidBench.CallbackTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/EmulatorDetectionTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class EmulatorDetectionTest extends soot.jimple.infoflow.android.test.droidBench.EmulatorDetectionTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/FieldAndObjectSensitivityTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class FieldAndObjectSensitivityTest extends soot.jimple.infoflow.android.test.droidBench.FieldAndObjectSensitivityTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/GeneralJavaTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class GeneralJavaTest extends soot.jimple.infoflow.android.test.droidBench.GeneralJavaTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/ImplicitFlowTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class ImplicitFlowTest extends soot.jimple.infoflow.android.test.droidBench.ImplicitFlowTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/InterAppCommunicationTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class InterAppCommunicationTest extends soot.jimple.infoflow.android.test.droidBench.InterAppCommunicationTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/InterComponentCommunicationTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class InterComponentCommunicationTest extends soot.jimple.infoflow.android.test.droidBench.InterComponentCommunicationTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/LifecycleTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class LifecycleTest extends soot.jimple.infoflow.android.test.droidBench.LifecycleTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/ReflectionICCTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | import org.junit.Ignore; 4 | 5 | @Ignore("Buggy, call graph problem") 6 | public class ReflectionICCTest extends soot.jimple.infoflow.android.test.droidBench.ReflectionICCTest { 7 | @Override 8 | protected TestResultMode getTestResultMode() { 9 | return TestResultMode.FLOWDROID_BACKWARDS; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/ReflectionTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class ReflectionTest extends soot.jimple.infoflow.android.test.droidBench.ReflectionTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/backward/ThreadingTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.backward; 2 | 3 | public class ThreadingTest extends soot.jimple.infoflow.android.test.droidBench.ThreadingTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_BACKWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/AliasingTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class AliasingTest extends soot.jimple.infoflow.android.test.droidBench.AliasingTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/AndroidSpecificTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class AndroidSpecificTest extends soot.jimple.infoflow.android.test.droidBench.AndroidSpecificTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/ArrayAndListTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class ArrayAndListTest extends soot.jimple.infoflow.android.test.droidBench.ArrayAndListTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/CallbackTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class CallbackTest extends soot.jimple.infoflow.android.test.droidBench.CallbackTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/EmulatorDetectionTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class EmulatorDetectionTest extends soot.jimple.infoflow.android.test.droidBench.EmulatorDetectionTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/FieldAndObjectSensitivityTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class FieldAndObjectSensitivityTest extends soot.jimple.infoflow.android.test.droidBench.FieldAndObjectSensitivityTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/GeneralJavaTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class GeneralJavaTest extends soot.jimple.infoflow.android.test.droidBench.GeneralJavaTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/ImplicitFlowTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class ImplicitFlowTest extends soot.jimple.infoflow.android.test.droidBench.ImplicitFlowTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/InterAppCommunicationTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class InterAppCommunicationTest extends soot.jimple.infoflow.android.test.droidBench.InterAppCommunicationTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/InterComponentCommunicationTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class InterComponentCommunicationTest extends soot.jimple.infoflow.android.test.droidBench.InterComponentCommunicationTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/LifecycleTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class LifecycleTest extends soot.jimple.infoflow.android.test.droidBench.LifecycleTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/ReflectionICCTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | import org.junit.Ignore; 4 | 5 | @Ignore("Buggy, call graph problem") 6 | public class ReflectionICCTest extends soot.jimple.infoflow.android.test.droidBench.ReflectionICCTest { 7 | @Override 8 | protected TestResultMode getTestResultMode() { 9 | return TestResultMode.FLOWDROID_FORWARDS; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/ReflectionTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class ReflectionTest extends soot.jimple.infoflow.android.test.droidBench.ReflectionTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/test/soot/jimple/infoflow/android/test/droidBench/forward/ThreadingTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.android.test.droidBench.forward; 2 | 3 | public class ThreadingTest extends soot.jimple.infoflow.android.test.droidBench.ThreadingTest { 4 | @Override 5 | protected TestResultMode getTestResultMode() { 6 | return TestResultMode.FLOWDROID_FORWARDS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/9458cfb51c90130938abcef7173c3f6d44a02720.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/9458cfb51c90130938abcef7173c3f6d44a02720.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/FlowDroidAliasActivity.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/FlowDroidAliasActivity.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/ReturnParameterTest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/ReturnParameterTest.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink1.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink1.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink2.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink2.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink3.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink3.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink4.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink4.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink5.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink5.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink6.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testAPKs/SourceSinkDefinitions/SourceToSink6.apk -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/completeOld.txt: -------------------------------------------------------------------------------- 1 | -> _SOURCE_ 2 | -> _SINK_ 3 | -> _SINK_ -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/empty.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testXmlParser/empty.txt -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/empty.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-android/testXmlParser/empty.xml -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/invalidReturnCallType.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/missingParts.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/missingPartsOld.txt: -------------------------------------------------------------------------------- 1 | -> _SINK_ -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/notValid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /soot-infoflow-android/testXmlParser/returnCallType.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /target/ 3 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | soot-infoflow-cmd 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | encoding/src=UTF-8 4 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/build/.gitignore: -------------------------------------------------------------------------------- 1 | /classes/ 2 | /testclasses/ 3 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/sootOutput/de.fraunhofer.sit.deserializationvuln.R$drawable.jimple: -------------------------------------------------------------------------------- 1 | public final class de.fraunhofer.sit.deserializationvuln.R$drawable extends java.lang.Object 2 | { 3 | public static final int ic_launcher_background; 4 | public static final int ic_launcher_foreground; 5 | 6 | public void () 7 | { 8 | de.fraunhofer.sit.deserializationvuln.R$drawable $r0; 9 | 10 | $r0 := @this: de.fraunhofer.sit.deserializationvuln.R$drawable; 11 | 12 | specialinvoke $r0.()>(); 13 | 14 | return; 15 | } 16 | 17 | public static void () 18 | { 19 | = 2130903042; 20 | 21 | = 2130903041; 22 | 23 | return; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/sootOutput/de.fraunhofer.sit.deserializationvuln.R$layout.jimple: -------------------------------------------------------------------------------- 1 | public final class de.fraunhofer.sit.deserializationvuln.R$layout extends java.lang.Object 2 | { 3 | public static final int activity_main; 4 | 5 | public void () 6 | { 7 | de.fraunhofer.sit.deserializationvuln.R$layout $r0; 8 | 9 | $r0 := @this: de.fraunhofer.sit.deserializationvuln.R$layout; 10 | 11 | specialinvoke $r0.()>(); 12 | 13 | return; 14 | } 15 | 16 | public static void () 17 | { 18 | = 2131034112; 19 | 20 | return; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/sootOutput/de.fraunhofer.sit.deserializationvuln.R$mipmap.jimple: -------------------------------------------------------------------------------- 1 | public final class de.fraunhofer.sit.deserializationvuln.R$mipmap extends java.lang.Object 2 | { 3 | public static final int ic_launcher; 4 | public static final int ic_launcher_round; 5 | 6 | public void () 7 | { 8 | de.fraunhofer.sit.deserializationvuln.R$mipmap $r0; 9 | 10 | $r0 := @this: de.fraunhofer.sit.deserializationvuln.R$mipmap; 11 | 12 | specialinvoke $r0.()>(); 13 | 14 | return; 15 | } 16 | 17 | public static void () 18 | { 19 | = 2131099649; 20 | 21 | = 2131099648; 22 | 23 | return; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/sootOutput/de.fraunhofer.sit.deserializationvuln.R$string.jimple: -------------------------------------------------------------------------------- 1 | public final class de.fraunhofer.sit.deserializationvuln.R$string extends java.lang.Object 2 | { 3 | public static final int app_name; 4 | 5 | public void () 6 | { 7 | de.fraunhofer.sit.deserializationvuln.R$string $r0; 8 | 9 | $r0 := @this: de.fraunhofer.sit.deserializationvuln.R$string; 10 | 11 | specialinvoke $r0.()>(); 12 | 13 | return; 14 | } 15 | 16 | public static void () 17 | { 18 | = 2131165184; 19 | 20 | return; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/sootOutput/de.fraunhofer.sit.deserializationvuln.R$style.jimple: -------------------------------------------------------------------------------- 1 | public final class de.fraunhofer.sit.deserializationvuln.R$style extends java.lang.Object 2 | { 3 | public static final int AppTheme; 4 | 5 | public void () 6 | { 7 | de.fraunhofer.sit.deserializationvuln.R$style $r0; 8 | 9 | $r0 := @this: de.fraunhofer.sit.deserializationvuln.R$style; 10 | 11 | specialinvoke $r0.()>(); 12 | 13 | return; 14 | } 15 | 16 | public static void () 17 | { 18 | = 2131230720; 19 | 20 | return; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/sootOutput/de.fraunhofer.sit.deserializationvuln.R.jimple: -------------------------------------------------------------------------------- 1 | public final class de.fraunhofer.sit.deserializationvuln.R extends java.lang.Object 2 | { 3 | 4 | public void () 5 | { 6 | de.fraunhofer.sit.deserializationvuln.R $r0; 7 | 8 | $r0 := @this: de.fraunhofer.sit.deserializationvuln.R; 9 | 10 | specialinvoke $r0.()>(); 11 | 12 | return; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /soot-infoflow-cmd/src/soot/jimple/infoflow/cmd/AbortAnalysisException.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.cmd; 2 | 3 | /** 4 | * Exception that is thrown when a method wants to abort the data flow analysis 5 | * 6 | * @author Steven Arzt 7 | * 8 | */ 9 | public class AbortAnalysisException extends RuntimeException { 10 | 11 | private static final long serialVersionUID = 1680221667425749422L; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow-integration/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /build/ 3 | /sootOutput/ -------------------------------------------------------------------------------- /soot-infoflow-integration/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | soot-infoflow-integration 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /soot-infoflow-integration/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | encoding/res=UTF-8 4 | encoding/test=UTF-8 5 | -------------------------------------------------------------------------------- /soot-infoflow-integration/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /soot-infoflow-integration/SourcesAndSinks_GeoLocationNetworkOnly.txt: -------------------------------------------------------------------------------- 1 | (java.lang.String)> -> _SINK_ 2 | -> _SOURCE_ 3 | -> _SOURCE_ -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/collections/test/Helper.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.test; 2 | 3 | public class Helper { 4 | public static String source() { 5 | return "secret"; 6 | } 7 | 8 | public static void sink(Object str) { 9 | System.out.println(str); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/collections/test/ListAddAllItselfTestCode.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.test; 2 | 3 | import soot.jimple.infoflow.collections.test.junit.FlowDroidTest; 4 | 5 | import java.util.ArrayList; 6 | 7 | import static soot.jimple.infoflow.collections.test.Helper.sink; 8 | import static soot.jimple.infoflow.collections.test.Helper.source; 9 | 10 | public class ListAddAllItselfTestCode { 11 | @FlowDroidTest(expected = 1) 12 | public void testListAllAllItselfFiniteLoop1() { 13 | ArrayList lst = new ArrayList<>(); 14 | lst.add(source()); 15 | for (int i = 0; i < 3; i++) { 16 | lst.addAll(lst); 17 | } 18 | sink(lst.get(0)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/collections/test/junit/FlowDroidTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.test.junit; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target(ElementType.METHOD) 10 | public @interface FlowDroidTest { 11 | int expected(); 12 | } 13 | -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/integration/test/junit/BackwardAndroidRegressionTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.integration.test.junit; 2 | 3 | import soot.jimple.infoflow.InfoflowConfiguration; 4 | 5 | public class BackwardAndroidRegressionTests extends AndroidRegressionTests { 6 | @Override 7 | protected void setConfiguration(InfoflowConfiguration config) { 8 | config.setDataFlowDirection(InfoflowConfiguration.DataFlowDirection.Backwards); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/integration/test/junit/river/EasyTaintWrapperRiverWithoutPathsTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.integration.test.junit.river; 2 | 3 | import soot.jimple.infoflow.InfoflowConfiguration; 4 | 5 | /** 6 | * Tests the RiverTestCode with the EasyTaintWrapper and no path reconstruction 7 | * 8 | * @author Tim Lange 9 | */ 10 | public class EasyTaintWrapperRiverWithoutPathsTests extends EasyTaintWrapperRiverTests { 11 | @Override 12 | protected void setConfiguration(InfoflowConfiguration config) { 13 | super.setConfiguration(config); 14 | config.getPathConfiguration().setPathReconstructionMode(InfoflowConfiguration.PathReconstructionMode.NoPaths); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/integration/test/junit/river/MultipleSinksWithoutPathsTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.integration.test.junit.river; 2 | 3 | import soot.jimple.infoflow.InfoflowConfiguration; 4 | 5 | /** 6 | * Tests the merging and separating of SourceSinkDefinitions referecing the same statement or method 7 | * with path reconstruction disabled 8 | */ 9 | public class MultipleSinksWithoutPathsTest extends MultipleSinkTests { 10 | @Override 11 | protected void setConfiguration(InfoflowConfiguration config) { 12 | super.setConfiguration(config); 13 | config.getPathConfiguration().setPathReconstructionMode(InfoflowConfiguration.PathReconstructionMode.NoPaths); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/integration/test/junit/river/RiverBaseJUnitTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.integration.test.junit.river; 2 | 3 | import soot.jimple.infoflow.InfoflowConfiguration; 4 | 5 | public abstract class RiverBaseJUnitTests extends BaseJUnitTests { 6 | 7 | @Override 8 | protected void setConfiguration(InfoflowConfiguration config) { 9 | config.setAdditionalFlowsEnabled(true); 10 | config.getPathConfiguration().setPathReconstructionMode(InfoflowConfiguration.PathReconstructionMode.Fast); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow-integration/test/soot/jimple/infoflow/integration/test/junit/river/SummaryTaintWrapperRiverWithoutPathsTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.integration.test.junit.river; 2 | 3 | import soot.jimple.infoflow.InfoflowConfiguration; 4 | 5 | /** 6 | * Tests the RiverTestCode with the SummaryTaintWrapper and no path reconstruction 7 | * 8 | * @author Tim Lange 9 | */ 10 | public class SummaryTaintWrapperRiverWithoutPathsTests extends SummaryTaintWrapperRiverTests { 11 | @Override 12 | protected void setConfiguration(InfoflowConfiguration config) { 13 | super.setConfiguration(config); 14 | config.getPathConfiguration().setPathReconstructionMode(InfoflowConfiguration.PathReconstructionMode.NoPaths); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/Collections/AppWithConstantFields.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/Collections/AppWithConstantFields.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/Collections/StringResourcesTest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/Collections/StringResourcesTest.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/ConditionalFlowTest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/ConditionalFlowTest.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/CoordinatesToURLParameter.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/CoordinatesToURLParameter.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/ExternalCacheDirTest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/ExternalCacheDirTest.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/ExternalFileWithNativeName.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/ExternalFileWithNativeName.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/KotlinCollectionApp.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/KotlinCollectionApp.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/MapClearTest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/MapClearTest.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/PrintWriterTest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/PrintWriterTest.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/ThreadRunnable.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/ThreadRunnable.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/ThreadRunnableIndirect.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/ThreadRunnableIndirect.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/TypeHierarchyTest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/TypeHierarchyTest.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/XMLCallbackAPI33.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/XMLCallbackAPI33.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/flowsensitiveOverwrite.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/flowsensitiveOverwrite.apk -------------------------------------------------------------------------------- /soot-infoflow-integration/testAPKs/identityOverObjectInit.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secure-software-engineering/FlowDroid/70aa5b3f938726a8dd6685eae09c84196432c6d6/soot-infoflow-integration/testAPKs/identityOverObjectInit.apk -------------------------------------------------------------------------------- /soot-infoflow-summaries/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /testBin/ 3 | /target 4 | /sootOutput/ -------------------------------------------------------------------------------- /soot-infoflow-summaries/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | soot-infoflow-summaries 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | encoding/schema=UTF-8 4 | encoding/src=UTF-8 5 | encoding/summariesManual=UTF-8 6 | encoding/test=UTF-8 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/build/.gitignore: -------------------------------------------------------------------------------- 1 | /classes/ 2 | /testclasses/ 3 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/ConcurrentMergingSummaryProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.data.provider; 2 | 3 | import soot.jimple.infoflow.methodSummary.data.summary.ClassSummaries; 4 | import soot.jimple.infoflow.methodSummary.data.summary.ConcurrentClassSummaries; 5 | 6 | /** 7 | * Concurrent version of the {@link MergingSummaryProvider} class 8 | * 9 | * @author Steven Arzt 10 | * 11 | */ 12 | public class ConcurrentMergingSummaryProvider extends MergingSummaryProvider { 13 | 14 | @Override 15 | protected ClassSummaries createClassSummaries() { 16 | return new ConcurrentClassSummaries(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/sourceSink/InvalidFlowSpecificationException.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.data.sourceSink; 2 | 3 | /** 4 | * Exception that is thrown when a source or sink specification inside a summary 5 | * flow is invalid 6 | * 7 | * @author Steven Arzt 8 | * 9 | */ 10 | public class InvalidFlowSpecificationException extends RuntimeException { 11 | 12 | private static final long serialVersionUID = -6548286243034212560L; 13 | 14 | private final AbstractFlowSinkSource sinkSource; 15 | 16 | public InvalidFlowSpecificationException(String message, AbstractFlowSinkSource sinkSource) { 17 | super(message); 18 | this.sinkSource = sinkSource; 19 | } 20 | 21 | public AbstractFlowSinkSource getSinkSource() { 22 | return sinkSource; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/summary/ConcurrentClassSummaries.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.data.summary; 2 | 3 | import java.util.Map; 4 | import java.util.concurrent.ConcurrentHashMap; 5 | 6 | /** 7 | * Concurrent version of the {@link ClassSummaries} class 8 | * 9 | * @author Steven Arzt 10 | * 11 | */ 12 | public class ConcurrentClassSummaries extends ClassSummaries { 13 | 14 | @Override 15 | protected Map createSummariesMap() { 16 | return new ConcurrentHashMap<>(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/summary/ImplicitLocation.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.data.summary; 2 | 3 | public enum ImplicitLocation { 4 | First, 5 | Last, 6 | Next 7 | } 8 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/summary/IsAliasType.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.data.summary; 2 | 3 | public enum IsAliasType { 4 | /* Always valid in alias flow */ 5 | TRUE, 6 | /* Always not valid in alias flow */ 7 | FALSE, 8 | /* Only valid if the incoming abstraction has a context */ 9 | WITH_CONTEXT 10 | } 11 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/generator/ISummaryInfoflow.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.generator; 2 | 3 | import soot.jimple.infoflow.IInfoflow; 4 | import soot.jimple.infoflow.InfoflowManager; 5 | 6 | public interface ISummaryInfoflow extends IInfoflow { 7 | InfoflowManager getManager(); 8 | } 9 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/util/AliasUtils.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.util; 2 | 3 | import soot.RefType; 4 | import soot.Type; 5 | import soot.jimple.infoflow.data.AccessPath; 6 | 7 | /** 8 | * Utility class for handling aliasing-related checks 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public class AliasUtils { 14 | 15 | /** 16 | * Checks whether the given access path can potentially have aliases 17 | * 18 | * @param ap The access path to check 19 | * @return True if the given access path can potentially have aliases, otherwise 20 | * false 21 | */ 22 | public static boolean canAccessPathHaveAliases(AccessPath ap) { 23 | Type lastType = ap.getLastFieldType(); 24 | return lastType instanceof RefType && !((RefType) lastType).getSootClass().getName().equals("java.lang.String"); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/xml/SummaryXMLException.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.methodSummary.xml; 2 | 3 | public class SummaryXMLException extends Exception { 4 | 5 | /** 6 | * 7 | */ 8 | private static final long serialVersionUID = 1L; 9 | 10 | public SummaryXMLException() { 11 | super(); 12 | } 13 | 14 | public SummaryXMLException(String message) { 15 | super(message); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/System.Object.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.content.ClipData.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.content.pm.ApplicationInfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.content.pm.PackageItemInfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableBoolean.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableByte.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableChar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableDouble.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableFloat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableInt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableLong.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.util.MutableShort.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/android.widget.Button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/com.esotericsoftware.kryo.io.Output.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/com.google.common.collect.HashBasedTable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/com.google.common.collect.HashMultimap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/com.google.common.collect.Table$Cell.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/com.google.common.io.BaseEncoding.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/com.mashape.unirest.request.GetRequest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/cz.msebera.android.httpclient.util.EntityUtils.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/jakarta.servlet.http.HttpServletResponse.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.io.FileInputStream.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.io.FileWriter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.io.FilterInputStream.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.lang.Exception.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.lang.NullPointerException.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.lang.Object.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.lang.RuntimeException.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.net.HttpURLConnection.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.net.URLDecoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.net.URLEncoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.security.SecureRandom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.Enumeration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.HashMap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.HashSet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.Iterator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.Set.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.Spliterator$OfPrimitive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.concurrent.Future.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/java.util.function.UnaryOperator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.ejb.EnterpriseBean.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.ejb.EntityBean.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.ejb.MessageDrivenBean.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.ejb.SessionBean.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.naming.directory.InitialDirContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.net.ssl.HttpsURLConnection.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.GenericServlet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.ServletConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.ServletInputStream.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.ServletOutputStream.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.ServletRequestWrapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.ServletResponseWrapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.http.HttpServlet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.http.HttpServletRequest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.http.HttpServletRequestWrapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/javax.servlet.http.HttpServletResponseWrapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/kotlin.collections.CollectionsKt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/okio.Base64.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.codec.BinaryDecoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.codec.BinaryEncoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.codec.Decoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.codec.Encoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.codec.StringDecoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.codec.StringEncoder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.mail.MultiPartEmail.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.commons.mail.SimpleEmail.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.RequestLine.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.auth.KerberosCredentials.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.auth.NTCredentials.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.auth.UsernamePasswordCredentials.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.client.methods.AbstractExecutionAwareRequest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.client.methods.CloseableHttpResponse.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.entity.AbstractHttpEntity.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.entity.mime.content.AbstractContentBody.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.entity.mime.content.ByteArrayBody.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.entity.mime.content.FileBody.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.entity.mime.content.InputStreamBody.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.entity.mime.content.StringBody.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.AbstractHttpClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.AutoRetryHttpClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.BasicCredentialsProvider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.CloseableHttpClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.ContentEncodingHttpClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.DecompressingHttpClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.DefaultHttpClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.SystemDefaultCredentialsProvider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.impl.client.SystemDefaultHttpClient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.message.AbstractHttpMessage.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.message.BasicHttpEntityEnclosingRequest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.apache.http.message.BasicHttpRequest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.joda.time.DateTimeZone.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.joda.time.tz.ZoneInfoProvider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.w3c.dom.Document.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.w3c.dom.Element.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.w3c.dom.Node.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/summariesManual/org.w3c.dom.NodeList.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/.gitignore: -------------------------------------------------------------------------------- 1 | /ListTestCode.java 2 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/ApiInternalClass.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public class ApiInternalClass { 4 | 5 | 6 | public static Object getOStatic(Data d){ 7 | return d.getData(); 8 | 9 | } 10 | 11 | public Object getO(Data d){ 12 | return d.getData(); 13 | } 14 | 15 | public Data returnData(Data d){ 16 | Data t = new Data(); 17 | t.objectField = d.objectField; 18 | t.stringField = d.stringField; 19 | t.value = d.value; 20 | return t; 21 | } 22 | public void write(Data d1,Data d2){ 23 | d2.setData(d1.getData()); 24 | 25 | } 26 | public void write(Object o1,Data d2){ 27 | d2.setData(o1); 28 | 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/Callbacks.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public class Callbacks { 4 | 5 | public interface MyCallbacks { 6 | 7 | public String transform(String in); 8 | public void transformObject(Data o); 9 | 10 | } 11 | 12 | public String paraToCallbackToReturn(String data, MyCallbacks cbs) { 13 | String foo = cbs.transform(data); 14 | return foo; 15 | } 16 | 17 | private MyCallbacks cbs = null; 18 | 19 | public void setCallbacks(MyCallbacks cbs) { 20 | this.cbs = cbs; 21 | } 22 | 23 | public String fieldCallbackToReturn(String data) { 24 | String foo = cbs.transform(data); 25 | return foo; 26 | } 27 | 28 | public Data fieldCallbackToField(Data o) { 29 | cbs.transformObject(o); 30 | return o; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/ContextSensitivity.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | 4 | /** 5 | * Test targets for making sure that we don't loose context sensitivity in our 6 | * approach, especially during path reconstruction 7 | * 8 | * @author Steven Arzt 9 | * 10 | */ 11 | public class ContextSensitivity { 12 | 13 | private String x = null, y = null, z = null; 14 | 15 | void contextSensitivity1(Data d, String str1, String str2) { 16 | d.stringField = id(str1); 17 | d.stringField2 = id(str2); 18 | } 19 | 20 | String recursionTest1(String str) { 21 | System.out.println("run"); 22 | z = y; 23 | y = x; 24 | x = str; 25 | if (z == null) 26 | return recursionTest1(y); 27 | return z; 28 | } 29 | 30 | private String id(String s) { 31 | return s; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/Data2.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public class Data2 { 4 | 5 | public Object c; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/IGapClass.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public interface IGapClass { 4 | 5 | public String callTheGap(String in); 6 | public void fillDataString(String in, Data d); 7 | public Data dataThroughGap(Data d); 8 | 9 | public void storeString(String in); 10 | public String retrieveString(); 11 | 12 | public void storeData(Data in); 13 | public Data retrieveData(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/IUserCodeClass.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public interface IUserCodeClass { 4 | 5 | public String callTheGap(String in); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/InheritanceTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public class InheritanceTests { 4 | 5 | private abstract class Base { 6 | 7 | public abstract String doIt(int i, String s); 8 | 9 | } 10 | 11 | private class Concrete extends Base { 12 | 13 | @Override 14 | public String doIt(int i, String s) { 15 | if (i == 0) 16 | return s; 17 | return doIt(i - 1, s); 18 | } 19 | 20 | } 21 | 22 | public String abstractClassTest1(String in) { 23 | Base b = new Concrete(); 24 | return b.doIt(10, in); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/Pair.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public class Pair { 4 | 5 | private Object o1; 6 | private Object o2; 7 | 8 | public Pair(Object o1, Object o2) { 9 | this.o1 = o1; 10 | this.o2 = o2; 11 | } 12 | 13 | public Object getO1() { 14 | return this.o1; 15 | } 16 | 17 | public void setComplex(Data a) { 18 | this.o1 = a.b.c; 19 | } 20 | 21 | public Object getO2() { 22 | return this.o2; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/TestCollection.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public class TestCollection { 4 | 5 | public void add(Object o) { 6 | // 7 | } 8 | 9 | public void clear() { 10 | 11 | } 12 | 13 | public Object get() { 14 | return null; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/UserCodeClass.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary; 2 | 3 | public class UserCodeClass implements IUserCodeClass { 4 | 5 | @Override 6 | public String callTheGap(String in) { 7 | return in; 8 | } 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/TaintWrapperFactory.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit; 2 | 3 | import soot.jimple.infoflow.taintWrappers.ITaintPropagationWrapper; 4 | 5 | public interface TaintWrapperFactory { 6 | public ITaintPropagationWrapper newTaintWrapper() throws Exception; 7 | } 8 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/WrapperListTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit; 2 | 3 | import soot.jimple.infoflow.IInfoflow; 4 | import soot.jimple.infoflow.methodSummary.taintWrappers.TaintWrapperFactory; 5 | import soot.jimple.infoflow.test.junit.ListTests; 6 | 7 | public abstract class WrapperListTests extends ListTests { 8 | 9 | @Override 10 | protected IInfoflow initInfoflow(boolean useTaintWrapper) { 11 | IInfoflow result = super.initInfoflow(useTaintWrapper); 12 | WrapperListTestConfig testConfig = new WrapperListTestConfig(); 13 | result.setSootConfig(testConfig); 14 | try { 15 | result.setTaintWrapper(TaintWrapperFactory.createTaintWrapper()); 16 | } catch (Exception e) { 17 | throw new RuntimeException("Could not initialize taint wrapper!"); 18 | } 19 | return result; 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/WrapperMapTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit; 2 | 3 | import soot.jimple.infoflow.IInfoflow; 4 | import soot.jimple.infoflow.methodSummary.taintWrappers.TaintWrapperFactory; 5 | import soot.jimple.infoflow.test.junit.MapTests; 6 | 7 | public abstract class WrapperMapTests extends MapTests { 8 | 9 | @Override 10 | protected IInfoflow initInfoflow(boolean useTaintWrapper) { 11 | IInfoflow result = super.initInfoflow(useTaintWrapper); 12 | WrapperListTestConfig testConfig = new WrapperListTestConfig(); 13 | result.setSootConfig(testConfig); 14 | try { 15 | result.setTaintWrapper(TaintWrapperFactory.createTaintWrapper()); 16 | } catch (Exception e) { 17 | throw new RuntimeException("Could not initialize taint wrapper!"); 18 | } 19 | return result; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/WrapperQueueTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit; 2 | 3 | 4 | import soot.jimple.infoflow.IInfoflow; 5 | import soot.jimple.infoflow.methodSummary.taintWrappers.TaintWrapperFactory; 6 | import soot.jimple.infoflow.test.junit.QueueTests; 7 | 8 | public abstract class WrapperQueueTests extends QueueTests { 9 | @Override 10 | protected IInfoflow initInfoflow(boolean useTaintWrapper) { 11 | IInfoflow result = super.initInfoflow(useTaintWrapper); 12 | WrapperListTestConfig testConfig = new WrapperListTestConfig(); 13 | result.setSootConfig(testConfig); 14 | try { 15 | result.setTaintWrapper(TaintWrapperFactory.createTaintWrapper()); 16 | } catch (Exception e) { 17 | throw new RuntimeException("Could not initialize taint wrapper!"); 18 | } 19 | return result; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/WrapperVectorTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit; 2 | 3 | 4 | import soot.jimple.infoflow.IInfoflow; 5 | import soot.jimple.infoflow.methodSummary.taintWrappers.TaintWrapperFactory; 6 | import soot.jimple.infoflow.test.junit.VectorTests; 7 | 8 | public abstract class WrapperVectorTests extends VectorTests { 9 | @Override 10 | protected IInfoflow initInfoflow(boolean useTaintWrapper) { 11 | IInfoflow result = super.initInfoflow(useTaintWrapper); 12 | WrapperListTestConfig testConfig = new WrapperListTestConfig(); 13 | result.setSootConfig(testConfig); 14 | try { 15 | result.setTaintWrapper(TaintWrapperFactory.createTaintWrapper()); 16 | } catch (Exception e) { 17 | throw new RuntimeException("Could not initialize taint wrapper!"); 18 | } 19 | return result; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/backward/SummaryTaintWrapperTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class SummaryTaintWrapperTests extends soot.jimple.infoflow.test.methodSummary.junit.SummaryTaintWrapperTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new BackwardsInfoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/backward/WrapperListTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class WrapperListTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperListTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new BackwardsInfoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/backward/WrapperMapTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class WrapperMapTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperMapTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new BackwardsInfoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/backward/WrapperQueueTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class WrapperQueueTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperQueueTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new BackwardsInfoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/backward/WrapperSetTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class WrapperSetTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperSetTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new BackwardsInfoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/backward/WrapperVectorTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class WrapperVectorTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperVectorTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new BackwardsInfoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/forward/SummaryTaintWrapperTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class SummaryTaintWrapperTests extends soot.jimple.infoflow.test.methodSummary.junit.SummaryTaintWrapperTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new Infoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/forward/WrapperListTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class WrapperListTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperListTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new Infoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/forward/WrapperMapTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class WrapperMapTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperMapTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new Infoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/forward/WrapperQueueTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class WrapperQueueTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperQueueTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new Infoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/forward/WrapperSetTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class WrapperSetTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperSetTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new Infoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/forward/WrapperVectorTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.methodSummary.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class WrapperVectorTests extends soot.jimple.infoflow.test.methodSummary.junit.WrapperVectorTests { 7 | @Override 8 | protected AbstractInfoflow createInfoflowInstance() { 9 | return new Infoflow(null, false, null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow/.externalToolBuilders/org.eclipse.pde.ManifestBuilder.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /soot-infoflow/.externalToolBuilders/org.eclipse.pde.SchemaBuilder.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /soot-infoflow/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.java text 4 | *.class binary 5 | *.jar binary -------------------------------------------------------------------------------- /soot-infoflow/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | bin 3 | target 4 | /JimpleFiles 5 | /sootOutput 6 | /ant.settings 7 | reports 8 | /build 9 | /testclasses/ 10 | -------------------------------------------------------------------------------- /soot-infoflow/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | soot-infoflow 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /soot-infoflow/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | encoding/schema=UTF-8 4 | encoding/src=UTF-8 5 | encoding/test=UTF-8 6 | -------------------------------------------------------------------------------- /soot-infoflow/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /soot-infoflow/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Bundle-ManifestVersion: 2 3 | Bundle-Name: soot-infoflow 4 | Bundle-SymbolicName: soot-infoflow 5 | Bundle-Version: 1.0.0.qualifier 6 | Bundle-ClassPath: soot-infoflow.jar 7 | Require-Bundle: org.junit 8 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 9 | -------------------------------------------------------------------------------- /soot-infoflow/securiBench/securibench/micro/collections/Collections11b.java: -------------------------------------------------------------------------------- 1 | /** 2 | @author Benjamin Livshits 3 | 4 | $Id: Collections11b.java,v 1.1 2006/04/21 17:14:26 livshits Exp $ 5 | */ 6 | package securibench.micro.collections; 7 | 8 | import java.io.IOException; 9 | import java.io.PrintWriter; 10 | import java.util.Collection; 11 | 12 | import jakarta.servlet.ServletResponse; 13 | 14 | /** 15 | * @servlet description = "simple collection deposit/retrieve" 16 | * @servlet vuln_count = "1" 17 | */ 18 | class Collections11b { 19 | protected void foo(Object o, ServletResponse resp) throws IOException { 20 | Collection c = (Collection) o; 21 | String str = c.toString(); 22 | PrintWriter writer = resp.getWriter(); 23 | writer.println(str); /* BAD */ 24 | } 25 | } -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/AnalysisPhase.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow; 2 | 3 | /** 4 | * Enumeration containing the phases of a data flow analysis 5 | * 6 | * @author Steven Arzt 7 | */ 8 | public enum AnalysisPhase { 9 | 10 | /** 11 | * Taints are being propagated while solving the IFDS problem 12 | */ 13 | TAINT_PROPAGATION, 14 | 15 | /** 16 | * Paths from source to sink are reconstructed from the taint graph generated by 17 | * the IFDS problem 18 | */ 19 | PATH_RECONSTRUCTION 20 | 21 | } 22 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/aliasing/AbstractAliasStrategy.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.aliasing; 2 | 3 | import soot.SootMethod; 4 | import soot.jimple.infoflow.InfoflowManager; 5 | 6 | /** 7 | * Common base class for alias strategies 8 | * 9 | * @author Steven Arzt 10 | */ 11 | public abstract class AbstractAliasStrategy implements IAliasingStrategy { 12 | 13 | protected final InfoflowManager manager; 14 | 15 | public AbstractAliasStrategy(InfoflowManager manager) { 16 | this.manager = manager; 17 | } 18 | 19 | @Override 20 | public boolean hasProcessedMethod(SootMethod method) { 21 | return true; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/aliasing/AbstractBulkAliasStrategy.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.aliasing; 2 | 3 | import soot.jimple.infoflow.InfoflowManager; 4 | import soot.jimple.infoflow.data.AccessPath; 5 | 6 | public abstract class AbstractBulkAliasStrategy extends AbstractAliasStrategy { 7 | 8 | public AbstractBulkAliasStrategy(InfoflowManager manager) { 9 | super(manager); 10 | } 11 | 12 | @Override 13 | public boolean isInteractive() { 14 | return false; 15 | } 16 | 17 | @Override 18 | public boolean mayAlias(AccessPath ap1, AccessPath ap2) { 19 | return false; 20 | } 21 | 22 | 23 | @Override 24 | public boolean isLazyAnalysis() { 25 | return false; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/aliasing/AbstractInteractiveAliasStrategy.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.aliasing; 2 | 3 | import java.util.Set; 4 | 5 | import soot.SootMethod; 6 | import soot.Value; 7 | import soot.jimple.Stmt; 8 | import soot.jimple.infoflow.InfoflowManager; 9 | import soot.jimple.infoflow.data.Abstraction; 10 | 11 | public abstract class AbstractInteractiveAliasStrategy extends AbstractAliasStrategy { 12 | 13 | public AbstractInteractiveAliasStrategy(InfoflowManager manager) { 14 | super(manager); 15 | } 16 | 17 | @Override 18 | public void computeAliasTaints 19 | (final Abstraction d1, final Stmt src, 20 | final Value targetValue, Set taintSet, 21 | SootMethod method, Abstraction newAbs) { 22 | // nothing to do here 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/callmappers/IdentityCallerCalleeMapper.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.callmappers; 2 | 3 | /** 4 | * Maps caller and callee parameters in a one to one relationship 5 | * @author Marc Miltenberger 6 | */ 7 | public class IdentityCallerCalleeMapper implements ICallerCalleeArgumentMapper { 8 | 9 | public static final ICallerCalleeArgumentMapper INSTANCE = new IdentityCallerCalleeMapper(); 10 | 11 | @Override 12 | public int getCallerIndexOfCalleeParameter(int calleeParamIndex) { 13 | return calleeParamIndex; 14 | } 15 | 16 | @Override 17 | public int getCalleeIndexOfCallerParameter(int callerParameterIndex) { 18 | return callerParameterIndex; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/callmappers/UnknownCallerCalleeMapper.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.callmappers; 2 | 3 | /** 4 | * Is applicaple when we have no mapping whatsoever. 5 | * @author Marc Miltenberger 6 | */ 7 | public class UnknownCallerCalleeMapper implements ICallerCalleeArgumentMapper { 8 | 9 | public static final ICallerCalleeArgumentMapper INSTANCE = new UnknownCallerCalleeMapper(); 10 | 11 | @Override 12 | public int getCallerIndexOfCalleeParameter(int calleeParamIndex) { 13 | return UNKNOWN; 14 | } 15 | 16 | @Override 17 | public int getCalleeIndexOfCallerParameter(int callerParameterIndex) { 18 | return UNKNOWN; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/cfg/BiDirICFGFactory.java: -------------------------------------------------------------------------------- 1 | /** 2 | * (c) Copyright 2013, Tata Consultancy Services & Ecole Polytechnique de Montreal 3 | * All rights reserved 4 | */ 5 | package soot.jimple.infoflow.cfg; 6 | 7 | import soot.jimple.infoflow.InfoflowConfiguration.CallgraphAlgorithm; 8 | import soot.jimple.infoflow.solver.cfg.IInfoflowCFG; 9 | 10 | /** 11 | * Interface for all factories that can create bi-directional interprocedural 12 | * control flow graphs. 13 | * 14 | * @author Steven Arzt 15 | * @author Marc-Andre Laverdiere-Papineau 16 | * 17 | */ 18 | public interface BiDirICFGFactory { 19 | 20 | public IInfoflowCFG buildBiDirICFG(CallgraphAlgorithm callgraphAlgorithm, 21 | boolean enableExceptionTracking); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/cfg/FlowDroidEssentialMethodTag.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.cfg; 2 | 3 | import soot.tagkit.AttributeValueException; 4 | import soot.tagkit.Tag; 5 | 6 | /** 7 | * Tag for marking a method as essential, i.e., data flows must always be 8 | * tracked through this method, even if its parent class is a system class 9 | * or excluded by some other means. 10 | * 11 | * @author Steven Arzt 12 | * 13 | */ 14 | public class FlowDroidEssentialMethodTag implements Tag { 15 | 16 | public static final String TAG_NAME = "fd_essential_method"; 17 | 18 | @Override 19 | public String getName() { 20 | return TAG_NAME; 21 | } 22 | 23 | @Override 24 | public byte[] getValue() throws AttributeValueException { 25 | return null; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/cfg/FlowDroidUserClass.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.cfg; 2 | 3 | import soot.tagkit.AttributeValueException; 4 | import soot.tagkit.Tag; 5 | 6 | /** 7 | * Marks a class that is identified as a user class by FlowDroid or the user 8 | * 9 | * @author Tim Lange 10 | */ 11 | public class FlowDroidUserClass implements Tag { 12 | public static final String TAG_NAME = "fd_userclass"; 13 | 14 | private static final FlowDroidUserClass INSTANCE = new FlowDroidUserClass(); 15 | 16 | public static FlowDroidUserClass v() { 17 | return INSTANCE; 18 | } 19 | 20 | @Override 21 | public String getName() { 22 | return TAG_NAME; 23 | } 24 | 25 | @Override 26 | public byte[] getValue() throws AttributeValueException { 27 | return null; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collect/IdentityWrapper.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collect; 2 | 3 | class IdentityWrapper { 4 | 5 | private final E contents; 6 | 7 | public IdentityWrapper(E abs) { 8 | this.contents = abs; 9 | } 10 | 11 | public E getContents() { 12 | return this.contents; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return this.contents.toString(); 18 | } 19 | 20 | @SuppressWarnings("rawtypes") 21 | @Override 22 | public boolean equals(Object other) { 23 | if (other == null) 24 | return false; 25 | if (other == this) 26 | return true; 27 | if (this.getClass() != other.getClass()) 28 | return false; 29 | return this.contents == ((IdentityWrapper) other).contents; 30 | } 31 | 32 | @Override 33 | public int hashCode() { 34 | return System.identityHashCode(this.contents); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/ICollectionsSupport.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections; 2 | 3 | import java.util.Set; 4 | 5 | import soot.jimple.Stmt; 6 | import soot.jimple.infoflow.collections.strategies.containers.IContainerStrategy; 7 | import soot.jimple.infoflow.data.Abstraction; 8 | import soot.jimple.infoflow.taintWrappers.ITaintPropagationWrapper; 9 | 10 | public interface ICollectionsSupport extends ITaintPropagationWrapper { 11 | Set getTaintsForMethodApprox(Stmt stmt, Abstraction d1, Abstraction incoming); 12 | 13 | IContainerStrategy getContainerStrategy(); 14 | } 15 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/context/ValueBasedContext.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.context; 2 | 3 | import soot.jimple.infoflow.collections.util.Tristate; 4 | import soot.jimple.infoflow.data.ContainerContext; 5 | 6 | /** 7 | * Interface for all value-based contexts 8 | * Immutable by default. 9 | * 10 | * @param concrete value-based context type 11 | */ 12 | public interface ValueBasedContext> extends ContainerContext { 13 | /** 14 | * Check whether this and other intersects 15 | * 16 | * @param other value-based context 17 | * @return true on perfect match, maybe on part match and otherwise false 18 | */ 19 | Tristate intersect(T other); 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/strategies/containers/ConstantMapStrategyFactory.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.strategies.containers; 2 | 3 | import soot.jimple.infoflow.InfoflowManager; 4 | 5 | /** 6 | * This factory can be used to instantiate a {@link ConstantMapStrategy}. 7 | * 8 | * @author Marc Miltenberger 9 | */ 10 | public class ConstantMapStrategyFactory implements IContainerStrategyFactory { 11 | 12 | @Override 13 | public IContainerStrategy create(InfoflowManager manager) { 14 | return new ConstantMapStrategy(manager); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/strategies/containers/IContainerStrategyFactory.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.strategies.containers; 2 | 3 | import soot.jimple.infoflow.InfoflowManager; 4 | 5 | /** 6 | * This factory can be used to instantiate an {@link IContainerStrategy}. 7 | * 8 | * @author Marc Miltenberger 9 | */ 10 | public interface IContainerStrategyFactory { 11 | 12 | /** 13 | * Creates a new container strategy 14 | * @param manager the infoflow manager 15 | * @return the container strategy 16 | */ 17 | public IContainerStrategy create(InfoflowManager manager); 18 | } 19 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/strategies/containers/shift/IShiftOperation.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.strategies.containers.shift; 2 | 3 | import soot.jimple.infoflow.data.ContainerContext; 4 | 5 | public interface IShiftOperation { 6 | ContainerContext shift(ContainerContext ctxt, int n, boolean exact); 7 | } 8 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/strategies/containers/shift/InvalidateShift.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.strategies.containers.shift; 2 | 3 | import soot.jimple.infoflow.collections.context.UnknownContext; 4 | import soot.jimple.infoflow.data.ContainerContext; 5 | 6 | public class InvalidateShift implements IShiftOperation { 7 | @Override 8 | public ContainerContext shift(ContainerContext ctxt, int n, boolean exact) { 9 | return UnknownContext.v(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/strategies/containers/shift/MinMaxShift.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.strategies.containers.shift; 2 | 3 | import soot.jimple.infoflow.collections.context.IntervalContext; 4 | import soot.jimple.infoflow.data.ContainerContext; 5 | 6 | public class MinMaxShift implements IShiftOperation { 7 | @Override 8 | public ContainerContext shift(ContainerContext ctxt, int n, boolean exact) { 9 | if (ctxt instanceof IntervalContext) { 10 | int min = n < 0 ? 0 : ((IntervalContext) ctxt).getMin(); 11 | int max = n > 0 ? Integer.MAX_VALUE : ((IntervalContext) ctxt).getMax(); 12 | return new IntervalContext(min, max); 13 | } 14 | 15 | throw new RuntimeException("Expect interval context but got: " + ctxt.getClass().getName()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/strategies/containers/shift/PreciseShift.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.strategies.containers.shift; 2 | 3 | import soot.jimple.infoflow.collections.context.IntervalContext; 4 | import soot.jimple.infoflow.data.ContainerContext; 5 | 6 | public class PreciseShift implements IShiftOperation { 7 | @Override 8 | public ContainerContext shift(ContainerContext ctxt, int n, boolean exact) { 9 | if (ctxt instanceof IntervalContext) { 10 | IntervalContext shifted = ((IntervalContext) ctxt).exactShift(new IntervalContext(n)); 11 | return exact ? shifted : ((IntervalContext) ctxt).union(shifted); 12 | } 13 | 14 | throw new RuntimeException("Expect interval context but got: " + ctxt.getClass().getName()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/collections/util/NonNullHashSet.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.collections.util; 2 | 3 | import java.util.HashSet; 4 | 5 | public class NonNullHashSet extends HashSet { 6 | 7 | private static final long serialVersionUID = -7700007534552087413L; 8 | 9 | @Override 10 | public boolean add(E e) { 11 | if (e == null) 12 | return false; 13 | return super.add(e); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/config/PreciseCollectionStrategy.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.config; 2 | 3 | /** 4 | * Allows to configure the strategy to use with collections and maps. 5 | */ 6 | public enum PreciseCollectionStrategy { 7 | /** 8 | * Noe support for precise container access (default) 9 | */ 10 | NONE, 11 | 12 | /** 13 | * Supports maps with constant access, e.g. 14 | * map.put("a", getSource()); 15 | * sink(map.get("b")); 16 | * will not trigger a leak. 17 | * Note that you will need to use the Summary taint wrapper in order to get proper support. 18 | */ 19 | CONSTANT_MAP_SUPPORT 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/entryPointCreators/SimulatedCodeElementTag.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.entryPointCreators; 2 | 3 | import soot.tagkit.AttributeValueException; 4 | import soot.tagkit.Tag; 5 | 6 | /** 7 | * Tag to denote that a certain method or class was created by an entry point 8 | * creator and should not be considered real app code 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public class SimulatedCodeElementTag implements Tag { 14 | 15 | public static final String TAG_NAME = "SimulatedCodeElementTag"; 16 | public static SimulatedCodeElementTag TAG = new SimulatedCodeElementTag(); 17 | 18 | private SimulatedCodeElementTag() { 19 | // 20 | } 21 | 22 | @Override 23 | public String getName() { 24 | return TAG_NAME; 25 | } 26 | 27 | @Override 28 | public byte[] getValue() throws AttributeValueException { 29 | return null; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/entryPointCreators/SimulatedDynamicInvokeTag.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.entryPointCreators; 2 | 3 | import soot.tagkit.AttributeValueException; 4 | import soot.tagkit.Tag; 5 | 6 | /** 7 | * Tag to denote that a certain statement is simulating the effects of a dynamic invoke 8 | * 9 | */ 10 | public class SimulatedDynamicInvokeTag implements Tag { 11 | 12 | public static final String TAG_NAME = "SimulatedDynamicInvokeTag"; 13 | public static SimulatedDynamicInvokeTag TAG = new SimulatedDynamicInvokeTag(); 14 | 15 | private SimulatedDynamicInvokeTag() { 16 | // 17 | } 18 | 19 | @Override 20 | public String getName() { 21 | return TAG_NAME; 22 | } 23 | 24 | @Override 25 | public byte[] getValue() throws AttributeValueException { 26 | return null; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/handlers/PreAnalysisHandler.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.handlers; 2 | 3 | /** 4 | * Handler that allows clients to execute certain tasks before the actual data 5 | * flow analysis is executed. 6 | * 7 | * @author Steven Arzt 8 | * 9 | */ 10 | public interface PreAnalysisHandler { 11 | 12 | /** 13 | * This method is called before the callgraph is constructed 14 | */ 15 | public void onBeforeCallgraphConstruction(); 16 | 17 | /** 18 | * This method is called after the callgraph has been constructed, but 19 | * before the actual data flow analysis is carried out. 20 | */ 21 | public void onAfterCallgraphConstruction(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/memory/ISolverTerminationReason.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.memory; 2 | 3 | /** 4 | * Common interface for all classes that describe why a solver was forcefully 5 | * terminated 6 | * 7 | * @author Steven Arzt 8 | * 9 | */ 10 | public interface ISolverTerminationReason { 11 | 12 | /** 13 | * Combines this termination reason with the given one 14 | * 15 | * @param terminationReason 16 | * The reason to combine this one with 17 | * @return A combined termination reason that models the current reason as well 18 | * as the given one, i.e., the fact that the solver was terminated for 19 | * multiple reasons 20 | */ 21 | public ISolverTerminationReason combine(ISolverTerminationReason terminationReason); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/memory/ISolversTerminatedCallback.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.memory; 2 | 3 | /** 4 | * Callback to notify the outside world that the solvers have been terminated 5 | * 6 | * @author Steven Arzt 7 | * 8 | */ 9 | public interface ISolversTerminatedCallback { 10 | 11 | /** 12 | * This method is invoked when all solvers have been terminated due to a timeout 13 | */ 14 | public void onSolversTerminated(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/memory/reasons/AbortRequestedReason.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.memory.reasons; 2 | 3 | import soot.jimple.infoflow.memory.ISolverTerminationReason; 4 | 5 | /** 6 | * Reason for terminating a data flow solver after an external request 7 | * 8 | * @author Steven Arzt 9 | * 10 | */ 11 | public class AbortRequestedReason implements ISolverTerminationReason { 12 | 13 | @Override 14 | public ISolverTerminationReason combine(ISolverTerminationReason terminationReason) { 15 | return new MultiReason(this, terminationReason); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/nativeCallHandler/AbstractNativeCallHandler.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.nativeCallHandler; 2 | 3 | import soot.jimple.infoflow.InfoflowManager; 4 | 5 | /** 6 | * Abstract base class for all native call handlers 7 | * 8 | * @author Steven Arzt 9 | * 10 | */ 11 | public abstract class AbstractNativeCallHandler implements INativeCallHandler { 12 | 13 | /** 14 | * Data flow manager that gives access to internal solver objects 15 | */ 16 | protected InfoflowManager manager; 17 | 18 | @Override 19 | public void initialize(InfoflowManager manager) { 20 | this.manager = manager; 21 | } 22 | 23 | @Override 24 | public void shutdown() { 25 | // 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/problems/rules/DummyArrayContext.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.problems.rules; 2 | 3 | import soot.jimple.ArrayRef; 4 | import soot.jimple.Stmt; 5 | import soot.jimple.infoflow.data.ContainerContext; 6 | 7 | public class DummyArrayContext implements IArrayContextProvider { 8 | public ContainerContext[] getContextForArrayRef(ArrayRef arrayRef, Stmt stmt) { 9 | return null; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/problems/rules/EmptyPropagationRuleManagerFactory.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.problems.rules; 2 | 3 | import soot.jimple.infoflow.InfoflowManager; 4 | import soot.jimple.infoflow.data.Abstraction; 5 | import soot.jimple.infoflow.problems.TaintPropagationResults; 6 | 7 | /** 8 | * A factory that creates a rule manager factory without any rules 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public class EmptyPropagationRuleManagerFactory implements IPropagationRuleManagerFactory { 14 | 15 | public static EmptyPropagationRuleManagerFactory INSTANCE = new EmptyPropagationRuleManagerFactory(); 16 | 17 | @Override 18 | public PropagationRuleManager createRuleManager(InfoflowManager manager, Abstraction zeroValue, 19 | TaintPropagationResults results) { 20 | return IdentityPropagationRuleManager.INSTANCE; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/problems/rules/IArrayContextProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.problems.rules; 2 | 3 | import soot.jimple.ArrayRef; 4 | import soot.jimple.Stmt; 5 | import soot.jimple.infoflow.data.ContainerContext; 6 | 7 | public interface IArrayContextProvider { 8 | /** 9 | * Returns the context definition for an array 10 | * 11 | * @param arrayRef array reference 12 | * @param stmt 13 | * @return context definition 14 | */ 15 | ContainerContext[] getContextForArrayRef(ArrayRef arrayRef, Stmt stmt); 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/resources/controls/JavaSwingLayoutControl.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.resources.controls; 2 | 3 | /** 4 | * Base class for all layout controls in Java Swing 5 | * 6 | * @author Steven Arzt 7 | * 8 | */ 9 | public abstract class JavaSwingLayoutControl extends LayoutControl { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/results/xml/SerializedPathElement.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.results.xml; 2 | 3 | /** 4 | * Class representing an element on the taint propagation path of a data flow 5 | * result 6 | * 7 | * @author Steven Arzt 8 | * 9 | */ 10 | public class SerializedPathElement extends AbstractSerializedSourceSink { 11 | 12 | SerializedPathElement(SerializedAccessPath ap, String statement, 13 | String method) { 14 | super(ap, statement, method); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/river/AdditionalFlowInfoSourceContext.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.river; 2 | 3 | import soot.jimple.Stmt; 4 | import soot.jimple.infoflow.data.AccessPath; 5 | import soot.jimple.infoflow.data.SourceContext; 6 | import soot.jimple.infoflow.sourcesSinks.definitions.ISourceSinkDefinition; 7 | 8 | /** 9 | * Source context implementation for additional data flow information on a 10 | * vulnerability, i.e. for finding which data is encrypted with a hard-coded key 11 | * 12 | * @author Steven Arzt 13 | * 14 | */ 15 | public class AdditionalFlowInfoSourceContext extends SourceContext { 16 | 17 | public AdditionalFlowInfoSourceContext(ISourceSinkDefinition definition, AccessPath accessPath, Stmt stmt) { 18 | super(definition, accessPath, stmt); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/river/EmptyUsageContextProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.river; 2 | 3 | import soot.jimple.Stmt; 4 | import soot.jimple.infoflow.data.Abstraction; 5 | 6 | import java.util.Collections; 7 | import java.util.Set; 8 | 9 | /** 10 | * Default implementation that does not request any usage contexts 11 | * 12 | * @author Tim Lange 13 | */ 14 | public class EmptyUsageContextProvider implements IUsageContextProvider { 15 | 16 | @Override 17 | public Set needsAdditionalInformation(Stmt stmt, Set taints) { 18 | return Collections.emptySet(); 19 | } 20 | 21 | @Override 22 | public boolean isStatementWithAdditionalInformation(Stmt stmt, Abstraction abs) { 23 | return false; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/solver/IFollowReturnsPastSeedsHandler.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.solver; 2 | 3 | import soot.Unit; 4 | import soot.jimple.infoflow.data.Abstraction; 5 | 6 | /** 7 | * Common interface for handlers that take care of follow-return-past-seeds 8 | * cases which the normal solver does not handle 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public interface IFollowReturnsPastSeedsHandler { 14 | 15 | /** 16 | * This method is called when followReturnsPastSeeds is enabled and a taint 17 | * leaves a method for which we do not have any callers. 18 | * @param d1 The abstraction at the beginning of the callee 19 | * @param u The return site 20 | * @param d2 The abstraction at the return site 21 | */ 22 | public void handleFollowReturnsPastSeeds(Abstraction d1, Unit u, Abstraction d2); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/solver/IStrategyBasedParallelSolver.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.solver; 2 | 3 | import soot.jimple.infoflow.solver.fastSolver.FastSolverLinkedNode; 4 | import soot.jimple.infoflow.solver.fastSolver.ISchedulingStrategy; 5 | 6 | /** 7 | * Common interface for IFDS solvers that schedule their IFDS edge processing 8 | * tasks based on interchangeable strategies 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public interface IStrategyBasedParallelSolver> { 14 | 15 | /** 16 | * Sets the strategy for scheduling edges 17 | * 18 | * @param strategy The strategy for scheduling edges 19 | */ 20 | public void setSchedulingStrategy(ISchedulingStrategy strategy); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/solver/gcSolver/GCSolverPeerGroup.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.solver.gcSolver; 2 | 3 | import soot.jimple.infoflow.solver.DefaultSolverPeerGroup; 4 | 5 | /** 6 | * Specialized solver peer group for garbage-collecting solvers 7 | * 8 | * @author Steven Arzt 9 | * 10 | */ 11 | public class GCSolverPeerGroup extends DefaultSolverPeerGroup { 12 | 13 | private GarbageCollectorPeerGroup gcPeerGroup = null; 14 | 15 | public GCSolverPeerGroup() { 16 | } 17 | 18 | /** 19 | * Creates the peer group for the garbage collectors 20 | * 21 | * @return The garbage collector peer group 22 | */ 23 | public GarbageCollectorPeerGroup getGCPeerGroup() { 24 | if (gcPeerGroup == null) 25 | gcPeerGroup = new GarbageCollectorPeerGroup<>(); 26 | return gcPeerGroup; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/solver/gcSolver/GarbageCollectionTrigger.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.solver.gcSolver; 2 | 3 | /** 4 | * Possible triggers when to start garbage collection 5 | * 6 | * @author Steven Arzt 7 | * 8 | */ 9 | public enum GarbageCollectionTrigger { 10 | 11 | /** 12 | * Garbage collection is triggered immediately when a new edge has been 13 | * propagated 14 | */ 15 | Immediate, 16 | 17 | /** 18 | * Start garbage collection after the method threshold has been reached 19 | */ 20 | MethodThreshold, 21 | 22 | /** 23 | * Start garbage collection after the edge threshold has been reached 24 | */ 25 | EdgeThreshold, 26 | 27 | /** 28 | * Compute the thresholds, but never actually gargabe-collect anything. Useful 29 | * only as a performance baseline. 30 | */ 31 | Never 32 | 33 | } 34 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/solver/gcSolver/IGarbageCollectorPeer.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.solver.gcSolver; 2 | 3 | /** 4 | * A garbage collector that can operate as part of a peer group 5 | * 6 | * @author Steven Arzt 7 | * 8 | */ 9 | public interface IGarbageCollectorPeer { 10 | 11 | /** 12 | * Checks whether the given abstraction has any open dependencies in any of the 13 | * solvers that are members of this peer group that prevent its jump functions 14 | * from being garbage collected 15 | * 16 | * @param abstraction The abstraction to check 17 | * @return True if the abstraction has active dependencies and thus cannot be 18 | * garbage-collected, false otherwise 19 | */ 20 | public boolean hasActiveDependencies(A abstraction); 21 | 22 | public void notifySolverTerminated(); 23 | } 24 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/solver/gcSolver/fpc/IGraph.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.solver.gcSolver.fpc; 2 | 3 | import java.util.Set; 4 | 5 | public interface IGraph { 6 | 7 | public Set getNodes(); 8 | 9 | public Set succsOf(N n); 10 | 11 | public Set predsOf(N n); 12 | 13 | public void addNode(N n); 14 | 15 | public void addEdge(N n1, N n2); 16 | 17 | public boolean contains(N n); 18 | 19 | /* 20 | * removing the node itself and all edges it associated with. 21 | */ 22 | public void remove(N n); 23 | 24 | public void removeEdge(N n1, N n2); 25 | } 26 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/sourcesSinks/definitions/ISourceSinkCategory.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.sourcesSinks.definitions; 2 | 3 | /** 4 | * Common interface for all classes that provide categorization or some other 5 | * form of organization for sources or sinks 6 | * 7 | * @author Steven Arzt 8 | * 9 | */ 10 | public interface ISourceSinkCategory { 11 | 12 | /** 13 | * Gets a human-readable description of the current category. This can be 14 | * different from toString(), which is allowed to yield a more technical 15 | * description. 16 | * 17 | * @return A human readable description for this category 18 | */ 19 | public String getHumanReadableDescription(); 20 | 21 | /** 22 | * Gets a machine-readable description of the current category. 23 | * 24 | * @return An id for this category 25 | */ 26 | public String getID(); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/sourcesSinks/definitions/ImmutableAccessPathTuple.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.sourcesSinks.definitions; 2 | 3 | /** 4 | * Immutable version of the {@link AccessPathTuple} 5 | * 6 | * @author Steven Arzt 7 | * 8 | */ 9 | public class ImmutableAccessPathTuple extends AccessPathTuple { 10 | 11 | public ImmutableAccessPathTuple(AccessPathTuple parent) { 12 | super(parent); 13 | } 14 | 15 | @Override 16 | public void setDescription(String description) { 17 | throw new RuntimeException("Immutable object cannot be modified"); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/sourcesSinks/definitions/InvalidAccessPathException.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.sourcesSinks.definitions; 2 | 3 | public class InvalidAccessPathException extends RuntimeException { 4 | 5 | private static final long serialVersionUID = -4996789547058608944L; 6 | 7 | public InvalidAccessPathException() { 8 | super(); 9 | } 10 | 11 | public InvalidAccessPathException(String message, Throwable cause, boolean enableSuppression, 12 | boolean writableStackTrace) { 13 | super(message, cause, enableSuppression, writableStackTrace); 14 | } 15 | 16 | public InvalidAccessPathException(String message, Throwable cause) { 17 | super(message, cause); 18 | } 19 | 20 | public InvalidAccessPathException(String message) { 21 | super(message); 22 | } 23 | 24 | public InvalidAccessPathException(Throwable cause) { 25 | super(cause); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/sourcesSinks/definitions/NullSourceSinkDefinitionProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.sourcesSinks.definitions; 2 | 3 | import java.util.Collections; 4 | import java.util.Set; 5 | 6 | /** 7 | * Empty provider that simulates empty lists of sources and sinks 8 | * 9 | * @author Steven Arzt 10 | * 11 | */ 12 | public class NullSourceSinkDefinitionProvider implements ISourceSinkDefinitionProvider { 13 | 14 | @Override 15 | public Set getSources() { 16 | return Collections.emptySet(); 17 | } 18 | 19 | @Override 20 | public Set getSinks() { 21 | return Collections.emptySet(); 22 | } 23 | 24 | @Override 25 | public Set getAllMethods() { 26 | return Collections.emptySet(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /soot-infoflow/src/soot/jimple/infoflow/values/IValueProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.values; 2 | 3 | import soot.SootMethod; 4 | import soot.Value; 5 | import soot.jimple.Stmt; 6 | 7 | /** 8 | * Common interface for all algorithms that provide constant values 9 | * 10 | * @author Steven Arzt 11 | * 12 | */ 13 | public interface IValueProvider { 14 | 15 | public T getValue(SootMethod sm, Stmt stmt, Value value, Class type); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/android/Base64.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.android; 2 | 3 | public class Base64 { 4 | 5 | public static String encodeToString(@SuppressWarnings("unused") byte[] input) { 6 | return ""; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/android/Bundle.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2012 Secure Software Engineering Group at EC SPRIDE. 3 | * All rights reserved. This program and the accompanying materials 4 | * are made available under the terms of the GNU Lesser Public License v2.1 5 | * which accompanies this distribution, and is available at 6 | * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 7 | * 8 | * Contributors: Christian Fritz, Steven Arzt, Siegfried Rasthofer, Eric 9 | * Bodden, and others. 10 | ******************************************************************************/ 11 | package soot.jimple.infoflow.test.android; 12 | 13 | public class Bundle { 14 | 15 | public static Object get(String key){ 16 | return new String[] { key }; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/android/Location.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.android; 2 | 3 | public class Location { 4 | 5 | private double longitude; 6 | private double latitude; 7 | 8 | public Location() { 9 | 10 | } 11 | 12 | public Location(double longitude, double latitude) { 13 | this.longitude = longitude; 14 | this.latitude = latitude; 15 | } 16 | 17 | public double getLongitude() { 18 | return this.longitude; 19 | } 20 | 21 | public double getLatitude() { 22 | return this.latitude; 23 | } 24 | 25 | public Location clear() { 26 | this.longitude = 0.0d; 27 | this.latitude = 0.0d; 28 | return this; 29 | } 30 | 31 | public Location clearLongitude() { 32 | this.longitude = 0.0d; 33 | return new Location(); 34 | } 35 | 36 | public void setLongitude(double longitude) { 37 | this.longitude = longitude; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/android/LocationManager.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.android; 2 | 3 | public class LocationManager { 4 | 5 | public static double getLongitude() { 6 | return 3.1415d; 7 | } 8 | 9 | public static Location getLastKnownLocation() { 10 | return new Location(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/android/LocationProvider.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.android; 2 | 3 | public class LocationProvider { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/collect/ConcurrentCountingMapTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.collect; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import org.junit.Test; 6 | 7 | import soot.jimple.infoflow.collect.ConcurrentCountingMap; 8 | 9 | public class ConcurrentCountingMapTest { 10 | 11 | @Test 12 | public void keySetTest() { 13 | ConcurrentCountingMap map = new ConcurrentCountingMap<>(); 14 | map.increment("Hello"); 15 | map.increment("World"); 16 | for (String k : map.keySet()) 17 | assertEquals(new Integer(1), map.get(k)); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ArrayTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class ArrayTests extends soot.jimple.infoflow.test.junit.ArrayTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/BasicTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class BasicTests extends soot.jimple.infoflow.test.junit.BasicTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/BytecodeTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class BytecodeTests extends soot.jimple.infoflow.test.junit.BytecodeTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/CallbackTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class CallbackTests extends soot.jimple.infoflow.test.junit.CallbackTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ConstantTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class ConstantTests extends soot.jimple.infoflow.test.junit.ConstantTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ContextSensitivityTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class ContextSensitivityTests extends soot.jimple.infoflow.test.junit.ContextSensitivityTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/EasyWrapperListTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import java.io.IOException; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.BackwardsInfoflow; 7 | 8 | public class EasyWrapperListTests extends soot.jimple.infoflow.test.junit.EasyWrapperListTests { 9 | 10 | public EasyWrapperListTests() throws IOException { 11 | super(); 12 | } 13 | 14 | @Override 15 | protected AbstractInfoflow createInfoflowInstance() { 16 | return new BackwardsInfoflow(null, false, null); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/EasyWrapperTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import java.io.IOException; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.BackwardsInfoflow; 7 | 8 | public class EasyWrapperTests extends soot.jimple.infoflow.test.junit.EasyWrapperTests { 9 | 10 | public EasyWrapperTests() throws IOException { 11 | super(); 12 | } 13 | 14 | @Override 15 | protected AbstractInfoflow createInfoflowInstance() { 16 | return new BackwardsInfoflow(null, false, null); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ExceptionTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import org.junit.Ignore; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.BackwardsInfoflow; 7 | 8 | public class ExceptionTests extends soot.jimple.infoflow.test.junit.ExceptionTests { 9 | 10 | @Override 11 | protected AbstractInfoflow createInfoflowInstance() { 12 | return new BackwardsInfoflow(null, false, null); 13 | } 14 | 15 | @Override 16 | @Ignore("Exceptional unit graph incomplete for runtime exceptions") 17 | public void callMethodParamReturnTest2b() { 18 | // ignored 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/FutureTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import org.junit.Ignore; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.BackwardsInfoflow; 7 | 8 | @Ignore 9 | public class FutureTests extends soot.jimple.infoflow.test.junit.FutureTests { 10 | 11 | @Override 12 | protected AbstractInfoflow createInfoflowInstance() { 13 | return new BackwardsInfoflow(null, false, null); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/HTTPTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class HTTPTests extends soot.jimple.infoflow.test.junit.HTTPTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/HeapTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import org.junit.Ignore; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.BackwardsInfoflow; 7 | 8 | public class HeapTests extends soot.jimple.infoflow.test.junit.HeapTests { 9 | 10 | @Override 11 | protected AbstractInfoflow createInfoflowInstance() { 12 | return new BackwardsInfoflow(null, false, null); 13 | } 14 | 15 | @Override 16 | @Ignore("PTS-Based aliasing") 17 | public void aliasPerformanceTestFIS() { 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/HierarchyTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class HierarchyTests extends soot.jimple.infoflow.test.junit.HierarchyTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ImplicitFlowTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import org.junit.Ignore; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.BackwardsInfoflow; 7 | 8 | public class ImplicitFlowTests extends soot.jimple.infoflow.test.junit.ImplicitFlowTests { 9 | 10 | @Override 11 | protected AbstractInfoflow createInfoflowInstance() { 12 | return new BackwardsInfoflow(null, false, null); 13 | } 14 | 15 | @Ignore("When running backwards, we don't know that the method will be from a " 16 | + "different class depending on the instantiation of the object that we don't " 17 | + "see until further up in the code, i.e., later in the analysis") 18 | @Override 19 | public void dataClassSetterTest() { 20 | // 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/InFunctionTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class InFunctionTests extends soot.jimple.infoflow.test.junit.InFunctionTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/InheritanceTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class InheritanceTests extends soot.jimple.infoflow.test.junit.InheritanceTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/LengthTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class LengthTests extends soot.jimple.infoflow.test.junit.LengthTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ListTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class ListTests extends soot.jimple.infoflow.test.junit.ListTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/MapTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class MapTests extends soot.jimple.infoflow.test.junit.MapTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/MultiTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class MultiTest extends soot.jimple.infoflow.test.junit.MultiTest { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/OperationSemanticTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class OperationSemanticTests extends soot.jimple.infoflow.test.junit.OperationSemanticTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/OtherTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class OtherTests extends soot.jimple.infoflow.test.junit.OtherTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/OverwriteTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class OverwriteTests extends soot.jimple.infoflow.test.junit.OverwriteTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/QueueTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class QueueTests extends soot.jimple.infoflow.test.junit.QueueTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ReflectionTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class ReflectionTests extends soot.jimple.infoflow.test.junit.ReflectionTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/SingleJoinPointTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class SingleJoinPointTests extends soot.jimple.infoflow.test.junit.SingleJoinPointTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/SourceSinkTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class SourceSinkTests extends soot.jimple.infoflow.test.junit.SourceSinkTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/StringTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class StringTests extends soot.jimple.infoflow.test.junit.StringTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/ThreadTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class ThreadTests extends soot.jimple.infoflow.test.junit.ThreadTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/TypeTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class TypeTests extends soot.jimple.infoflow.test.junit.TypeTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/backward/VectorTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.backward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.BackwardsInfoflow; 5 | 6 | public class VectorTests extends soot.jimple.infoflow.test.junit.VectorTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new BackwardsInfoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ArrayTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ArrayTests extends soot.jimple.infoflow.test.junit.ArrayTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/BasicTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class BasicTests extends soot.jimple.infoflow.test.junit.BasicTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/BytecodeTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class BytecodeTests extends soot.jimple.infoflow.test.junit.BytecodeTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/CallbackTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class CallbackTests extends soot.jimple.infoflow.test.junit.CallbackTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ConstantTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ConstantTests extends soot.jimple.infoflow.test.junit.ConstantTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ContextSensitivityTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ContextSensitivityTests extends soot.jimple.infoflow.test.junit.ContextSensitivityTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/EasyWrapperListTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import java.io.IOException; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.Infoflow; 7 | 8 | public class EasyWrapperListTests extends soot.jimple.infoflow.test.junit.EasyWrapperListTests { 9 | 10 | public EasyWrapperListTests() throws IOException { 11 | super(); 12 | } 13 | 14 | @Override 15 | protected AbstractInfoflow createInfoflowInstance() { 16 | return new Infoflow(null, false, null); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/EasyWrapperTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import java.io.IOException; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.Infoflow; 7 | 8 | public class EasyWrapperTests extends soot.jimple.infoflow.test.junit.EasyWrapperTests { 9 | 10 | public EasyWrapperTests() throws IOException { 11 | super(); 12 | } 13 | 14 | @Override 15 | protected AbstractInfoflow createInfoflowInstance() { 16 | return new Infoflow(null, false, null); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ExceptionTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ExceptionTests extends soot.jimple.infoflow.test.junit.ExceptionTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/FutureTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import org.junit.Ignore; 4 | 5 | import soot.jimple.infoflow.AbstractInfoflow; 6 | import soot.jimple.infoflow.Infoflow; 7 | 8 | @Ignore 9 | public class FutureTests extends soot.jimple.infoflow.test.junit.FutureTests { 10 | 11 | @Override 12 | protected AbstractInfoflow createInfoflowInstance() { 13 | return new Infoflow(null, false, null); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/HTTPTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class HTTPTests extends soot.jimple.infoflow.test.junit.HTTPTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/HeapTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class HeapTests extends soot.jimple.infoflow.test.junit.HeapTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/HeapTestsPtsAliasing.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class HeapTestsPtsAliasing extends soot.jimple.infoflow.test.junit.HeapTestsPtsAliasing { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/HierarchyTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class HierarchyTests extends soot.jimple.infoflow.test.junit.HierarchyTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ImplicitFlowTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ImplicitFlowTests extends soot.jimple.infoflow.test.junit.ImplicitFlowTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/InFunctionTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class InFunctionTests extends soot.jimple.infoflow.test.junit.InFunctionTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/InheritanceTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class InheritanceTests extends soot.jimple.infoflow.test.junit.InheritanceTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/LengthTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class LengthTests extends soot.jimple.infoflow.test.junit.LengthTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ListTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ListTests extends soot.jimple.infoflow.test.junit.ListTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/MapTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class MapTests extends soot.jimple.infoflow.test.junit.MapTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/MultiTest.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class MultiTest extends soot.jimple.infoflow.test.junit.MultiTest { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/OperationSemanticTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class OperationSemanticTests extends soot.jimple.infoflow.test.junit.OperationSemanticTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/OtherTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class OtherTests extends soot.jimple.infoflow.test.junit.OtherTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/OverwriteTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class OverwriteTests extends soot.jimple.infoflow.test.junit.OverwriteTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/QueueTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class QueueTests extends soot.jimple.infoflow.test.junit.QueueTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ReflectionTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ReflectionTests extends soot.jimple.infoflow.test.junit.ReflectionTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/SetTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class SetTests extends soot.jimple.infoflow.test.junit.SetTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/SingleJoinPointTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class SingleJoinPointTests extends soot.jimple.infoflow.test.junit.SingleJoinPointTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/SourceSinkTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class SourceSinkTests extends soot.jimple.infoflow.test.junit.SourceSinkTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/StaticTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class StaticTests extends soot.jimple.infoflow.test.junit.StaticTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/StringTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class StringTests extends soot.jimple.infoflow.test.junit.StringTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/ThreadTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class ThreadTests extends soot.jimple.infoflow.test.junit.ThreadTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/TypeTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class TypeTests extends soot.jimple.infoflow.test.junit.TypeTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /soot-infoflow/test/soot/jimple/infoflow/test/junit/forward/VectorTests.java: -------------------------------------------------------------------------------- 1 | package soot.jimple.infoflow.test.junit.forward; 2 | 3 | import soot.jimple.infoflow.AbstractInfoflow; 4 | import soot.jimple.infoflow.Infoflow; 5 | 6 | public class VectorTests extends soot.jimple.infoflow.test.junit.VectorTests { 7 | 8 | @Override 9 | protected AbstractInfoflow createInfoflowInstance() { 10 | return new Infoflow(null, false, null); 11 | } 12 | 13 | } 14 | --------------------------------------------------------------------------------