Java 类soot.jimple.infoflow.source.ISourceSinkManager 实例源码
项目:soot-inflow
文件:Infoflow.java
@Override
public void computeInfoflow(String path, IEntryPointCreator entryPointCreator,
List<String> entryPoints, ISourceSinkManager sourcesSinks) {
results = null;
if (sourcesSinks == null) {
logger.error("Sources are empty!");
return;
}
initializeSoot(path,
SootMethodRepresentationParser.v().parseClassNames(entryPoints, false).keySet(),
sourcesSinks);
// entryPoints are the entryPoints required by Soot to calculate Graph - if there is no main method,
// we have to create a new main method and use it as entryPoint and store our real entryPoints
Scene.v().setEntryPoints(Collections.singletonList(entryPointCreator.createDummyMain(entryPoints)));
// We explicitly select the packs we want to run for performance reasons
PackManager.v().getPack("wspp").apply();//==>
PackManager.v().getPack("cg").apply();//==>
PackManager.v().getPack("wjtp").apply();
PackManager.v().getPack("wstp").apply();//==>
//Main.v().main(args); ==>
if (debug)
PackManager.v().writeOutput();
}
项目:JAADAS
文件:InfoflowProblem.java
public InfoflowProblem(IInfoflowCFG icfg, ISourceSinkManager sourceSinkManager,
IAliasingStrategy aliasingStrategy) {
super(icfg, sourceSinkManager);
this.aliasingStrategy = aliasingStrategy;
this.implicitFlowAliasingStrategy = new ImplicitFlowAliasStrategy(icfg);
this.aliasing = new Aliasing(aliasingStrategy, icfg);
}
项目:JAADAS
文件:Infoflow.java
@Override
public void computeInfoflow(String appPath, String libPath, String entryPoint,
ISourceSinkManager sourcesSinks) {
if (sourcesSinks == null) {
logger.error("Sources are empty!");
return;
}
initializeSoot(appPath, libPath,
SootMethodRepresentationParser.v().parseClassNames
(Collections.singletonList(entryPoint), false).keySet(), entryPoint);
if (!Scene.v().containsMethod(entryPoint)){
logger.error("Entry point not found: " + entryPoint);
return;
}
SootMethod ep = Scene.v().getMethod(entryPoint);
if (ep.isConcrete())
ep.retrieveActiveBody();
else {
logger.debug("Skipping non-concrete method " + ep);
return;
}
Scene.v().setEntryPoints(Collections.singletonList(ep));
Options.v().set_main_class(ep.getDeclaringClass().getName());
// Compute the additional seeds if they are specified
Set<String> seeds = Collections.emptySet();
if (entryPoint != null && !entryPoint.isEmpty())
seeds = Collections.singleton(entryPoint);
ipcManager.updateJimpleForICC();
// Run the analysis
runAnalysis(sourcesSinks, seeds);
}
项目:JAADAS
文件:Infoflow.java
/**
* Scans the given method for sources and sinks contained in it. Sinks are
* just counted, sources are added to the InfoflowProblem as seeds.
* @param sourcesSinks The SourceSinkManager to be used for identifying
* sources and sinks
* @param forwardProblem The InfoflowProblem in which to register the
* sources as seeds
* @param m The method to scan for sources and sinks
* @return The number of sinks found in this method
*/
private int scanMethodForSourcesSinks(
final ISourceSinkManager sourcesSinks,
InfoflowProblem forwardProblem,
SootMethod m) {
int sinkCount = 0;
if (m.hasActiveBody()) {
// Check whether this is a system class we need to ignore
final String className = m.getDeclaringClass().getName();
if (ignoreFlowsInSystemPackages && SystemClassHandler.isClassInSystemPackage(className))
return sinkCount;
// Look for a source in the method. Also look for sinks. If we
// have no sink in the program, we don't need to perform any
// analysis
PatchingChain<Unit> units = m.getActiveBody().getUnits();
for (Unit u : units) {
Stmt s = (Stmt) u;
if (sourcesSinks.getSourceInfo(s, iCfg) != null) {
forwardProblem.addInitialSeeds(u, Collections.singleton(forwardProblem.zeroValue()));
logger.debug("Source found: {}", u);
}
if (sourcesSinks.isSink(s, iCfg, null)) {
logger.debug("Sink found: {}", u);
sinkCount++;
}
}
}
return sinkCount;
}
项目:soot-inflow
文件:InfoflowProblem.java
public InfoflowProblem(IInfoflowCFG icfg, ISourceSinkManager sourceSinkManager,
IAliasingStrategy aliasingStrategy) {
super(icfg);
this.sourceSinkManager = sourceSinkManager;
this.aliasingStrategy = aliasingStrategy;
this.implicitFlowAliasingStrategy = new ImplicitFlowAliasStrategy(icfg);
}
项目:soot-inflow
文件:Infoflow.java
@Override
public void computeInfoflow(String path, String entryPoint, ISourceSinkManager sourcesSinks) {
results = null;
if (sourcesSinks == null) {
logger.error("Sources are empty!");
return;
}
initializeSoot(path, SootMethodRepresentationParser.v().parseClassNames
(Collections.singletonList(entryPoint), false).keySet(), sourcesSinks, entryPoint);
if (!Scene.v().containsMethod(entryPoint)){
logger.error("Entry point not found: " + entryPoint);
return;
}
SootMethod ep = Scene.v().getMethod(entryPoint);
if (ep.isConcrete())
ep.retrieveActiveBody();
else {
logger.debug("Skipping non-concrete method " + ep);
return;
}
Scene.v().setEntryPoints(Collections.singletonList(ep));
Options.v().set_main_class(ep.getDeclaringClass().getName());
// We explicitly select the packs we want to run for performance reasons
PackManager.v().getPack("wspp").apply();
PackManager.v().getPack("cg").apply();
PackManager.v().getPack("wjtp").apply();
PackManager.v().getPack("wstp").apply();
if (debug)
PackManager.v().writeOutput();
}
项目:FuzzDroid
文件:SmartConstantDataExtractorFuzzyAnalysis.java
@Override
public void runAnalysis(final ISourceSinkManager sourcesSinks) {
super.runAnalysis(sourcesSinks);
}
项目:FuzzDroid
文件:StringToPrimitiveTypeFuzzer.java
@Override
public void runAnalysis(final ISourceSinkManager sourcesSinks) {
super.runAnalysis(sourcesSinks);
}
项目:FuzzDroid
文件:FileFuzzer.java
@Override
public void runAnalysis(final ISourceSinkManager sourcesSinks) {
super.runAnalysis(sourcesSinks);
}
项目:JAADAS
文件:InfoflowProblem.java
public InfoflowProblem(ISourceSinkManager sourceSinkManager,
IAliasingStrategy aliasingStrategy) {
this(new InfoflowCFG(), sourceSinkManager, aliasingStrategy);
}
项目:JAADAS
文件:InfoflowProblem.java
public InfoflowProblem(ISourceSinkManager mySourceSinkManager, Set<Unit> analysisSeeds,
IAliasingStrategy aliasingStrategy) {
this(new InfoflowCFG(), mySourceSinkManager, aliasingStrategy);
for (Unit u : analysisSeeds)
this.initialSeeds.put(u, Collections.singleton(getZeroValue()));
}
项目:JAADAS
文件:BackwardsInfoflowProblem.java
public BackwardsInfoflowProblem(BiDiInterproceduralCFG<Unit, SootMethod> icfg,
ISourceSinkManager sourceSinkManager) {
super(icfg, sourceSinkManager);
}
项目:JAADAS
文件:AbstractInfoflowProblem.java
public AbstractInfoflowProblem(BiDiInterproceduralCFG<Unit, SootMethod> icfg,
ISourceSinkManager sourceSinkManager) {
super(icfg);
this.sourceSinkManager = sourceSinkManager;
}
项目:soot-inflow
文件:InfoflowProblem.java
public InfoflowProblem(ISourceSinkManager sourceSinkManager,
IAliasingStrategy aliasingStrategy) {
this(new InfoflowCFG(), sourceSinkManager, aliasingStrategy);
}
项目:soot-inflow
文件:InfoflowProblem.java
public InfoflowProblem(ISourceSinkManager mySourceSinkManager, Set<Unit> analysisSeeds,
IAliasingStrategy aliasingStrategy) {
this(new InfoflowCFG(), mySourceSinkManager, aliasingStrategy);
for (Unit u : analysisSeeds)
this.initialSeeds.put(u, Collections.singleton(zeroValue));
}
项目:soot-inflow
文件:AnalysisManager.java
public void setISSM(ISourceSinkManager issm){
this.issm = issm;
}
项目:soot-inflow
文件:AnalysisManager.java
public ISourceSinkManager getISSM(){
return this.issm;
}
项目:JAADAS
文件:InterproceduralConstantValuePropagator.java
/**
* Creates a new instance of the {@link InterproceduralConstantValuePropagator}
* class
* @param icfg The interprocedural control flow graph to use
* @param excludedMethods The methods that shall be excluded. If one of these
* methods calls another method with a constant argument, this argument will
* not be propagated into the callee.
* @param sourceSinkManager The SourceSinkManager to be used for not
* propagating constants out of source methods
* @param taintWrapper The taint wrapper to be used for not breaking dummy
* values that will later be replaced by artificial taints
*/
public InterproceduralConstantValuePropagator(IInfoflowCFG icfg,
Collection<SootMethod> excludedMethods,
ISourceSinkManager sourceSinkManager,
ITaintPropagationWrapper taintWrapper) {
this.icfg = icfg;
this.excludedMethods = new HashSet<SootMethod>(excludedMethods);
this.sourceSinkManager = sourceSinkManager;
this.taintWrapper = taintWrapper;
}
项目:JAADAS
文件:IInfoflow.java
/**
* Computes the information flow on a list of entry point methods. This list
* is used to construct an artificial main method following the Android
* life cycle for all methods that are detected to be part of Android's
* application infrastructure (e.g. android.app.Activity.onCreate)
* @param appPath The path containing the client program's files
* @param libPath the path to the main folder of the (unpacked) library class files
* @param entryPointCreator the entry point creator to use for generating the dummy
* main method
* @param sourcesSinks manager class for identifying sources and sinks in the source code
*/
public void computeInfoflow(String appPath, String libPath,
IEntryPointCreator entryPointCreator,
ISourceSinkManager sourcesSinks);
项目:JAADAS
文件:IInfoflow.java
/**
* Computes the information flow on a single method. This method is
* directly taken as the entry point into the program, even if it is an
* instance method.
* @param appPath The path containing the client program's files
* @param libPath the path to the main folder of the (unpacked) library class files
* @param entryPoint the main method to analyze
* @param sourcesSinks manager class for identifying sources and sinks in the source code
*/
public void computeInfoflow(String appPath, String libPath, String entryPoint,
ISourceSinkManager sourcesSinks);
项目:soot-inflow
文件:IInfoflow.java
/**
* Computes the information flow on a list of entry point methods. This list
* is used to construct an artificial main method following the Android
* life cycle for all methods that are detected to be part of Android's
* application infrastructure (e.g. android.app.Activity.onCreate)
* @param path the path to the main folder of the (unpacked) class files
* @param entryPointCreator the entry point creator to use for generating the dummy
* main method
* @param entryPoints the entryPoints (string conforms to SootMethod representation)
* @param sourcesSinks manager class for identifying sources and sinks in the source code
*/
public void computeInfoflow(String path, IEntryPointCreator entryPointCreator,
List<String> entryPoints, ISourceSinkManager sourcesSinks);
项目:soot-inflow
文件:IInfoflow.java
/**
* Computes the information flow on a single method. This method is
* directly taken as the entry point into the program, even if it is an
* instance method.
* @param path the path to the main folder of the (unpacked) class files
* @param entryPoint the main method to analyze
* @param sourcesSinks manager class for identifying sources and sinks in the source code
*/
public void computeInfoflow(String path, String entryPoint, ISourceSinkManager sourcesSinks);
项目:soot-inflow
文件:Infoflow.java
/**
* Initializes Soot.
* @param path The Soot classpath
* @param classes The set of classes that shall be checked for data flow
* analysis seeds. All sources in these classes are used as seeds.
* @param sourcesSinks The manager object for identifying sources and sinks
*/
private void initializeSoot(String path, Set<String> classes, ISourceSinkManager sourcesSinks) {
initializeSoot(path, classes, sourcesSinks, "");
}