rex 2.0.4 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rex/arch/x86.rb +16 -0
  3. data/lib/rex/constants.rb +1 -0
  4. data/lib/rex/constants/windows.rb +147 -0
  5. data/lib/rex/encoder/xdr.rb +3 -2
  6. data/lib/rex/exceptions.rb +37 -5
  7. data/lib/rex/exploitation/cmdstager/bourne.rb +9 -1
  8. data/lib/rex/exploitation/cmdstager/tftp.rb +5 -5
  9. data/lib/rex/java.rb +3 -0
  10. data/lib/rex/java/serialization.rb +54 -0
  11. data/lib/rex/java/serialization/model.rb +20 -0
  12. data/lib/rex/java/serialization/model/annotation.rb +69 -0
  13. data/lib/rex/java/serialization/model/block_data.rb +70 -0
  14. data/lib/rex/java/serialization/model/block_data_long.rb +72 -0
  15. data/lib/rex/java/serialization/model/class_desc.rb +64 -0
  16. data/lib/rex/java/serialization/model/contents.rb +156 -0
  17. data/lib/rex/java/serialization/model/element.rb +44 -0
  18. data/lib/rex/java/serialization/model/end_block_data.rb +12 -0
  19. data/lib/rex/java/serialization/model/field.rb +172 -0
  20. data/lib/rex/java/serialization/model/long_utf.rb +48 -0
  21. data/lib/rex/java/serialization/model/new_array.rb +225 -0
  22. data/lib/rex/java/serialization/model/new_class_desc.rb +155 -0
  23. data/lib/rex/java/serialization/model/new_enum.rb +79 -0
  24. data/lib/rex/java/serialization/model/new_object.rb +223 -0
  25. data/lib/rex/java/serialization/model/null_reference.rb +12 -0
  26. data/lib/rex/java/serialization/model/reference.rb +61 -0
  27. data/lib/rex/java/serialization/model/reset.rb +12 -0
  28. data/lib/rex/java/serialization/model/stream.rb +123 -0
  29. data/lib/rex/java/serialization/model/utf.rb +69 -0
  30. data/lib/rex/mime/message.rb +9 -14
  31. data/lib/rex/payloads.rb +1 -0
  32. data/lib/rex/payloads/meterpreter.rb +2 -0
  33. data/lib/rex/payloads/meterpreter/patch.rb +136 -0
  34. data/lib/rex/payloads/win32/kernel/stager.rb +26 -25
  35. data/lib/rex/post/meterpreter/client.rb +50 -60
  36. data/lib/rex/post/meterpreter/client_core.rb +18 -25
  37. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +102 -8
  38. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +24 -14
  39. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +18 -0
  40. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +1 -0
  41. data/lib/rex/post/meterpreter/packet_dispatcher.rb +1 -1
  42. data/lib/rex/post/meterpreter/ui/console.rb +1 -1
  43. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +43 -1
  44. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +1 -1
  45. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +9 -0
  46. data/lib/rex/proto/dcerpc/svcctl.rb +2 -0
  47. data/lib/rex/proto/dcerpc/svcctl/packet.rb +304 -0
  48. data/lib/rex/proto/kademlia.rb +8 -0
  49. data/lib/rex/proto/kademlia/bootstrap_request.rb +19 -0
  50. data/lib/rex/proto/kademlia/bootstrap_response.rb +79 -0
  51. data/lib/rex/proto/kademlia/message.rb +72 -0
  52. data/lib/rex/proto/kademlia/ping.rb +19 -0
  53. data/lib/rex/proto/kademlia/pong.rb +41 -0
  54. data/lib/rex/proto/kademlia/util.rb +22 -0
  55. data/lib/rex/proto/natpmp/packet.rb +30 -2
  56. data/lib/rex/proto/quake.rb +3 -0
  57. data/lib/rex/proto/quake/message.rb +73 -0
  58. data/lib/rex/proto/smb/client.rb +1 -0
  59. data/lib/rex/proto/smb/simpleclient.rb +4 -0
  60. data/lib/rex/proto/sunrpc/client.rb +14 -3
  61. data/lib/rex/socket/comm/local.rb +10 -7
  62. data/lib/rex/socket/ssl_tcp_server.rb +79 -40
  63. data/lib/rex/ui/text/input/readline.rb +33 -6
  64. data/lib/rex/ui/text/output/file.rb +2 -2
  65. data/lib/rex/ui/text/output/stdio.rb +70 -14
  66. data/rex.gemspec +1 -1
  67. metadata +38 -3
