Skip to content

Commit ce6b667

Browse files
committed
Entry points are now specifiable on method level and analysis API made more user friendly.
1 parent ffe4113 commit ce6b667

File tree

11 files changed

+231
-78
lines changed

11 files changed

+231
-78
lines changed

de.fraunhofer.iem.secucheck.analysis.process.client/src/main/java/de/fraunhofer/iem/secucheck/analysis/client/SecuCheckTaintAnalysisOutOfProcess.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,23 @@
22

33
import java.io.BufferedReader;
44
import java.io.File;
5-
import java.io.FileInputStream;
65
import java.io.IOException;
76
import java.io.InputStream;
87
import java.io.InputStreamReader;
98
import java.io.PrintWriter;
109
import java.lang.ProcessBuilder.Redirect;
1110
import java.net.URISyntaxException;
12-
import java.util.ArrayList;
1311
import java.util.List;
1412
import java.util.concurrent.TimeUnit;
1513
import java.util.concurrent.locks.ReentrantLock;
1614

1715
import org.apache.commons.io.FileUtils;
1816

17+
import de.fraunhofer.iem.secucheck.analysis.OS;
1918
import de.fraunhofer.iem.secucheck.analysis.SecucheckAnalysis;
2019
import de.fraunhofer.iem.secucheck.analysis.Utility;
21-
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQuery;
2220
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQueryImpl;
21+
import de.fraunhofer.iem.secucheck.analysis.query.EntryPoint;
2322
import de.fraunhofer.iem.secucheck.analysis.result.AnalysisResultListener;
2423
import de.fraunhofer.iem.secucheck.analysis.result.SecucheckTaintAnalysisResult;
2524
import de.fraunhofer.iem.secucheck.analysis.serializable.ProcessMessage;
@@ -32,8 +31,10 @@ public final class SecuCheckTaintAnalysisOutOfProcess implements SecucheckAnalys
3231

3332
private final ReentrantLock lock;
3433

34+
private OS os;
35+
private String appClassPath;
3536
private String sootClassPath;
36-
private List<String> canonicalClasses;
37+
private List<EntryPoint> entryPoints;
3738
private AnalysisResultListener resultListener;
3839
private SecucheckTaintAnalysisResult result;
3940

@@ -44,20 +45,35 @@ public SecuCheckTaintAnalysisOutOfProcess() {
4445
this.lock = new ReentrantLock();
4546
}
4647

