24
24
end
25
25
let ( :char_array_stream_io ) { StringIO . new ( char_array_stream ) }
26
26
27
+ let ( :complex_stream ) do
28
+ "\xac \xed \x00 \x05 \x77 \x22 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x02 \x00 \x00 " +
29
+ "\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 " +
30
+ "\xf6 \xb6 \x89 \x8d \x8b \xf2 \x86 \x43 \x75 \x72 \x00 \x18 \x5b \x4c \x6a \x61 " +
31
+ "\x76 \x61 \x2e \x72 \x6d \x69 \x2e \x73 \x65 \x72 \x76 \x65 \x72 \x2e \x4f \x62 " +
32
+ "\x6a \x49 \x44 \x3b \x87 \x13 \x00 \xb8 \xd0 \x2c \x64 \x7e \x02 \x00 \x00 \x70 " +
33
+ "\x78 \x70 \x00 \x00 \x00 \x01 \x73 \x72 \x00 \x15 \x6a \x61 \x76 \x61 \x2e \x72 " +
34
+ "\x6d \x69 \x2e \x73 \x65 \x72 \x76 \x65 \x72 \x2e \x4f \x62 \x6a \x49 \x44 \xa7 " +
35
+ "\x5e \xfa \x12 \x8d \xdc \xe5 \x5c \x02 \x00 \x02 \x4a \x00 \x06 \x6f \x62 \x6a " +
36
+ "\x4e \x75 \x6d \x4c \x00 \x05 \x73 \x70 \x61 \x63 \x65 \x74 \x00 \x15 \x4c \x6a " +
37
+ "\x61 \x76 \x61 \x2f \x72 \x6d \x69 \x2f \x73 \x65 \x72 \x76 \x65 \x72 \x2f \x55 " +
38
+ "\x49 \x44 \x3b \x70 \x78 \x70 \x0d \xc1 \x1e \x2a \x94 \x5e \x2f \xb2 \x73 \x72 " +
39
+ "\x00 \x13 \x6a \x61 \x76 \x61 \x2e \x72 \x6d \x69 \x2e \x73 \x65 \x72 \x76 \x65 " +
40
+ "\x72 \x2e \x55 \x49 \x44 \x0f \x12 \x70 \x0d \xbf \x36 \x4f \x12 \x02 \x00 \x03 " +
41
+ "\x53 \x00 \x05 \x63 \x6f \x75 \x6e \x74 \x4a \x00 \x04 \x74 \x69 \x6d \x65 \x49 " +
42
+ "\x00 \x06 \x75 \x6e \x69 \x71 \x75 \x65 \x70 \x78 \x70 \x80 \x16 \x00 \x00 \x01 " +
43
+ "\x49 \xb5 \xe4 \x92 \x78 \xd2 \x4f \xdf \x47 \x77 \x08 \x80 \x00 \x00 \x00 \x00 " +
44
+ "\x00 \x00 \x01 \x73 \x72 \x00 \x12 \x6a \x61 \x76 \x61 \x2e \x72 \x6d \x69 \x2e " +
45
+ "\x64 \x67 \x63 \x2e \x4c \x65 \x61 \x73 \x65 \xb0 \xb5 \xe2 \x66 \x0c \x4a \xdc " +
46
+ "\x34 \x02 \x00 \x02 \x4a \x00 \x05 \x76 \x61 \x6c \x75 \x65 \x4c \x00 \x04 \x76 " +
47
+ "\x6d \x69 \x64 \x74 \x00 \x13 \x4c \x6a \x61 \x76 \x61 \x2f \x72 \x6d \x69 \x2f " +
48
+ "\x64 \x67 \x63 \x2f \x56 \x4d \x49 \x44 \x3b \x70 \x78 \x70 \x00 \x00 \x00 \x00 " +
49
+ "\x00 \x09 \x27 \xc0 \x73 \x72 \x00 \x11 \x6a \x61 \x76 \x61 \x2e \x72 \x6d \x69 " +
50
+ "\x2e \x64 \x67 \x63 \x2e \x56 \x4d \x49 \x44 \xf8 \x86 \x5b \xaf \xa4 \xa5 \x6d " +
51
+ "\xb6 \x02 \x00 \x02 \x5b \x00 \x04 \x61 \x64 \x64 \x72 \x74 \x00 \x02 \x5b \x42 " +
52
+ "\x4c \x00 \x03 \x75 \x69 \x64 \x71 \x00 \x7e \x00 \x03 \x70 \x78 \x70 \x75 \x72 " +
53
+ "\x00 \x02 \x5b \x42 \xac \xf3 \x17 \xf8 \x06 \x08 \x54 \xe0 \x02 \x00 \x00 \x70 " +
54
+ "\x78 \x70 \x00 \x00 \x00 \x08 \x6b \x02 \xc7 \x72 \x60 \x1c \xc7 \x95 \x73 \x71 " +
55
+ "\x00 \x7e \x00 \x05 \x80 \x01 \x00 \x00 \x01 \x49 \xb5 \xf8 \x00 \xea \xe9 \x62 " +
56
+ "\xc1 \xc0 "
57
+ end
58
+ let ( :complex_stream_io ) { StringIO . new ( complex_stream ) }
59
+
27
60
describe ".new" do
28
61
it "Rex::Java::Serialization::Model::Stream" do
29
62
expect ( stream ) . to be_a ( Rex ::Java ::Serialization ::Model ::Stream )
36
69
it "initializes version with java serialized stream default version " do
37
70
expect ( stream . version ) . to eq ( Rex ::Java ::Serialization ::STREAM_VERSION )
38
71
end
72
+
73
+ it "initializes stream to nil by default" do
74
+ expect ( stream . stream ) . to be_nil
75
+ end
39
76
end
40
77
41
78
describe "#decode" do
70
107
expect ( stream . contents [ 0 ] ) . to be_an ( Rex ::Java ::Serialization ::Model ::NewArray )
71
108
end
72
109
end
110
+
111
+ context "when deserializing a complex stream with references" do
112
+ it "deserializes an Stream" do
113
+ expect ( stream . decode ( complex_stream_io ) ) . to be_a ( Rex ::Java ::Serialization ::Model ::Stream )
114
+ end
115
+
116
+ it "deserializes all the contents in the Stream" do
117
+ stream . decode ( complex_stream_io )
118
+ expect ( stream . contents . length ) . to eq ( 4 )
119
+ end
120
+
121
+ it "deserializes object contents" do
122
+ stream . decode ( complex_stream_io )
123
+ expect ( stream . contents [ 3 ] ) . to be_a ( Rex ::Java ::Serialization ::Model ::NewObject )
124
+ end
125
+ end
73
126
end
74
127
75
128
describe "#encode" do
119
172
expect ( stream . encode . unpack ( "C*" ) ) . to eq ( char_array_stream . unpack ( "C*" ) )
120
173
end
121
174
end
175
+
176
+ context "when reserializing a complex stream" do
177
+ it "reserializes the original stream" do
178
+ stream . decode ( complex_stream_io )
179
+ expect ( stream . encode . unpack ( "C*" ) ) . to eq ( complex_stream . unpack ( "C*" ) )
180
+ end
181
+ end
122
182
end
123
183
124
184
end
0 commit comments