@@ -195,7 +195,7 @@ class Rex::Socket::Comm::Local
195
195
 
196
196
  rescue ::Errno::EADDRNOTAVAIL,::Errno::EADDRINUSE
197
197
  sock.close
198
- raise Rex::AddressInUse.new(param.localhost, param.localport), caller
198
+ raise Rex::BindFailed.new(param.localhost, param.localport), caller
199
199
  end
200
200
  end
201
201
 
@@ -291,19 +291,22 @@ class Rex::Socket::Comm::Local
291
291
  end
292
292
 
293
293
  sock.close
294
- raise Rex::HostUnreachable.new(param.peerhost, param.peerport), caller
294
+ raise Rex::HostUnreachable.new(ip, port), caller
295
295
 
296
296
  rescue ::Errno::EADDRNOTAVAIL,::Errno::EADDRINUSE
297
297
  sock.close
298
- raise Rex::AddressInUse.new(param.peerhost, param.peerport), caller
298
+ raise Rex::InvalidDestination.new(ip, port), caller
299
299
 
300
300
  rescue Errno::ETIMEDOUT
301
301
  sock.close
302
- raise Rex::ConnectionTimeout.new(param.peerhost, param.peerport), caller
302
+ raise Rex::ConnectionTimeout.new(ip, port), caller
303
303
 
304
304
  rescue ::Errno::ECONNRESET,::Errno::ECONNREFUSED,::Errno::ENOTCONN,::Errno::ECONNABORTED
305
305
  sock.close
306
- raise Rex::ConnectionRefused.new(param.peerhost, param.peerport), caller
306
+ # Report the actual thing we were trying to connect to here, not
307
+ # param.peerhost, since that's the eventual target at the end of the
308
+ # proxy chain
309
+ raise Rex::ConnectionRefused.new(ip, port.to_i), caller
307
310
  end
308
311
  end
309
312
 
@@ -378,9 +381,9 @@ class Rex::Socket::Comm::Local
378
381
  ni_packet << [route_data.length - 4].pack('N') + route_data
379
382
  # Now that we've built the whole packet, prepend its length before writing it to the wire
380
383
  ni_packet = [ni_packet.length].pack('N') + ni_packet
381
-
384
+
382
385
  size = sock.put(ni_packet)
383
-
386
+
384
387
  if size != ni_packet.length
385
388
  raise Rex::ConnectionProxyError.new(host, port, type, "Failed to send the entire request to the proxy"), caller
386
389
  end
@@ -99,6 +99,80 @@ module Rex::Socket::SslTcpServer
99
99
  end
100
100
  end
101
101
 