47-
public SecuCheckTaintAnalysisOutOfProcess(String sootClassPath, List<String> canonicalClassNames,
48+
public SecuCheckTaintAnalysisOutOfProcess(OS os, String appClassPath,
49+
String sootClassPath, List<EntryPoint> entryPoints,
4850
AnalysisResultListener resultListener) {
4951
this();
52+
this.os = os;
53+
this.appClassPath = appClassPath;
5054
this.sootClassPath = sootClassPath;
51-
this.canonicalClasses = canonicalClassNames;
55+
this.entryPoints = entryPoints;
5256
this.resultListener = resultListener;
5357
}
5458

59+
public void setOs(OS os) {
60+
this.os = os;
61+
}
62+
63+
public void setSootClassPathJars(String sootClassPath) {
64+
this.sootClassPath = sootClassPath;
65+
}
66+
67+
public void setApplicationClassPath(String appClassPath) {
68+
this.appClassPath = appClassPath;
69+
}
70+
5571
public void setSootClassPath(String sootClassPath) {
5672
this.sootClassPath = sootClassPath;
5773
}
5874

59-
public void setAnalysisClasses(List<String> canonicalClassNames) {
60-
this.canonicalClasses = canonicalClassNames;
75+
public void setAnalysisEntryPoints(List<EntryPoint> entryPoints) {
76+
this.entryPoints = entryPoints;
6177
}
6278

6379
public void setListener(AnalysisResultListener resultListener) {
@@ -86,8 +102,8 @@ public SecucheckTaintAnalysisResult run(List<CompositeTaintFlowQueryImpl> flowQu
86102
// PrintStream pw = System.out;
87103
PrintWriter pw = new PrintWriter(process.getOutputStream());
88104

89-
CompleteQuery analysisQuery = new CompleteQuery(sootClassPath, canonicalClasses,
90-
flowQueries, resultListener != null);
105+
CompleteQuery analysisQuery = new CompleteQuery(os, appClassPath, sootClassPath,
106+
entryPoints, flowQueries, resultListener != null);
91107

92108
pw.println(ProcessMessageSerializer.serializeToJsonString(analysisQuery));
93109
pw.flush();

de.fraunhofer.iem.secucheck.analysis.process/src/main/java/de/fraunhofer/iem/secucheck/analysis/SecuCheckAnalysisServer.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,13 @@
22

33
import java.io.BufferedReader;
44
import java.io.ByteArrayOutputStream;
5-
import java.io.IOException;
65
import java.io.InputStreamReader;
76
import java.io.PrintStream;
8-
import java.util.ArrayList;
9-
import java.util.List;
107

118
import org.apache.logging.log4j.Level;
129
import org.apache.logging.log4j.LogManager;
1310
import org.apache.logging.log4j.Logger;
1411

15-
import com.fasterxml.jackson.core.JsonProcessingException;
16-
17-
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQuery;
18-
import de.fraunhofer.iem.secucheck.analysis.result.AnalysisResult;
1912
import de.fraunhofer.iem.secucheck.analysis.result.AnalysisResultListener;
2013
import de.fraunhofer.iem.secucheck.analysis.result.CompositeTaintFlowQueryResult;
2114
import de.fraunhofer.iem.secucheck.analysis.result.SecucheckTaintAnalysisResult;
@@ -58,9 +51,13 @@ private void run() throws Exception {
5851
CompleteQuery queryDetails = (CompleteQuery)message;
5952
this.resultListener = queryDetails.hasResultListener() ?
6053
new SimpleResultListener() : null;
54+
6155
SecucheckAnalysis analysis = new SecucheckTaintAnalysis(
56+
queryDetails.getOs(),
57+
queryDetails.getAppClassPath(),
6258
queryDetails.getSootClassPath(),
63-
queryDetails.getCanonicalClasses(), resultListener);
59+
queryDetails.getAnalysisEntryPoints(), resultListener);
60+
6461
SecucheckTaintAnalysisResult result = analysis.run(queryDetails.getFlowQueries());
6562
CompleteResult completeResult = new CompleteResult(result);
6663
systemOut.println(ProcessMessageSerializer.serializeToJsonString(completeResult));

de.fraunhofer.iem.secucheck.analysis.process/src/main/java/de/fraunhofer/iem/secucheck/analysis/serializable/query/CompleteQuery.java

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,42 @@
44

55
import com.fasterxml.jackson.annotation.JsonProperty;
66

7+
import de.fraunhofer.iem.secucheck.analysis.OS;
78
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQueryImpl;
9+
import de.fraunhofer.iem.secucheck.analysis.query.EntryPoint;
810
import de.fraunhofer.iem.secucheck.analysis.serializable.AnalysisMessage;
911
import de.fraunhofer.iem.secucheck.analysis.serializable.MessageType;
1012
import de.fraunhofer.iem.secucheck.analysis.serializable.ProcessMessage;
1113

1214
public final class CompleteQuery extends ProcessMessage implements AnalysisMessage {
1315

16+
private OS os;
1417
private boolean hasResultListener;
18+
private String appClassPath;
1519
private String sootClassPath;
16-
private List<String> canonicalClasses;
20+
private List<EntryPoint> entryPoints;
1721
private List<CompositeTaintFlowQueryImpl> flowQueries;
1822

1923
public CompleteQuery() { }
2024

21-
public CompleteQuery(String sootClassPath, List<String> canonicalClassNames,
22-
List<CompositeTaintFlowQueryImpl> flowQueries, boolean hasResultListener) {
25+
public CompleteQuery(OS os, String appClassPath, String sootClassPath,
26+
List<EntryPoint> entryPoints, List<CompositeTaintFlowQueryImpl> flowQueries,
27+
boolean hasResultListener) {
2328
super.messageType = getMessageType();
29+
this.os = os;
30+
this.appClassPath = appClassPath;
2431
this.sootClassPath = sootClassPath;
2532
this.flowQueries = flowQueries;
26-
this.canonicalClasses = canonicalClassNames;
33+
this.entryPoints = entryPoints;
2734
this.hasResultListener = hasResultListener;
2835
}
2936

3037
public MessageType getMessageType() {
3138
return MessageType.CompleteQuery;
3239
}
3340

34-
public List<String> getCanonicalClasses() {
35-
return canonicalClasses;
41+
public List<EntryPoint> getAnalysisEntryPoints() {
42+
return entryPoints;
3643
}
3744

3845
public List<CompositeTaintFlowQueryImpl> getFlowQueries() {
@@ -44,12 +51,20 @@ public boolean hasResultListener() {
4451
return hasResultListener;
4552
}
4653

54+
public OS getOs() {
55+
return os;
56+
}
57+
58+
public String getAppClassPath() {
59+
return appClassPath;
60+
}
61+
4762
public String getSootClassPath() {
4863
return sootClassPath;
4964
}
5065

51-
public void setCanonicalClasses(List<String> canonicalClasses) {
52-
this.canonicalClasses = canonicalClasses;
66+
public void setAnalysisEntryPoints(List<EntryPoint> entryPoints) {
67+
this.entryPoints = entryPoints;
5368
}
5469

5570
public void setFlowQueries(List<CompositeTaintFlowQueryImpl> flowQueries) {
@@ -60,7 +75,19 @@ public void setHasResultListener(boolean hasResultListener) {
6075
this.hasResultListener = hasResultListener;
6176
}
6277

78+
public void setOs(OS os) {
79+
this.os = os;
80+
}
81+
82+
public void setAppClassPath(String appClassPath) {
83+
this.appClassPath = appClassPath;
84+
}
85+
6386
public void setSootClassPath(String sootClassPath) {
6487
this.sootClassPath = sootClassPath;
65-
}
88+
}
89+
90+
public void setEntryPoints(List<EntryPoint> entryPoints) {
91+
this.entryPoints = entryPoints;
92+
}
6693
}
Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,36 @@
11
public class AnalyzeMe {
2-
public void work() {
2+
3+
public void workNoIssue() {
34
int secret = getSecret();
4-
//secret = sanatizer(secret);
5-
//secret = propogator(secret);
5+
publish(10);
6+
}
7+
8+
public void workNoIssueSanitizer() {
9+
int secret = getSecret();
10+
secret = sanatizer(secret);
11+
publish(secret);
12+
}
13+
14+
public void workNoIssueSanitizerProgator() {
15+
int secret = getSecret();
16+
secret = sanatizer(secret);
17+
secret = propogator(secret);
18+
publish(secret);
19+
}
20+
21+
public void workWithIssue() {
22+
int secret = getSecret();
23+
publish(secret);
24+
}
25+
26+
public void workWithIssueProgator() {
27+
int secret = getSecret();
28+
secret = propogator(secret);
629
publish(secret);
730
}
831

932
public int getSecret() { return 42; }
10-
public void publish(int number) { }
33+
public void publish(int number) { System.out.print(number); }
1134
public int sanatizer(int number) { return number = 0; }
1235
public int propogator(int number) { return number; }
1336
}

de.fraunhofer.iem.secucheck.analysis.sample/src/main/java/de/fraunhofer/iem/secucheck/analysis/sample/Main.java

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
import java.util.List;
77

88
import de.fraunhofer.iem.secucheck.analysis.client.SecuCheckTaintAnalysisOutOfProcess;
9+
import de.fraunhofer.iem.secucheck.analysis.OS;
910
import de.fraunhofer.iem.secucheck.analysis.SecucheckAnalysis;
1011
import de.fraunhofer.iem.secucheck.analysis.SecucheckTaintAnalysis;
1112
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQueryImpl;
13+
import de.fraunhofer.iem.secucheck.analysis.query.EntryPoint;
1214
import de.fraunhofer.iem.secucheck.analysis.query.InputParameter;
1315
import de.fraunhofer.iem.secucheck.analysis.query.MethodImpl;
1416
import de.fraunhofer.iem.secucheck.analysis.query.OutputParameter;
@@ -21,8 +23,6 @@
2123
import de.fraunhofer.iem.secucheck.analysis.result.TaintFlowQueryResult;
2224

2325
public class Main {
24-
25-
enum OS { Windows, LinuxOrMac }
2626

2727
public static void main(String[] args) {
2828
try {
@@ -56,12 +56,12 @@ private static void runSecucheckAnalysis(SecucheckAnalysis secucheckAnalysis)
5656
getTaintFlowQuery2(), getTaintFlowQuery3(),
5757
getTaintFlowQuery4()));
5858

59-
List<String> classesToAnalyse = Arrays.asList(getClassesToAnalyze().split(";"));
60-
String sootClassPath = getSootClassPath(OS.LinuxOrMac);
6159
AnalysisResultListener resultListener = getConsoleResultListener();
6260

63-
secucheckAnalysis.setAnalysisClasses(classesToAnalyse);
64-
secucheckAnalysis.setSootClassPath(sootClassPath);
61+
secucheckAnalysis.setOs(OS.Linux);
62+
secucheckAnalysis.setAnalysisEntryPoints(getEntryPoints());
63+
secucheckAnalysis.setApplicationClassPath(getAppClassPath());
64+
secucheckAnalysis.setSootClassPathJars(getSootClassPath());
6565
secucheckAnalysis.setListener(resultListener);
6666

6767
SecucheckTaintAnalysisResult result1 = secucheckAnalysis.run(compositeOfFirst);
@@ -207,17 +207,23 @@ private static <T> List<T> getInList(T ... ts){
207207
}
208208
return list;
209209
}
210-
211-
private static String getSootClassPath(OS os) {
212-
// Use ';' for Windows and ':' for Linux or Mac.
213-
String pathSeparator= os == OS.Windows ? ";" : ":";
214-
return System.getProperty("java.home") + File.separator + "lib" + File.separator +"rt.jar" +
215-
pathSeparator +
216-
System.getProperty("user.dir") + File.separator + "target" + File.separator + "classes";
210+
211+
private static String getAppClassPath() {
212+
return System.getProperty("user.dir") + File.separator + "target" + File.separator + "classes";
217213
}
218-
219-
private static String getClassesToAnalyze() {
220-
return "AnalyzeMe";
214+
215+
private static String getSootClassPath() {
216+
return System.getProperty("java.home") + File.separator + "lib" + File.separator +"rt.jar" ;
217+
218+
}
219+
220+
private static List<EntryPoint> getEntryPoints(){
221+
List<EntryPoint> entryPoints = new ArrayList<EntryPoint>();
222+
EntryPoint entryPoint = new EntryPoint();
223+
entryPoint.setCanonicalClassName("AnalyzeMe");
224+
entryPoint.setAllMethods(true);
225+
entryPoints.add(entryPoint);
226+
return entryPoints;
221227
}
222228

223229
private static AnalysisResultListener getConsoleResultListener() {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package de.fraunhofer.iem.secucheck.analysis;
2+
3+
public enum OS {
4+
Windows, Linux, MacOS
5+
}

de.fraunhofer.iem.secucheck.analysis/src/main/java/de/fraunhofer/iem/secucheck/analysis/SecucheckAnalysis.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,20 @@
44

55
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQuery;
66
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQueryImpl;
7+
import de.fraunhofer.iem.secucheck.analysis.query.EntryPoint;
78
import de.fraunhofer.iem.secucheck.analysis.result.AnalysisResultListener;
89
import de.fraunhofer.iem.secucheck.analysis.result.SecucheckTaintAnalysisResult;
910

1011
public interface SecucheckAnalysis {
1112

12-
// Maybe split setting soot class path into
13-
// 1. Set the needed jars call.
14-
// 2. Set the needed classes' binary call.
15-
16-
void setSootClassPath(String sootClassPath);
17-
void setAnalysisClasses(List<String> canonicalClassNames);
13+
void setOs(OS os);
14+
void setSootClassPathJars(String sootClassPath);
15+
void setApplicationClassPath(String appClassPath);
16+
17+
void setAnalysisEntryPoints(List<EntryPoint> entryPoints);
1818
void setListener(AnalysisResultListener resultListener);
1919

2020
SecucheckTaintAnalysisResult run
2121
(List<CompositeTaintFlowQueryImpl> flowQueries)
2222
throws Exception;
23-
2423
}

de.fraunhofer.iem.secucheck.analysis/src/main/java/de/fraunhofer/iem/secucheck/analysis/SecucheckTaintAnalysis.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQuery;
77
import de.fraunhofer.iem.secucheck.analysis.query.CompositeTaintFlowQueryImpl;
8+
import de.fraunhofer.iem.secucheck.analysis.query.EntryPoint;
89
import de.fraunhofer.iem.secucheck.analysis.result.AnalysisResult;
910
import de.fraunhofer.iem.secucheck.analysis.result.AnalysisResultListener;
1011
import de.fraunhofer.iem.secucheck.analysis.result.SecucheckTaintAnalysisResult;
@@ -15,9 +16,11 @@ public SecucheckTaintAnalysis() {
1516
super();
1617
}
1718

18-
public SecucheckTaintAnalysis(String sootClassPath,
19-
List<String> canonicalClassNames, AnalysisResultListener resultListener) {
20-
super(sootClassPath, canonicalClassNames, resultListener);
19+
public SecucheckTaintAnalysis(OS os, String appClassPath,
20+
String sootClassPath, List<EntryPoint> entryPoints,
21+
AnalysisResultListener resultListener) {
22+
super(os, appClassPath, sootClassPath, entryPoints,
23+
resultListener);
2124
}
2225

2326
@Override

0 commit comments

Comments
 (0)