ronin-support 1.0.0.beta3 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +14 -0
- data/.rubocop.yml +109 -0
- data/ChangeLog.md +12 -1
- data/Gemfile +8 -4
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/examples/ssl_proxy.rb +2 -1
- data/examples/tcp_proxy.rb +6 -4
- data/lib/ronin/support/archive/tar/writer.rb +2 -2
- data/lib/ronin/support/archive/tar.rb +4 -4
- data/lib/ronin/support/archive/zip/reader.rb +2 -2
- data/lib/ronin/support/binary/array.rb +4 -7
- data/lib/ronin/support/binary/bit_flip.rb +7 -1
- data/lib/ronin/support/binary/buffer.rb +22 -22
- data/lib/ronin/support/binary/byte_slice.rb +17 -17
- data/lib/ronin/support/binary/cstring.rb +7 -4
- data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/arm.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/mips.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/x86.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/array_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/big_endian.rb +3 -0
- data/lib/ronin/support/binary/ctypes/enum_type.rb +2 -2
- data/lib/ronin/support/binary/ctypes/little_endian.rb +3 -0
- data/lib/ronin/support/binary/ctypes/native.rb +3 -0
- data/lib/ronin/support/binary/ctypes/scalar_type.rb +2 -2
- data/lib/ronin/support/binary/ctypes/struct_type.rb +3 -3
- data/lib/ronin/support/binary/ctypes/type_resolver.rb +7 -8
- data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/union_type.rb +3 -3
- data/lib/ronin/support/binary/ctypes.rb +3 -3
- data/lib/ronin/support/binary/memory.rb +2 -2
- data/lib/ronin/support/binary/packet.rb +3 -0
- data/lib/ronin/support/binary/stack.rb +3 -4
- data/lib/ronin/support/binary/struct/member.rb +5 -3
- data/lib/ronin/support/binary/struct.rb +81 -79
- data/lib/ronin/support/binary/template.rb +1 -0
- data/lib/ronin/support/binary/unhexdump/parser.rb +11 -11
- data/lib/ronin/support/binary/union.rb +22 -22
- data/lib/ronin/support/cli/ansi.rb +0 -1
- data/lib/ronin/support/cli/io_shell/core_ext/io.rb +1 -1
- data/lib/ronin/support/cli/io_shell.rb +4 -4
- data/lib/ronin/support/cli/printing.rb +3 -3
- data/lib/ronin/support/compression/zlib.rb +1 -1
- data/lib/ronin/support/core_ext/enumerable.rb +0 -2
- data/lib/ronin/support/core_ext/file.rb +1 -1
- data/lib/ronin/support/core_ext/kernel.rb +6 -5
- data/lib/ronin/support/core_ext/string.rb +2 -2
- data/lib/ronin/support/crypto/cert.rb +11 -15
- data/lib/ronin/support/crypto/cert_chain.rb +1 -1
- data/lib/ronin/support/crypto/cipher/aes.rb +3 -0
- data/lib/ronin/support/crypto/cipher/aes128.rb +4 -1
- data/lib/ronin/support/crypto/cipher/aes256.rb +4 -1
- data/lib/ronin/support/crypto/cipher.rb +1 -1
- data/lib/ronin/support/crypto/core_ext/file.rb +1 -1
- data/lib/ronin/support/crypto/key/methods.rb +4 -1
- data/lib/ronin/support/crypto/key.rb +5 -2
- data/lib/ronin/support/crypto/openssl.rb +1 -1
- data/lib/ronin/support/crypto.rb +0 -1
- data/lib/ronin/support/encoding/base16.rb +1 -1
- data/lib/ronin/support/encoding/base32.rb +28 -17
- data/lib/ronin/support/encoding/c/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/c.rb +4 -4
- data/lib/ronin/support/encoding/hex.rb +2 -2
- data/lib/ronin/support/encoding/js/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/js.rb +4 -4
- data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +2 -2
- data/lib/ronin/support/encoding/powershell.rb +4 -5
- data/lib/ronin/support/encoding/ruby.rb +4 -4
- data/lib/ronin/support/encoding/shell/core_ext/integer.rb +2 -2
- data/lib/ronin/support/encoding/shell.rb +3 -3
- data/lib/ronin/support/encoding/sql.rb +1 -1
- data/lib/ronin/support/encoding/xml.rb +2 -2
- data/lib/ronin/support/encoding.rb +95 -0
- data/lib/ronin/support/network/asn/list.rb +6 -1
- data/lib/ronin/support/network/asn/record.rb +3 -0
- data/lib/ronin/support/network/asn/record_set.rb +3 -0
- data/lib/ronin/support/network/asn.rb +167 -6
- data/lib/ronin/support/network/dns/resolver.rb +3 -0
- data/lib/ronin/support/network/domain.rb +21 -21
- data/lib/ronin/support/network/email_address.rb +1 -5
- data/lib/ronin/support/network/esmtp/mixin.rb +1 -0
- data/lib/ronin/support/network/ftp/mixin.rb +1 -1
- data/lib/ronin/support/network/host.rb +75 -47
- data/lib/ronin/support/network/http/core_ext.rb +1 -1
- data/lib/ronin/support/network/http.rb +317 -80
- data/lib/ronin/support/network/ip.rb +8 -10
- data/lib/ronin/support/network/ip_range/cidr.rb +1 -5
- data/lib/ronin/support/network/ip_range/glob.rb +1 -0
- data/lib/ronin/support/network/ip_range/range.rb +1 -1
- data/lib/ronin/support/network/ip_range.rb +1 -3
- data/lib/ronin/support/network/proxy.rb +4 -4
- data/lib/ronin/support/network/public_suffix/list.rb +10 -8
- data/lib/ronin/support/network/public_suffix/suffix_set.rb +3 -0
- data/lib/ronin/support/network/public_suffix.rb +9 -4
- data/lib/ronin/support/network/smtp/email.rb +0 -9
- data/lib/ronin/support/network/smtp/mixin.rb +2 -2
- data/lib/ronin/support/network/ssl/local_cert.rb +1 -3
- data/lib/ronin/support/network/ssl/mixin.rb +13 -13
- data/lib/ronin/support/network/ssl/openssl.rb +1 -1
- data/lib/ronin/support/network/ssl/proxy.rb +14 -16
- data/lib/ronin/support/network/ssl.rb +4 -2
- data/lib/ronin/support/network/tcp/proxy.rb +3 -3
- data/lib/ronin/support/network/tcp.rb +10 -12
- data/lib/ronin/support/network/telnet/mixin.rb +14 -14
- data/lib/ronin/support/network/tld/list.rb +2 -1
- data/lib/ronin/support/network/tld.rb +7 -4
- data/lib/ronin/support/network/tls/proxy.rb +1 -1
- data/lib/ronin/support/network/tls.rb +0 -2
- data/lib/ronin/support/network/udp/proxy.rb +5 -5
- data/lib/ronin/support/network/udp.rb +14 -16
- data/lib/ronin/support/path.rb +3 -3
- data/lib/ronin/support/text/erb/mixin.rb +3 -0
- data/lib/ronin/support/text/homoglyph/table.rb +3 -3
- data/lib/ronin/support/text/patterns/credentials.rb +2 -2
- data/lib/ronin/support/text/patterns/crypto.rb +1 -1
- data/lib/ronin/support/text/patterns/file_system.rb +3 -4
- data/lib/ronin/support/text/patterns/network.rb +10 -10
- data/lib/ronin/support/text/patterns/numeric.rb +1 -1
- data/lib/ronin/support/text/patterns/source_code.rb +2 -2
- data/lib/ronin/support/text/random.rb +2 -2
- data/lib/ronin/support/text/typo/generator.rb +2 -2
- data/lib/ronin/support/version.rb +1 -1
- data/ronin-support.gemspec +6 -5
- metadata +3 -2
@@ -37,10 +37,10 @@ module Ronin
|
|
37
37
|
# ### Defining Members
|
38
38
|
#
|
39
39
|
# class Point < Ronin::Support::Binary::Struct
|
40
|
-
#
|
40
|
+
#
|
41
41
|
# member :x, :int32
|
42
42
|
# member :y, :int32
|
43
|
-
#
|
43
|
+
#
|
44
44
|
# end
|
45
45
|
#
|
46
46
|
# ### Initializing Structs
|
@@ -69,10 +69,10 @@ module Ronin
|
|
69
69
|
# ### Packing Structs
|
70
70
|
#
|
71
71
|
# class Point < Ronin::Support::Binary::Struct
|
72
|
-
#
|
72
|
+
#
|
73
73
|
# member :x, :int32
|
74
74
|
# member :y, :int32
|
75
|
-
#
|
75
|
+
#
|
76
76
|
# end
|
77
77
|
#
|
78
78
|
# point = Point.new(x: 10, y: -1)
|
@@ -82,12 +82,12 @@ module Ronin
|
|
82
82
|
# ### Unpacking Structs
|
83
83
|
#
|
84
84
|
# class Point < Ronin::Support::Binary::Struct
|
85
|
-
#
|
85
|
+
#
|
86
86
|
# member :x, :int32
|
87
87
|
# member :y, :int32
|
88
|
-
#
|
88
|
+
#
|
89
89
|
# end
|
90
|
-
#
|
90
|
+
#
|
91
91
|
# point = Point.unpack("\x00\x00\x00\x01\xFF\xFF\xFF\xFF")
|
92
92
|
# point.x
|
93
93
|
# # => 1
|
@@ -95,30 +95,30 @@ module Ronin
|
|
95
95
|
# # => -1
|
96
96
|
#
|
97
97
|
# ### Inheriting Structs
|
98
|
-
#
|
98
|
+
#
|
99
99
|
# class Point < Ronin::Support::Binary::Struct
|
100
|
-
#
|
100
|
+
#
|
101
101
|
# member :x, :int32
|
102
102
|
# member :y, :int32
|
103
|
-
#
|
103
|
+
#
|
104
104
|
# end
|
105
|
-
#
|
105
|
+
#
|
106
106
|
# class Point3D < Point
|
107
|
-
#
|
107
|
+
#
|
108
108
|
# member :z, :int32
|
109
109
|
#
|
110
110
|
# end
|
111
|
-
#
|
111
|
+
#
|
112
112
|
# point = Point.new(x: 100, y: 42)
|
113
113
|
# point3d = Point3D.new(x: 100, y: 42, z: -1)
|
114
114
|
#
|
115
115
|
# ### Array Fields
|
116
116
|
#
|
117
117
|
# class MyStruct < Ronin::Support::Binary::Struct
|
118
|
-
#
|
118
|
+
#
|
119
119
|
# member :x, :uint32
|
120
120
|
# member :nums, [:uint8, 10]
|
121
|
-
#
|
121
|
+
#
|
122
122
|
# end
|
123
123
|
#
|
124
124
|
# struct = MyStruct.new
|
@@ -129,12 +129,12 @@ module Ronin
|
|
129
129
|
# ### Unbounded Array Fields
|
130
130
|
#
|
131
131
|
# class MyStruct < Ronin::Support::Binary::Struct
|
132
|
-
#
|
132
|
+
#
|
133
133
|
# member :length, :uint32
|
134
134
|
# member :payload, (:uint8..)
|
135
|
-
#
|
135
|
+
#
|
136
136
|
# end
|
137
|
-
#
|
137
|
+
#
|
138
138
|
# struct = MyStruct.new
|
139
139
|
# struct.payload = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]
|
140
140
|
# struct.pack
|
@@ -143,14 +143,14 @@ module Ronin
|
|
143
143
|
# ### Struct Endianness
|
144
144
|
#
|
145
145
|
# class MyStruct < Ronin::Support::Binary::Struct
|
146
|
-
#
|
146
|
+
#
|
147
147
|
# platform endian: :big
|
148
|
-
#
|
148
|
+
#
|
149
149
|
# member :x, :uint32
|
150
150
|
# member :y, :uint32
|
151
|
-
#
|
151
|
+
#
|
152
152
|
# end
|
153
|
-
#
|
153
|
+
#
|
154
154
|
# struct = MyStruct.new
|
155
155
|
# struct.x = 0xAABB
|
156
156
|
# struct.y = 0xCCDD
|
@@ -160,13 +160,13 @@ module Ronin
|
|
160
160
|
# ### Struct Architecture
|
161
161
|
#
|
162
162
|
# class MyStruct < Ronin::Support::Binary::Struct
|
163
|
-
#
|
163
|
+
#
|
164
164
|
# platform arch: :arm64_be
|
165
|
-
#
|
165
|
+
#
|
166
166
|
# member :x, :int
|
167
167
|
# member :y, :int
|
168
168
|
# member :f, :double
|
169
|
-
#
|
169
|
+
#
|
170
170
|
# end
|
171
171
|
#
|
172
172
|
# struct = MyStruct.new
|
@@ -177,16 +177,16 @@ module Ronin
|
|
177
177
|
# # => "\x00\x00\x00d\xFF\xFF\xFF\x9C@<\xA5\xDC\x1Ac\xC1\xF8"
|
178
178
|
#
|
179
179
|
# ### Struct Operating System (OS)
|
180
|
-
#
|
180
|
+
#
|
181
181
|
# class MyStruct < Ronin::Support::Binary::Struct
|
182
|
-
#
|
182
|
+
#
|
183
183
|
# platform arch: :x86_64, os: :windows
|
184
|
-
#
|
184
|
+
#
|
185
185
|
# member :x, :long
|
186
186
|
# member :y, :long
|
187
|
-
#
|
187
|
+
#
|
188
188
|
# end
|
189
|
-
#
|
189
|
+
#
|
190
190
|
# struct = MyStruct.new
|
191
191
|
# struct.x = 255
|
192
192
|
# struct.y = -1
|
@@ -196,20 +196,20 @@ module Ronin
|
|
196
196
|
# ### Struct Alignment
|
197
197
|
#
|
198
198
|
# class Pixel < Ronin::Support::Binary::Struct
|
199
|
-
#
|
199
|
+
#
|
200
200
|
# align 4
|
201
|
-
#
|
201
|
+
#
|
202
202
|
# member :r, :uint8
|
203
203
|
# member :g, :uint8
|
204
204
|
# member :b, :uint8
|
205
|
-
#
|
205
|
+
#
|
206
206
|
# end
|
207
207
|
#
|
208
208
|
# class PixelBuf < Ronin::Support::Binary::Struct
|
209
|
-
#
|
209
|
+
#
|
210
210
|
# member :count, :uint8
|
211
211
|
# member :pixels, [Pixel, 255]
|
212
|
-
#
|
212
|
+
#
|
213
213
|
# end
|
214
214
|
#
|
215
215
|
# pixelbuf = PixelBuf.new
|
@@ -226,12 +226,12 @@ module Ronin
|
|
226
226
|
# ### Disable Struct Padding
|
227
227
|
#
|
228
228
|
# class MyStruct < Ronin::Support::Binary::Struct
|
229
|
-
#
|
229
|
+
#
|
230
230
|
# padding false
|
231
|
-
#
|
231
|
+
#
|
232
232
|
# member :c, :char
|
233
233
|
# member :i, :int32
|
234
|
-
#
|
234
|
+
#
|
235
235
|
# end
|
236
236
|
#
|
237
237
|
# struct = MyStruct.new
|
@@ -259,13 +259,13 @@ module Ronin
|
|
259
259
|
#
|
260
260
|
# @example Initiializing a new struct from a buffer:
|
261
261
|
# class MyStruct < Ronin::Support::Binary::Struct
|
262
|
-
#
|
262
|
+
#
|
263
263
|
# member :x, :uint32
|
264
264
|
# member :f, :double
|
265
265
|
# member :nums, [:uint8, 10]
|
266
|
-
#
|
266
|
+
#
|
267
267
|
# end
|
268
|
-
#
|
268
|
+
#
|
269
269
|
# struct = MyStruct.new("\x01\x00\x00\x00\x00\x00\x00\x00333333\xD3?\x01\x02\x03\x00\x00\x00\x00\x00\x00\x00")
|
270
270
|
# struct.x
|
271
271
|
# # => 1
|
@@ -328,12 +328,12 @@ module Ronin
|
|
328
328
|
#
|
329
329
|
# @example
|
330
330
|
# class MyStruct < Ronin::Support::Binary::Struct
|
331
|
-
#
|
331
|
+
#
|
332
332
|
# member :x, :uint32
|
333
333
|
# member :y, :uint32
|
334
|
-
#
|
334
|
+
#
|
335
335
|
# end
|
336
|
-
#
|
336
|
+
#
|
337
337
|
# MyStruct.size
|
338
338
|
# # => 8
|
339
339
|
#
|
@@ -412,13 +412,13 @@ module Ronin
|
|
412
412
|
#
|
413
413
|
# @example
|
414
414
|
# class MyStruct < Ronin::Support::Binary::Struct
|
415
|
-
#
|
415
|
+
#
|
416
416
|
# member :x, :uint32
|
417
417
|
# member :f, :double
|
418
418
|
# member :nums, [:uint8, 10]
|
419
|
-
#
|
419
|
+
#
|
420
420
|
# end
|
421
|
-
#
|
421
|
+
#
|
422
422
|
# MyStruct.pack(x: 1, f: 0.3, nums: [1,2,3])
|
423
423
|
# # => "\x01\x00\x00\x00\x00\x00\x00\x00333333\xD3?\x01\x02\x03\x00\x00\x00\x00\x00\x00\x00"
|
424
424
|
#
|
@@ -439,13 +439,13 @@ module Ronin
|
|
439
439
|
#
|
440
440
|
# @example
|
441
441
|
# class MyStruct < Ronin::Support::Binary::Struct
|
442
|
-
#
|
442
|
+
#
|
443
443
|
# member :x, :uint32
|
444
444
|
# member :f, :double
|
445
445
|
# member :nums, [:uint8, 10]
|
446
|
-
#
|
446
|
+
#
|
447
447
|
# end
|
448
|
-
#
|
448
|
+
#
|
449
449
|
# struct = MyStruct.unpack("\x01\x00\x00\x00\x00\x00\x00\x00333333\xD3?\x01\x02\x03\x00\x00\x00\x00\x00\x00\x00")
|
450
450
|
#
|
451
451
|
# @api public
|
@@ -465,13 +465,13 @@ module Ronin
|
|
465
465
|
#
|
466
466
|
# @example
|
467
467
|
# class MyStruct < Ronin::Support::Binary::Struct
|
468
|
-
#
|
468
|
+
#
|
469
469
|
# member :x, :uint32
|
470
470
|
# member :f, :double
|
471
471
|
# member :nums, [:uint8, 10]
|
472
|
-
#
|
472
|
+
#
|
473
473
|
# end
|
474
|
-
#
|
474
|
+
#
|
475
475
|
# file = File.new('binary.dat','b')
|
476
476
|
# struct = MyStruct.read_from(file)
|
477
477
|
#
|
@@ -480,7 +480,7 @@ module Ronin
|
|
480
480
|
# @api public
|
481
481
|
#
|
482
482
|
def self.read_from(io)
|
483
|
-
new
|
483
|
+
new.read_from(io)
|
484
484
|
end
|
485
485
|
|
486
486
|
#
|
@@ -497,13 +497,13 @@ module Ronin
|
|
497
497
|
#
|
498
498
|
# @example
|
499
499
|
# class MyStruct < Ronin::Support::Binary::Struct
|
500
|
-
#
|
500
|
+
#
|
501
501
|
# member :x, :uint32
|
502
502
|
# member :f, :double
|
503
503
|
# member :nums, [:uint8, 10]
|
504
|
-
#
|
504
|
+
#
|
505
505
|
# end
|
506
|
-
#
|
506
|
+
#
|
507
507
|
# struct = MyStruct.new("\x01\x00\x00\x00\x00\x00\x00\x00333333\xD3?\x01\x02\x03\x00\x00\x00\x00\x00\x00\x00")
|
508
508
|
# struct[:x]
|
509
509
|
# # => 1
|
@@ -519,15 +519,21 @@ module Ronin
|
|
519
519
|
case member.type
|
520
520
|
when CTypes::UnboundedArrayType
|
521
521
|
# XXX: but how do we handle an unbounded array of structs?
|
522
|
-
@cache[name] ||=
|
523
|
-
|
524
|
-
|
525
|
-
|
522
|
+
@cache[name] ||= begin
|
523
|
+
offset = member.offset
|
524
|
+
length = size - member.offset
|
525
|
+
slice = byteslice(offset,length)
|
526
|
+
|
527
|
+
Binary::Array.new(member.type.type,slice)
|
528
|
+
end
|
526
529
|
when CTypes::ObjectType
|
527
|
-
@cache[name] ||=
|
528
|
-
|
529
|
-
|
530
|
-
|
530
|
+
@cache[name] ||= begin
|
531
|
+
offset = member.offset
|
532
|
+
length = member.type.size
|
533
|
+
slice = byteslice(offset,length)
|
534
|
+
|
535
|
+
member.type.unpack(slice)
|
536
|
+
end
|
531
537
|
else
|
532
538
|
data = super(member.offset,member.type.size)
|
533
539
|
member.type.unpack(data)
|
@@ -554,13 +560,13 @@ module Ronin
|
|
554
560
|
#
|
555
561
|
# @example
|
556
562
|
# class MyStruct < Ronin::Support::Binary::Struct
|
557
|
-
#
|
563
|
+
#
|
558
564
|
# member :x, :uint32
|
559
565
|
# member :f, :double
|
560
566
|
# member :nums, [:uint8, 10]
|
561
|
-
#
|
567
|
+
#
|
562
568
|
# end
|
563
|
-
#
|
569
|
+
#
|
564
570
|
# struct = MyStruct.new
|
565
571
|
# struct[:x] = 1
|
566
572
|
# struct[:x]
|
@@ -606,7 +612,7 @@ module Ronin
|
|
606
612
|
def each(&block)
|
607
613
|
return enum_for(__method__) unless block_given?
|
608
614
|
|
609
|
-
@type.members.each_key
|
615
|
+
@type.members.each_key do |name|
|
610
616
|
yield name, self[name]
|
611
617
|
end
|
612
618
|
end
|
@@ -620,9 +626,7 @@ module Ronin
|
|
620
626
|
# @api public
|
621
627
|
#
|
622
628
|
def to_h
|
623
|
-
|
624
|
-
[name, self[name]]
|
625
|
-
}]
|
629
|
+
each.to_h
|
626
630
|
end
|
627
631
|
|
628
632
|
#
|
@@ -634,9 +638,7 @@ module Ronin
|
|
634
638
|
# @api public
|
635
639
|
#
|
636
640
|
def to_a
|
637
|
-
|
638
|
-
self[name]
|
639
|
-
end
|
641
|
+
each.map { |name,value| value }
|
640
642
|
end
|
641
643
|
|
642
644
|
extend CTypes::Mixin
|
@@ -755,7 +757,7 @@ module Ronin
|
|
755
757
|
# @api semipublic
|
756
758
|
#
|
757
759
|
def self.type_resolver
|
758
|
-
@
|
760
|
+
@type_resolver ||= CTypes::TypeResolver.new(type_system)
|
759
761
|
end
|
760
762
|
|
761
763
|
#
|
@@ -771,7 +773,7 @@ module Ronin
|
|
771
773
|
# class MyStruct < Ronin::Support::Binary::Struct
|
772
774
|
# member :x, :uint32
|
773
775
|
# end
|
774
|
-
#
|
776
|
+
#
|
775
777
|
# struct = MyStruct.new
|
776
778
|
# struct.x = 0x11223344
|
777
779
|
#
|
@@ -779,7 +781,7 @@ module Ronin
|
|
779
781
|
# class MyStruct < Ronin::Support::Binary::Struct
|
780
782
|
# member :nums, [:uint32, 10]
|
781
783
|
# end
|
782
|
-
#
|
784
|
+
#
|
783
785
|
# struct = MyStruct.new
|
784
786
|
# struct.x = [0x11111111, 0x22222222, 0x33333333, 0x44444444]
|
785
787
|
#
|
@@ -787,7 +789,7 @@ module Ronin
|
|
787
789
|
# class MyStruct < Ronin::Support::Binary::Struct
|
788
790
|
# member :payload, :uint8..
|
789
791
|
# end
|
790
|
-
#
|
792
|
+
#
|
791
793
|
# struct = MyStruct.new
|
792
794
|
# struct.payloads = [0x1, 0x2, 0x3, 0x4]
|
793
795
|
#
|
@@ -46,9 +46,7 @@ module Ronin
|
|
46
46
|
)
|
47
47
|
|
48
48
|
# Visible characters
|
49
|
-
VISIBLE_CHARS =
|
50
|
-
Chars::VISIBLE.chars.sort.zip(Chars::VISIBLE.bytes.sort)
|
51
|
-
]
|
49
|
+
VISIBLE_CHARS = Chars::VISIBLE.chars.sort.zip(Chars::VISIBLE.bytes.sort).to_h
|
52
50
|
|
53
51
|
# Escaped characters
|
54
52
|
CHARS = {
|
@@ -261,7 +259,7 @@ module Ronin
|
|
261
259
|
case @type
|
262
260
|
when CTypes::CharType
|
263
261
|
@base = 8
|
264
|
-
@chars = CHARS
|
262
|
+
@chars = CHARS
|
265
263
|
end
|
266
264
|
end
|
267
265
|
|
@@ -310,6 +308,8 @@ module Ronin
|
|
310
308
|
starts_repeating_at = previous_address + previous_row_size
|
311
309
|
else
|
312
310
|
address, row = parse_line(line)
|
311
|
+
|
312
|
+
# remember the first address
|
313
313
|
first_address ||= address
|
314
314
|
|
315
315
|
if previous_row_repeats
|
@@ -317,8 +317,8 @@ module Ronin
|
|
317
317
|
range = starts_repeating_at...address
|
318
318
|
addresses = range.step(previous_row_size)
|
319
319
|
|
320
|
-
addresses.each do |
|
321
|
-
yield
|
320
|
+
addresses.each do |next_address|
|
321
|
+
yield next_address, previous_row
|
322
322
|
end
|
323
323
|
|
324
324
|
previous_row_repeats = false
|
@@ -368,7 +368,6 @@ module Ronin
|
|
368
368
|
buffer = String.new(encoding: Encoding::ASCII_8BIT)
|
369
369
|
|
370
370
|
length = parse(hexdump) do |address,row|
|
371
|
-
first_address ||= address
|
372
371
|
buffer << pack(row)
|
373
372
|
end
|
374
373
|
|
@@ -385,7 +384,7 @@ module Ronin
|
|
385
384
|
# The parsed address.
|
386
385
|
#
|
387
386
|
# @api private
|
388
|
-
#
|
387
|
+
#
|
389
388
|
def parse_address(address)
|
390
389
|
address.to_i(@address_base)
|
391
390
|
end
|
@@ -400,7 +399,7 @@ module Ronin
|
|
400
399
|
# The parsed Integer.
|
401
400
|
#
|
402
401
|
# @api private
|
403
|
-
#
|
402
|
+
#
|
404
403
|
def parse_int(string)
|
405
404
|
string.to_i(@base)
|
406
405
|
end
|
@@ -415,7 +414,7 @@ module Ronin
|
|
415
414
|
# The parsed integer or byte value of the character.
|
416
415
|
#
|
417
416
|
def parse_char_or_int(string)
|
418
|
-
@chars.fetch(string) do
|
417
|
+
@chars.fetch(string) do
|
419
418
|
string.to_i(@base)
|
420
419
|
end
|
421
420
|
end
|
@@ -459,6 +458,7 @@ module Ronin
|
|
459
458
|
end
|
460
459
|
else
|
461
460
|
address, *numbers = line.split
|
461
|
+
|
462
462
|
address = parse_address(address)
|
463
463
|
numbers.map!(&@parse_method)
|
464
464
|
|
@@ -480,7 +480,7 @@ module Ronin
|
|
480
480
|
# The packed segment.
|
481
481
|
#
|
482
482
|
# @api private
|
483
|
-
#
|
483
|
+
#
|
484
484
|
def pack(values)
|
485
485
|
values.pack(@type.pack_string * values.length)
|
486
486
|
end
|
@@ -37,7 +37,7 @@ module Ronin
|
|
37
37
|
# member :c, :char
|
38
38
|
# member :i, :int16
|
39
39
|
# member :u, :uint32
|
40
|
-
#
|
40
|
+
#
|
41
41
|
# end
|
42
42
|
#
|
43
43
|
# ### Initializing Fields
|
@@ -54,19 +54,19 @@ module Ronin
|
|
54
54
|
# member :c, :char
|
55
55
|
# member :i, :int16
|
56
56
|
# member :u, :uint32
|
57
|
-
#
|
57
|
+
#
|
58
58
|
# end
|
59
|
-
#
|
59
|
+
#
|
60
60
|
# class MyUnion2 < MyUnion
|
61
|
-
#
|
61
|
+
#
|
62
62
|
# member :f, :float32
|
63
63
|
# member :d, :float64
|
64
|
-
#
|
64
|
+
#
|
65
65
|
# end
|
66
|
-
#
|
66
|
+
#
|
67
67
|
# union = MyUnion.new
|
68
68
|
# union.i = -1
|
69
|
-
#
|
69
|
+
#
|
70
70
|
# union2 = MyUnion.new
|
71
71
|
# union2.i = -1
|
72
72
|
# union2.d = 1.123
|
@@ -74,13 +74,13 @@ module Ronin
|
|
74
74
|
# ### Packing Unions
|
75
75
|
#
|
76
76
|
# class MyUnion < Ronin::Support::Binary::Union
|
77
|
-
#
|
77
|
+
#
|
78
78
|
# member :c, :char
|
79
79
|
# member :i, :int16
|
80
80
|
# member :u, :uint32
|
81
|
-
#
|
81
|
+
#
|
82
82
|
# end
|
83
|
-
#
|
83
|
+
#
|
84
84
|
# union = MyUnion.new
|
85
85
|
# union.u = 0x11111111
|
86
86
|
# union.i = -1
|
@@ -90,13 +90,13 @@ module Ronin
|
|
90
90
|
# ### Unpacking Unions
|
91
91
|
#
|
92
92
|
# class MyUnion < Ronin::Support::Binary::Union
|
93
|
-
#
|
93
|
+
#
|
94
94
|
# member :c, :char
|
95
95
|
# member :i, :int32
|
96
96
|
# member :u, :uint32
|
97
|
-
#
|
97
|
+
#
|
98
98
|
# end
|
99
|
-
#
|
99
|
+
#
|
100
100
|
# union = MyUnion.unpack("\xFF\xFF\x11\x11")
|
101
101
|
# union.c
|
102
102
|
# # => "\xFF"
|
@@ -108,12 +108,12 @@ module Ronin
|
|
108
108
|
# ### Array Fields
|
109
109
|
#
|
110
110
|
# class MyUnion < Ronin::Support::Binary::Union
|
111
|
-
#
|
111
|
+
#
|
112
112
|
# member :c, :char
|
113
113
|
# member :i, :int16
|
114
114
|
# member :u, :uint32
|
115
115
|
# member :nums, [:uint8, 10]
|
116
|
-
#
|
116
|
+
#
|
117
117
|
# end
|
118
118
|
#
|
119
119
|
# union = MyUnion.new
|
@@ -124,14 +124,14 @@ module Ronin
|
|
124
124
|
# ### Unbounded Array Fields
|
125
125
|
#
|
126
126
|
# class MyUnion < Ronin::Support::Binary::Union
|
127
|
-
#
|
127
|
+
#
|
128
128
|
# member :c, :char
|
129
129
|
# member :i, :int16
|
130
130
|
# member :u, :uint32
|
131
131
|
# member :payload, (:uint8..)
|
132
|
-
#
|
132
|
+
#
|
133
133
|
# end
|
134
|
-
#
|
134
|
+
#
|
135
135
|
# union = MyUnion.new
|
136
136
|
# union.payload = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]
|
137
137
|
# union.pack
|
@@ -140,15 +140,15 @@ module Ronin
|
|
140
140
|
# ### Default Endianness
|
141
141
|
#
|
142
142
|
# class MyUnion < Ronin::Support::Binary::Union
|
143
|
-
#
|
143
|
+
#
|
144
144
|
# endian :big
|
145
|
-
#
|
145
|
+
#
|
146
146
|
# member :c, :char
|
147
147
|
# member :i, :int32
|
148
148
|
# member :u, :uint32
|
149
|
-
#
|
149
|
+
#
|
150
150
|
# end
|
151
|
-
#
|
151
|
+
#
|
152
152
|
# union = MyUnion.new(u: 0xaabbccdd)
|
153
153
|
# union.pack
|
154
154
|
# # => "\xAA\xBB\xCC\xDD"
|
@@ -34,7 +34,7 @@ module Ronin
|
|
34
34
|
# NOTICE AUTH :*** Checking Ident
|
35
35
|
# NOTICE AUTH :*** Found your hostname
|
36
36
|
# NOTICE AUTH :*** No ident response
|
37
|
-
# USER test_ruby * * *
|
37
|
+
# USER test_ruby * * *
|
38
38
|
# NICK test_ruby
|
39
39
|
# PING :3167790481
|
40
40
|
# PONG 3167790481
|
@@ -123,7 +123,7 @@ module Ronin
|
|
123
123
|
io_array = [@io, @stdin]
|
124
124
|
|
125
125
|
loop do
|
126
|
-
readable,
|
126
|
+
readable, _writable, errors = IO.select(io_array,nil,io_array)
|
127
127
|
|
128
128
|
if errors.include?(@io) || errors.include?(@stdin)
|
129
129
|
return false
|
@@ -132,7 +132,7 @@ module Ronin
|
|
132
132
|
if readable.include?(@io)
|
133
133
|
data = begin
|
134
134
|
@io.readpartial(4096)
|
135
|
-
rescue EOFError
|
135
|
+
rescue EOFError
|
136
136
|
return false
|
137
137
|
end
|
138
138
|
|
@@ -142,7 +142,7 @@ module Ronin
|
|
142
142
|
if readable.include?(@stdin)
|
143
143
|
data = begin
|
144
144
|
@stdin.readpartial(4096)
|
145
|
-
rescue EOFError
|
145
|
+
rescue EOFError
|
146
146
|
return true
|
147
147
|
end
|
148
148
|
|