102
+ #
103
+ # Parse a certificate in unified PEM format that contains a private key and
104
+ # one or more certificates. The first certificate is the primary, while any
105
+ # additional certificates are treated as intermediary certificates. This emulates
106
+ # the behavior of web servers like nginx.
107
+ #
108
+ # @param [String] ssl_cert
109
+ # @return [String, String, Array]
110
+ def self.ssl_parse_pem(ssl_cert)
111
+ cert = nil
112
+ key = nil
113
+ chain = nil
114
+
115
+ certs = []
116
+ ssl_cert.scan(/-----BEGIN\s*[^\-]+-----+\r?\n[^\-]*-----END\s*[^\-]+-----\r?\n?/nm).each do |pem|
117
+ if pem =~ /PRIVATE KEY/
118
+ key = OpenSSL::PKey::RSA.new(pem)
119
+ elsif pem =~ /CERTIFICATE/
120
+ certs << OpenSSL::X509::Certificate.new(pem)
121
+ end
122
+ end
123
+
124
+ cert = certs.shift
125
+ if certs.length > 0
126
+ chain = certs
127
+ end
128
+
129
+ [key, cert, chain]
130
+ end
131
+
132
+ #
133
+ # Shim for the ssl_parse_pem module method
134
+ #
135
+ def ssl_parse_pem(ssl_cert)
136
+ Rex::Socket::SslTcpServer.ssl_parse_pem(ssl_cert)
137
+ end
138
+
139
+ #
140
+ # Generate a realistic-looking but obstensibly fake SSL
141
+ # certificate. This matches a typical "snakeoil" cert.
142
+ #
143
+ # @return [String, String, Array]
144
+ def self.ssl_generate_certificate
145
+ yr = 24*3600*365
146
+ vf = Time.at(Time.now.to_i - rand(yr * 3) - yr)
147
+ vt = Time.at(vf.to_i + (10 * yr))
148
+ cn = Rex::Text.rand_text_alpha_lower(rand(8)+2)
149
+ key = OpenSSL::PKey::RSA.new(2048){ }
150
+ cert = OpenSSL::X509::Certificate.new
151
+ cert.version = 2
152
+ cert.serial = (rand(0xFFFFFFFF) << 32) + rand(0xFFFFFFFF)
153
+ cert.subject = OpenSSL::X509::Name.new([["CN", cn]])
154
+ cert.issuer = OpenSSL::X509::Name.new([["CN", cn]])
155
+ cert.not_before = vf
156
+ cert.not_after = vt
157
+ cert.public_key = key.public_key
158
+
159
+ ef = OpenSSL::X509::ExtensionFactory.new(nil,cert)
160
+ cert.extensions = [
161
+ ef.create_extension("basicConstraints","CA:FALSE")
162
+ ]
163
+ ef.issuer_certificate = cert
164
+
165
+ cert.sign(key, OpenSSL::Digest::SHA256.new)
166
+
167
+ [key, cert, nil]
168
+ end
169
+
170
+ #
171
+ # Shim for the ssl_generate_certificate module method
172
+ #
173
+ def ssl_generate_certificate
174
+ Rex::Socket::SslTcpServer.ssl_generate_certificate
175
+ end
102
176
 
103
177
  #
104
178
  # Create a new ssl context. If +ssl_cert+ is not given, generates a new
@@ -107,54 +181,19 @@ module Rex::Socket::SslTcpServer
107
181
  # @param [Rex::Socket::Parameters] params
108
182
  # @return [::OpenSSL::SSL::SSLContext]
109
183
  def makessl(params)
110
- ssl_cert = params.ssl_cert
111
- if ssl_cert
112
- cert = OpenSSL::X509::Certificate.new(ssl_cert)
113
- key = OpenSSL::PKey::RSA.new(ssl_cert)
184
+
185
+ if params.ssl_cert
186
+ key, cert, chain = ssl_parse_pem(params.ssl_cert)
114
187
  else
115
- key = OpenSSL::PKey::RSA.new(1024){ }
116
- cert = OpenSSL::X509::Certificate.new
117
- cert.version = 2
118
- cert.serial = rand(0xFFFFFFFF)
119
- # name = OpenSSL::X509::Name.new([["C","JP"],["O","TEST"],["CN","localhost"]])
120
- subject = OpenSSL::X509::Name.new([
121
- ["C","US"],
122
- ['ST', Rex::Text.rand_state()],
123
- ["L", Rex::Text.rand_text_alpha(rand(20) + 10)],
124
- ["O", Rex::Text.rand_text_alpha(rand(20) + 10)],
125
- ["CN", Rex::Text.rand_hostname],
126
- ])
127
- issuer = OpenSSL::X509::Name.new([
128
- ["C","US"],
129
- ['ST', Rex::Text.rand_state()],
130
- ["L", Rex::Text.rand_text_alpha(rand(20) + 10)],
131
- ["O", Rex::Text.rand_text_alpha(rand(20) + 10)],
132
- ["CN", Rex::Text.rand_hostname],
133
- ])
134
-
135
- cert.subject = subject
136
- cert.issuer = issuer
137
- cert.not_before = Time.now - (3600 * 365)
138
- cert.not_after = Time.now + (3600 * 365)
139
- cert.public_key = key.public_key
140
- ef = OpenSSL::X509::ExtensionFactory.new(nil,cert)
141
- cert.extensions = [
142
- ef.create_extension("basicConstraints","CA:FALSE"),
143
- ef.create_extension("subjectKeyIdentifier","hash"),
144
- ef.create_extension("extendedKeyUsage","serverAuth"),
145
- ef.create_extension("keyUsage","keyEncipherment,dataEncipherment,digitalSignature")
146
- ]
147
- ef.issuer_certificate = cert
148
- cert.add_extension ef.create_extension("authorityKeyIdentifier", "keyid:always,issuer:always")
149
- cert.sign(key, OpenSSL::Digest::SHA1.new)
188
+ key, cert, chain = ssl_generate_certificate
150
189
  end
