-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSulBLE.java
More file actions
100 lines (84 loc) · 3.33 KB
/
SulBLE.java
File metadata and controls
100 lines (84 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.github.protocolfuzzing.blefuzzer;
import com.github.protocolfuzzing.blefuzzer.symbols.InputBLE;
import com.github.protocolfuzzing.blefuzzer.symbols.OutputBLE;
import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul;
import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter;
import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig;
import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider;
import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.Mapper;
import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks;
import jep.SharedInterpreter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SulBLE implements AbstractSul<InputBLE, OutputBLE, ExecutionContextBLE> {
private static final Logger LOGGER = LogManager.getLogger();
protected MapperBLE dummyMapper;
protected DynamicPortProvider dynamicPortProvider;
protected SulServerConfigBLE config;
protected CleanupTasks cleanupTasks;
protected SharedInterpreter interp;
public SulBLE(SulConfig sulConfig, CleanupTasks cleanupTasks) {
this.dummyMapper = new MapperBLE();
this.config = (SulServerConfigBLE) sulConfig;
this.cleanupTasks = cleanupTasks;
// Find the right mapper to use
String mapper = "BLESUL";
if(config.getMapper() != null) {
mapper += "_" + config.getMapper();
}
// Set up the python interpreter for our mapper
interp = new SharedInterpreter();
interp.exec("import sys; sys.path.insert(0, 'py')");
interp.exec(String.format("from %s import %s as SUL", mapper, mapper));
interp.exec(String.format("b = SUL('%s', '%s')", config.getAdapterSerialPort(), config.getTargetMacAddr()));
// Cleanup task to save the pcap and close the serial device
cleanupTasks.submit(new Runnable() {
@Override
public void run() {
LOGGER.debug("Closing serial port...");
interp.exec("b.close()");
}
});
}
@Override
public void pre() {
LOGGER.debug("SulBLE: pre");
interp.exec("b.pre()");
}
@Override
public OutputBLE step(InputBLE in) {
LOGGER.debug("SulBLE: step");
interp.exec(String.format("outsym = b.step('%s')", in.getName()));
String outputSymbol = (String) interp.getValue("outsym");
return new OutputBLE(outputSymbol);
}
@Override
public void post() {
LOGGER.debug("SulBLE: post");
interp.exec("b.post()");
}
@Override
public SulConfig getSulConfig() {
return config;
}
@Override
public CleanupTasks getCleanupTasks() {
return cleanupTasks;
}
@Override
public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) {
this.dynamicPortProvider = dynamicPortProvider;
}
@Override
public DynamicPortProvider getDynamicPortProvider() {
return this.dynamicPortProvider;
}
@Override
public Mapper<InputBLE, OutputBLE, ExecutionContextBLE> getMapper() {
return this.dummyMapper;
}
@Override
public SulAdapter getSulAdapter() {
return null;
}
}