Skip to content

Commit 9fbf66e

Browse files
authored
Merge pull request #31 from RUB-NDS/metasploit_integration
Added ByteArrayPayloadModification
2 parents 55b3963 + 7ab1be6 commit 9fbf66e

File tree

6 files changed

+164
-11
lines changed

6 files changed

+164
-11
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>de.rub.nds</groupId>
55
<artifactId>ModifiableVariable</artifactId>
6-
<version>2.3</version>
6+
<version>2.4</version>
77
<packaging>jar</packaging>
88

99
<name>ModifiableVariable</name>

src/main/java/de/rub/nds/modifiablevariable/VariableModification.java

+4-9
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,7 @@
1717
import de.rub.nds.modifiablevariable.biginteger.BigIntegerXorModification;
1818
import de.rub.nds.modifiablevariable.bool.BooleanExplicitValueModification;
1919
import de.rub.nds.modifiablevariable.bool.BooleanToogleModification;
20-
import de.rub.nds.modifiablevariable.bytearray.ByteArrayDeleteModification;
21-
import de.rub.nds.modifiablevariable.bytearray.ByteArrayDuplicateModification;
22-
import de.rub.nds.modifiablevariable.bytearray.ByteArrayExplicitValueModification;
23-
import de.rub.nds.modifiablevariable.bytearray.ByteArrayInsertModification;
24-
import de.rub.nds.modifiablevariable.bytearray.ByteArrayShuffleModification;
25-
import de.rub.nds.modifiablevariable.bytearray.ByteArrayXorModification;
20+
import de.rub.nds.modifiablevariable.bytearray.*;
2621
import de.rub.nds.modifiablevariable.filter.AccessModificationFilter;
2722
import de.rub.nds.modifiablevariable.integer.IntegerAddModification;
2823
import de.rub.nds.modifiablevariable.integer.IntegerExplicitValueModification;
@@ -52,9 +47,9 @@
5247
IntegerExplicitValueModification.class, IntegerSubtractModification.class, IntegerXorModification.class,
5348
IntegerShiftLeftModification.class, IntegerShiftRightModification.class, ByteArrayDeleteModification.class,
5449
ByteArrayExplicitValueModification.class, ByteArrayInsertModification.class, ByteArrayXorModification.class,
55-
ByteArrayDuplicateModification.class, ByteArrayShuffleModification.class, ByteAddModification.class,
56-
ByteExplicitValueModification.class, ByteSubtractModification.class, ByteXorModification.class,
57-
StringExplicitValueModification.class })
50+
ByteArrayDuplicateModification.class, ByteArrayShuffleModification.class, ByteArrayPayloadModification.class,
51+
ByteAddModification.class, ByteExplicitValueModification.class, ByteSubtractModification.class,
52+
ByteXorModification.class, StringExplicitValueModification.class })
5853
public abstract class VariableModification<E> {
5954

6055
protected static final Logger LOGGER = LogManager.getLogger(VariableModification.class);

src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayModificationFactory.java

+10
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,16 @@ public static VariableModification<byte[]> xor(final byte[] xor, final int start
6060
return new ByteArrayXorModification(xor, startPosition);
6161
}
6262

63+
/**
64+
*
65+
* @param payload
66+
* bytes are set as value
67+
* @return variable modification
68+
*/
69+
public static VariableModification<byte[]> payload(final byte[] payload) {
70+
return new ByteArrayPayloadModification(payload);
71+
}
72+
6373
/**
6474
* *
6575
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/**
2+
* ModifiableVariable - A Variable Concept for Runtime Modifications
3+
*
4+
* Copyright 2014-2017 Ruhr University Bochum / Hackmanit GmbH
5+
*
6+
* Licensed under Apache License 2.0
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*/
9+
package de.rub.nds.modifiablevariable.bytearray;
10+
11+
import de.rub.nds.modifiablevariable.VariableModification;
12+
import de.rub.nds.modifiablevariable.util.ArrayConverter;
13+
import de.rub.nds.modifiablevariable.util.ByteArrayAdapter;
14+
15+
import java.util.Arrays;
16+
import java.util.Random;
17+
import javax.xml.bind.annotation.XmlRootElement;
18+
import javax.xml.bind.annotation.XmlType;
19+
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
20+
21+
@XmlRootElement
22+
@XmlType(propOrder = { "prependPayload", "payload", "appendPayload", "insert", "insertPosition", "modificationFilter",
23+
"postModification" })
24+
public class ByteArrayPayloadModification extends VariableModification<byte[]> {
25+
26+
private byte[] prependPayload = new byte[] {};
27+
28+
private byte[] payload = new byte[] {};
29+
30+
private byte[] appendPayload = new byte[] {};
31+
32+
private boolean insert = false;
33+
34+
private int insertPosition = 0;
35+
36+
public ByteArrayPayloadModification() {
37+
38+
}
39+
40+
public ByteArrayPayloadModification(byte[] payload) {
41+
this.payload = payload;
42+
}
43+
44+
public ByteArrayPayloadModification(byte[] payload, int insertPosition) {
45+
this.payload = payload;
46+
this.insert = true;
47+
this.insertPosition = insertPosition;
48+
}
49+
50+
@Override
51+
protected byte[] modifyImplementationHook(byte[] input) {
52+
byte[] completePayload = getCompletePayload();
53+
54+
if (!insert) {
55+
return completePayload;
56+
}
57+
58+
ByteArrayInsertModification insertMod = new ByteArrayInsertModification(completePayload, this.insertPosition);
59+
return insertMod.modify(input);
60+
}
61+
62+
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
63+
public byte[] getPrependPayload() {
64+
return prependPayload;
65+
}
66+
67+
public void setPrependPayload(byte[] prependPayload) {
68+
this.prependPayload = prependPayload;
69+
}
70+
71+
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
72+
public byte[] getPayload() {
73+
return payload;
74+
}
75+
76+
public void setPayload(byte[] payload) {
77+
this.payload = payload;
78+
}
79+
80+
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
81+
public byte[] getAppendPayload() {
82+
return appendPayload;
83+
}
84+
85+
public void setAppendPayload(byte[] appendPayload) {
86+
this.appendPayload = appendPayload;
87+
}
88+
89+
public boolean isInsert() {
90+
return insert;
91+
}
92+
93+
public void setInsert(boolean insert) {
94+
this.insert = insert;
95+
}
96+
97+
public int getInsertPosition() {
98+
return insertPosition;
99+
}
100+
101+
public void setInsertPosition(int insertPosition) {
102+
this.insertPosition = insertPosition;
103+
}
104+
105+
public byte[] getCompletePayload() {
106+
return ArrayConverter.concatenate(prependPayload, payload, appendPayload);
107+
}
108+
109+
@Override
110+
public VariableModification<byte[]> getModifiedCopy() {
111+
ByteArrayPayloadModification mod = new ByteArrayPayloadModification(payload);
112+
mod.setAppendPayload(appendPayload);
113+
mod.setPrependPayload(prependPayload);
114+
115+
if (this.insert) {
116+
mod.setInsert(true);
117+
mod.setInsertPosition(insertPosition);
118+
return mod;
119+
}
120+
121+
return mod;
122+
}
123+
}

src/main/java/de/rub/nds/modifiablevariable/bytearray/ModifiableByteArray.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121

2222
@XmlRootElement
2323
@XmlSeeAlso({ ByteArrayDeleteModification.class, ByteArrayExplicitValueModification.class,
24-
ByteArrayInsertModification.class, ByteArrayXorModification.class, ByteArrayDuplicateModification.class })
24+
ByteArrayInsertModification.class, ByteArrayXorModification.class, ByteArrayDuplicateModification.class,
25+
ByteArrayPayloadModification.class })
2526
@XmlType(propOrder = { "originalValue", "modification", "assertEquals" })
2627
public class ModifiableByteArray extends ModifiableVariable<byte[]> implements Serializable {
2728

src/test/java/de/rub/nds/modifiablevariable/bytearray/ModifiableByteArrayTest.java

+24
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,30 @@ public void testExplicitValue() {
6767
assertArrayEquals(modification1, start.getValue());
6868
}
6969

70+
/**
71+
* Test of payload method, of class ModifiableByteArray.
72+
*/
73+
@Test
74+
public void testPayload() {
75+
LOGGER.info("testPayload");
76+
VariableModification<byte[]> modifier = ByteArrayModificationFactory.payload(modification1);
77+
start.setModification(modifier);
78+
assertArrayEquals(modification1, start.getValue());
79+
}
80+
81+
/**
82+
* Test of payload method, of class ModifiableByteArray.
83+
*/
84+
@Test
85+
public void testPayloadWithInsert() {
86+
LOGGER.info("testPayload");
87+
VariableModification<byte[]> modifier = ByteArrayModificationFactory.payload(modification1);
88+
((ByteArrayPayloadModification) modifier).setInsert(true);
89+
((ByteArrayPayloadModification) modifier).setInsertPosition(0);
90+
start.setModification(modifier);
91+
assertArrayEquals(ArrayConverter.concatenate(modification1, originalValue), start.getValue());
92+
}
93+
7094
/**
7195
* Test of setXorFirstBytes method, of class ModifiableByteArray.
7296
*/

0 commit comments

Comments
 (0)