151
190
 
152
191
  ctx = OpenSSL::SSL::SSLContext.new()
153
192
  ctx.key = key
154
193
  ctx.cert = cert
194
+ ctx.extra_chain_cert = chain
155
195
  ctx.options = 0
156
196
 
157
-
158
197
  # Older versions of OpenSSL do not export the OP_NO_COMPRESSION symbol
159
198
  if defined?(OpenSSL::SSL::OP_NO_COMPRESSION)
160
199
  # enable/disable the SSL/TLS-level compression
@@ -20,11 +20,7 @@ begin
20
20
  #
21
21
  def initialize(tab_complete_proc = nil)
22
22
  if(not Object.const_defined?('Readline'))
23
- begin
24
- require 'readline'
25
- rescue ::LoadError
26
- require 'readline_compatible'
27
- end
23
+ require 'readline'
28
24
  end
29
25
 
30
26
  self.extend(::Readline)
@@ -87,7 +83,7 @@ begin
87
83
  Thread.current.priority = -20
88
84
 
89
85
  output.prompting
90
- line = ::Readline.readline(prompt, true)
86
+ line = readline_with_output(prompt, true)
91
87
  ::Readline::HISTORY.pop if (line and line.empty?)
92
88
  ensure
93
89
  Thread.current.priority = orig || 0
@@ -120,6 +116,37 @@ begin
120
116
  #
121
117
  attr_accessor :output
122
118
 
119
+ private
120
+
121
+ def readline_with_output(prompt, add_history=false)
122
+ # rb-readlines's Readline.readline hardcodes the input and output to $stdin and $stdout, which means setting
123
+ # `Readline.input` or `Readline.ouput` has no effect when running `Readline.readline` with rb-readline, so need
124
+ # to reimplement []`Readline.readline`](https://github.com/luislavena/rb-readline/blob/ce4908dae45dbcae90a6e42e3710b8c3a1f2cd64/lib/readline.rb#L36-L58)
125
+ # for rb-readline to support setting input and output. Output needs to be set so that colorization works for the
126
+ # prompt on Windows.
127
+ if defined? RbReadline
128
+ RbReadline.rl_instream = fd
129
+ RbReadline.rl_outstream = output
130
+
131
+ begin
132
+ line = RbReadline.readline(prompt)
133
+ rescue ::Exception => exception
134
+ RbReadline.rl_cleanup_after_signal()
135
+ RbReadline.rl_deprep_terminal()
136
+
137
+ raise exception
138
+ end
139
+
140
+ if add_history && line
141
+ RbReadline.add_history(line)
142
+ end
143
+
144
+ line.try(:dup)
145
+ else
146
+ ::Readline.readline(prompt, true)
147
+ end
148
+ end
149
+
123
150
  end
124
151
  rescue LoadError
125
152
  end
@@ -14,8 +14,8 @@ class Output::File < Rex::Ui::Text::Output
14
14
 
15
15
  attr_accessor :fd
16
16
 
17
- def initialize(path)
18
- self.fd = ::File.open(path, "wb")
17
+ def initialize(path, mode='wb')
18
+ self.fd = ::File.open(path, mode)
19
19
  end
20
20
 
21
21
  def supports_color?
@@ -16,6 +16,76 @@ module Text
16
16
  #
17
17
  ###
18
18
  class Output::Stdio < Rex::Ui::Text::Output
19
+ #
20
+ # Attributes
21
+ #
22
+
23
+ # @!attribute io
24
+ # The raw `IO` backing this Text output. Defaults to `$stdout`
25
+ #
26
+ # @return [#flush, #puts, #write]
27
+ attr_writer :io
28
+
29
+ #
30
+ # Constructor
31
+ #
32
+
33
+ # @param options [Hash{Symbol => IO}]
34
+ # @option options [IO]
35
+ def initialize(options={})
36
+ options.assert_valid_keys(:io)
37
+
38
+ super()
39
+
40
+ self.io = options[:io]
41
+ end
42
+
43
+ #
44
+ # Methods
45
+ #
46
+
47
+ def flush
48
+ io.flush
49
+ end
50
+
51
+ # IO to write to.
52
+ #
53
+ # @return [IO] Default to `$stdout`
54
+ def io
55
+ @io ||= $stdout
56
+ end
57
+
58
+ #
59
+ # Prints the supplied message to standard output.
60
+ #
61
+ def print_raw(msg = '')
62
+ if (Rex::Compat.is_windows and supports_color?)
63
+ WindowsConsoleColorSupport.new(io).write(msg)
64
+ else
65
+ io.print(msg)
66
+ end
67
+
68
+ io.flush
69
+
70
+ msg
71
+ end
72
+ alias_method :write, :print_raw
73
+
74
+ def puts(*args)
75
+ args.each do |argument|
76
+ line = argument.to_s
77
+ write(line)
78
+
79
+ unless line.ends_with? "\n"
80
+ # yes, this is output, but `IO#puts` uses `rb_default_rs`, which is
81
+ # [`$/`](https://github.com/ruby/ruby/blob/3af8e150aded9d162bfd41426aaaae0279e5a653/io.c#L12168-L12172),
82
+ # which is [`$INPUT_RECORD_SEPARATOR`](https://github.com/ruby/ruby/blob/3af8e150aded9d162bfd41426aaaae0279e5a653/lib/English.rb#L83)
83
+ write($INPUT_RECORD_SEPARATOR)
84
+ end
85
+ end
86
+
87
+ nil
88
+ end
19
89
 
20
90
  def supports_color?
21
91
  case config[:color]
@@ -31,20 +101,6 @@ class Output::Stdio < Rex::Ui::Text::Output
31
101
  return (term and term.match(/(?:vt10[03]|xterm(?:-color)?|linux|screen|rxvt)/i) != nil)
32
102
  end
33
103
  end
34
-
35
- #
36
- # Prints the supplied message to standard output.
37
- #
38
- def print_raw(msg = '')
39
- if (Rex::Compat.is_windows and supports_color?)
40
- WindowsConsoleColorSupport.new($stdout).write(msg)
41
- else
42
- $stdout.print(msg)
43
- end
44
- $stdout.flush
45
-
46
- msg
47
- end
48
104
  end
49
105
 
50
106
  end
data/rex.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  APP_NAME = "rex"
4
- VERSION = "2.0.4"
4
+ VERSION = "2.0.5"
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = APP_NAME
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rex
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - HD Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-15 00:00:00.000000000 Z
12
+ date: 2014-12-22 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Rex provides a variety of classes useful for security testing and exploit
15
15
  development.
@@ -32,6 +32,7 @@ files:
32
32
  - lib/rex/codepage.map
33
33
  - lib/rex/compat.rb
34
34
  - lib/rex/constants.rb
35
+ - lib/rex/constants/windows.rb
35
36
  - lib/rex/elfparsey.rb
36
37
  - lib/rex/elfparsey/elf.rb
37
38
  - lib/rex/elfparsey/elfbase.rb
@@ -107,6 +108,27 @@ files:
107
108
  - lib/rex/io/stream.rb
108
109
  - lib/rex/io/stream_abstraction.rb
109
110
  - lib/rex/io/stream_server.rb
111
+ - lib/rex/java.rb
112
+ - lib/rex/java/serialization.rb
113
+ - lib/rex/java/serialization/model.rb
114
+ - lib/rex/java/serialization/model/annotation.rb
115
+ - lib/rex/java/serialization/model/block_data.rb
116
+ - lib/rex/java/serialization/model/block_data_long.rb
117
+ - lib/rex/java/serialization/model/class_desc.rb
118
+ - lib/rex/java/serialization/model/contents.rb
119
+ - lib/rex/java/serialization/model/element.rb
120
+ - lib/rex/java/serialization/model/end_block_data.rb
121
+ - lib/rex/java/serialization/model/field.rb
122
+ - lib/rex/java/serialization/model/long_utf.rb
123
+ - lib/rex/java/serialization/model/new_array.rb
124
+ - lib/rex/java/serialization/model/new_class_desc.rb
125
+ - lib/rex/java/serialization/model/new_enum.rb
126
+ - lib/rex/java/serialization/model/new_object.rb
127
+ - lib/rex/java/serialization/model/null_reference.rb
128
+ - lib/rex/java/serialization/model/reference.rb
129
+ - lib/rex/java/serialization/model/reset.rb
130
+ - lib/rex/java/serialization/model/stream.rb
131
+ - lib/rex/java/serialization/model/utf.rb
110
132
  - lib/rex/job_container.rb
111
133
  - lib/rex/logging.rb
112
134
  - lib/rex/logging/log_dispatcher.rb
@@ -173,6 +195,8 @@ files:
173
195
  - lib/rex/parser/unattend.rb
174
196
  - lib/rex/parser/wapiti_nokogiri.rb
175
197
  - lib/rex/payloads.rb
198
+ - lib/rex/payloads/meterpreter.rb
199
+ - lib/rex/payloads/meterpreter/patch.rb
176
200
  - lib/rex/payloads/win32.rb
177
201
  - lib/rex/payloads/win32/common.rb
178
202
  - lib/rex/payloads/win32/kernel.rb
@@ -354,6 +378,8 @@ files:
354
378
  - lib/rex/proto/dcerpc/ndr.rb
355
379
  - lib/rex/proto/dcerpc/packet.rb
356
380
  - lib/rex/proto/dcerpc/response.rb
381
+ - lib/rex/proto/dcerpc/svcctl.rb
382
+ - lib/rex/proto/dcerpc/svcctl/packet.rb
357
383
  - lib/rex/proto/dcerpc/uuid.rb
358
384
  - lib/rex/proto/dcerpc/wdscp.rb
359
385
  - lib/rex/proto/dcerpc/wdscp/constants.rb
@@ -389,6 +415,13 @@ files:
389
415
  - lib/rex/proto/ipmi/open_session_reply.rb
390
416
  - lib/rex/proto/ipmi/rakp2.rb
391
417
  - lib/rex/proto/ipmi/utils.rb
418
+ - lib/rex/proto/kademlia.rb
419
+ - lib/rex/proto/kademlia/bootstrap_request.rb
420
+ - lib/rex/proto/kademlia/bootstrap_response.rb
421
+ - lib/rex/proto/kademlia/message.rb
422
+ - lib/rex/proto/kademlia/ping.rb
423
+ - lib/rex/proto/kademlia/pong.rb
424
+ - lib/rex/proto/kademlia/util.rb
392
425
  - lib/rex/proto/natpmp.rb
393
426
  - lib/rex/proto/natpmp/constants.rb
394
427
  - lib/rex/proto/natpmp/packet.rb
@@ -405,6 +438,8 @@ files:
405
438
  - lib/rex/proto/pjl.rb
406
439
  - lib/rex/proto/pjl/client.rb
407
440
  - lib/rex/proto/proxy/socks4a.rb
441
+ - lib/rex/proto/quake.rb
442
+ - lib/rex/proto/quake/message.rb
408
443
  - lib/rex/proto/rfb.rb
409
444
  - lib/rex/proto/rfb/cipher.rb
410
445
  - lib/rex/proto/rfb/client.rb
@@ -531,7 +566,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
531
566
  version: '0'
532
567
  requirements: []
533
568
  rubyforge_project:
534
- rubygems_version: 2.2.2
569
+ rubygems_version: 2.4.3
535
570
  signing_key:
536
571
  specification_version: 4
537
572
  summary: Ruby Exploitation Library