ronin-exploits 0.2.0 → 0.2.1

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 (66) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +27 -0
  3. data/Manifest.txt +21 -5
  4. data/README.txt +40 -3
  5. data/Rakefile +6 -6
  6. data/TODO.txt +12 -9
  7. data/lib/ronin/exploits/allow.rb +1 -1
  8. data/lib/ronin/{targeted_arch.rb → exploits/arch.rb} +1 -5
  9. data/lib/ronin/exploits/exploit.rb +59 -144
  10. data/lib/ronin/exploits/ftp.rb +4 -1
  11. data/lib/ronin/exploits/helpers.rb +1 -0
  12. data/lib/ronin/exploits/helpers/file_based.rb +113 -0
  13. data/lib/ronin/exploits/http.rb +10 -0
  14. data/lib/ronin/exploits/license.rb +34 -0
  15. data/lib/ronin/exploits/os.rb +34 -0
  16. data/lib/ronin/{targeted_product.rb → exploits/product.rb} +1 -1
  17. data/lib/ronin/exploits/remote_tcp.rb +2 -3
  18. data/lib/ronin/exploits/remote_udp.rb +2 -3
  19. data/lib/ronin/exploits/target.rb +8 -10
  20. data/lib/ronin/exploits/verifiers.rb +92 -0
  21. data/lib/ronin/exploits/version.rb +1 -1
  22. data/lib/ronin/exploits/web.rb +21 -1
  23. data/lib/ronin/model/has_default_port.rb +54 -0
  24. data/lib/ronin/model/targets_arch.rb +8 -10
  25. data/lib/ronin/model/targets_os.rb +9 -9
  26. data/lib/ronin/payloads.rb +1 -0
  27. data/lib/ronin/payloads/arch.rb +32 -0
  28. data/lib/ronin/payloads/asm_payload.rb +34 -0
  29. data/lib/ronin/payloads/encoder.rb +24 -18
  30. data/lib/ronin/payloads/helpers/exceptions.rb +2 -1
  31. data/lib/ronin/payloads/helpers/exceptions/{unimplemented.rb → not_implemented.rb} +1 -1
  32. data/lib/ronin/payloads/helpers/file_system.rb +12 -12
  33. data/lib/ronin/payloads/helpers/rpc.rb +7 -7
  34. data/lib/ronin/payloads/helpers/shell.rb +2 -2
  35. data/lib/ronin/payloads/license.rb +34 -0
  36. data/lib/ronin/payloads/nops.rb +3 -1
  37. data/lib/ronin/{targeted_os.rb → payloads/os.rb} +1 -5
  38. data/lib/ronin/payloads/payload.rb +89 -41
  39. data/lib/ronin/payloads/shellcode.rb +4 -1
  40. data/lib/ronin/ui/command_line/commands/exploits.rb +1 -1
  41. data/lib/ronin/ui/command_line/commands/payload.rb +2 -2
  42. data/lib/ronin/ui/command_line/commands/payloads.rb +1 -1
  43. data/spec/exploits/exploit_spec.rb +12 -30
  44. data/spec/exploits/file_based_exploit_spec.rb +39 -0
  45. data/spec/exploits/ftp_spec.rb +1 -5
  46. data/spec/exploits/http_spec.rb +4 -4
  47. data/spec/exploits/remote_tcp_spec.rb +7 -3
  48. data/spec/exploits/remote_udp_spec.rb +7 -3
  49. data/spec/exploits/target_spec.rb +9 -2
  50. data/spec/exploits/targets/buffer_overflow_spec.rb +6 -2
  51. data/spec/exploits/web_spec.rb +6 -0
  52. data/spec/model/has_default_port_spec.rb +27 -0
  53. data/spec/model/models/default_port_model.rb +13 -0
  54. data/spec/model/models/non_default_port_model.rb +11 -0
  55. data/spec/model/models/targets_arch_model.rb +11 -0
  56. data/spec/model/models/targets_os_model.rb +11 -0
  57. data/spec/model/targets_arch_spec.rb +22 -0
  58. data/spec/model/targets_os_spec.rb +23 -0
  59. data/spec/objects/exploits/example.rb +25 -0
  60. data/spec/objects/exploits/test.rb +0 -4
  61. data/spec/objects/payloads/test.rb +5 -1
  62. data/spec/payloads/encoder_spec.rb +5 -1
  63. data/spec/payloads/payload_spec.rb +77 -14
  64. metadata +58 -13
  65. metadata.gz.sig +0 -0
  66. data/spec/objects/payloads/example.rb +0 -19
Binary file
@@ -1,3 +1,30 @@
1
+ === 0.2.1 / 2009-07-02
2
+
3
+ * Use Hoe >= 2.0.0.
4
+ * Require ronin >= 0.2.4.
5
+ * Added Ronin::Model::TargetsArch.
6
+ * Added Ronin::Model::TargetsOS.
7
+ * Added Ronin::Mode::HasDefaultPort.
8
+ * Added Exploit#deployed?.
9
+ * Added Exploit#inspect.
10
+ * Added Exploits::Helpers::FileBased.
11
+ * Added Exploits::Web#http_method.
12
+ * Added Exploits::Web#targeted_url_path.
13
+ * Added Payload#inspect.
14
+ * Added Payload#call method.
15
+ * Renamed Exploit#exploit to Exploit#call.
16
+ * Renamed Payloads::Helpers::Unimplemented to
17
+ Payloads::Helpers::NotImplemented.
18
+ * Renamed RPC#call to RPC#call_method.
19
+ * Removed Exploit#switch_payload.
20
+ * Moved verifier methods into Exploits::Verifiers.
21
+ * Allow Exploit#allow to accept multiple behaviors.
22
+ * Include UI::Diagnostics into Ronin::Exploits::Exploit.
23
+ * Include Sessions::HTTP into Exploits::Web.
24
+ * Include UI::Diagnostics into Ronin::Payloads::Payload.
25
+ * Allow Payload#controlling to accept multiple behaviors.
26
+ * Added more specs.
27
+
1
28
  === 0.2.0 / 2009-04-11
2
29
 
3
30
  * Added Ronin::TargetedArch.
@@ -7,9 +7,7 @@ TODO.txt
7
7
  bin/ronin-payload
8
8
  bin/ronin-payloads
9
9
  bin/ronin-exploits
10
- lib/ronin/targeted_arch.rb
11
- lib/ronin/targeted_os.rb
12
- lib/ronin/targeted_product.rb
10
+ lib/ronin/model/has_default_port.rb
13
11
  lib/ronin/model/targets_arch.rb
14
12
  lib/ronin/model/targets_os.rb
15
13
  lib/ronin/vuln/behavior.rb
@@ -21,7 +19,13 @@ lib/ronin/exploits/exceptions/target_data_missing.rb
21
19
  lib/ronin/exploits/exceptions/exploit_not_built.rb
22
20
  lib/ronin/exploits/exceptions/restricted_char.rb
23
21
  lib/ronin/exploits/exceptions/payload_size.rb
22
+ lib/ronin/exploits/arch.rb
23
+ lib/ronin/exploits/os.rb
24
+ lib/ronin/exploits/license.rb
25
+ lib/ronin/exploits/product.rb
26
+ lib/ronin/exploits/verifiers.rb
24
27
  lib/ronin/exploits/helpers.rb
28
+ lib/ronin/exploits/helpers/file_based.rb
25
29
  lib/ronin/exploits/helpers/binary.rb
26
30
  lib/ronin/exploits/helpers/padding.rb
27
31
  lib/ronin/exploits/helpers/buffer_overflow.rb
@@ -44,12 +48,15 @@ lib/ronin/exploits/version.rb
44
48
  lib/ronin/payloads.rb
45
49
  lib/ronin/payloads/exceptions.rb
46
50
  lib/ronin/payloads/exceptions/unknown_helper.rb
51
+ lib/ronin/payloads/license.rb
52
+ lib/ronin/payloads/arch.rb
53
+ lib/ronin/payloads/os.rb
47
54
  lib/ronin/payloads/encoder.rb
48
55
  lib/ronin/payloads/encoders.rb
49
56
  lib/ronin/payloads/encoders/xor.rb
50
57
  lib/ronin/payloads/helpers.rb
51
58
  lib/ronin/payloads/helpers/exceptions.rb
52
- lib/ronin/payloads/helpers/exceptions/unimplemented.rb
59
+ lib/ronin/payloads/helpers/exceptions/not_implemented.rb
53
60
  lib/ronin/payloads/helpers/exceptions/program_not_found.rb
54
61
  lib/ronin/payloads/helpers/file_system.rb
55
62
  lib/ronin/payloads/helpers/shell.rb
@@ -58,6 +65,7 @@ lib/ronin/payloads/control.rb
58
65
  lib/ronin/payloads/payload_author.rb
59
66
  lib/ronin/payloads/payload.rb
60
67
  lib/ronin/payloads/binary_payload.rb
68
+ lib/ronin/payloads/asm_payload.rb
61
69
  lib/ronin/payloads/nops.rb
62
70
  lib/ronin/payloads/shellcode.rb
63
71
  lib/ronin/payloads/web_payload.rb
@@ -69,9 +77,16 @@ spec/spec_helper.rb
69
77
  spec/helpers/database.rb
70
78
  spec/helpers/objects.rb
71
79
  spec/objects/exploits/test.rb
80
+ spec/objects/exploits/example.rb
72
81
  spec/objects/payloads/test.rb
73
- spec/objects/payloads/example.rb
74
82
  spec/exploits_spec.rb
83
+ spec/model/models/default_port_model.rb
84
+ spec/model/models/non_default_port_model.rb
85
+ spec/model/models/targets_arch_model.rb
86
+ spec/model/models/targets_os_model.rb
87
+ spec/model/has_default_port_spec.rb
88
+ spec/model/targets_arch_spec.rb
89
+ spec/model/targets_os_spec.rb
75
90
  spec/vuln/behavior_spec.rb
76
91
  spec/exploits/targets/buffer_overflow_spec.rb
77
92
  spec/exploits/target_spec.rb
@@ -81,6 +96,7 @@ spec/exploits/remote_udp_spec.rb
81
96
  spec/exploits/ftp_spec.rb
82
97
  spec/exploits/http_spec.rb
83
98
  spec/exploits/web_spec.rb
99
+ spec/exploits/file_based_exploit_spec.rb
84
100
  spec/exploits/binary_exploit_spec.rb
85
101
  spec/exploits/padding_exploit_spec.rb
86
102
  spec/exploits/buffer_overflow_exploit_spec.rb
data/README.txt CHANGED
@@ -71,32 +71,51 @@ of Ronin.
71
71
  * Define a shellcode payload:
72
72
 
73
73
  ronin_shellcode do
74
+ #
75
+ # Cacheable data.
76
+ #
74
77
  cache do
75
78
  self.name = 'test'
76
79
  self.version = '0.5'
80
+ self.description = %{This is an example shellcode payload.}
81
+
82
+ author(:name => 'Postmodern', :organization => 'SophSec')
77
83
 
78
84
  self.arch :i686
79
85
  self.os :name => 'Linux'
80
86
  end
81
87
 
88
+ #
89
+ # Configurable parameters.
90
+ #
82
91
  parameter :exit_status,
83
92
  :default => 0,
84
93
  :description => 'Exit status of shellcode'
85
94
 
95
+ #
96
+ # Builds the assembly payload, which will call the SYS_EXIT
97
+ # syscall with the exit_status of the shellcode.
98
+ #
86
99
  def build
87
100
  @payload = "\x66\x31\xc0\xfe\xc0"
88
101
 
89
- unless @exit_status == 0
90
- @payload << "\xb3#{@exit_status.chr}\xcd\x80"
102
+ unless @exit_status == 0
103
+ @payload << "\xb3#{@exit_status.chr}"
91
104
  else
92
- @payload << "\x66\x31\xdb\xcd\x80"
105
+ @payload << "\x66\x31\xdb"
93
106
  end
107
+
108
+ @payload << "\xcd\x80"
109
+ return @payload
94
110
  end
95
111
  end
96
112
 
97
113
  * Define a payload encoder:
98
114
 
99
115
  ronin_payload_encoder do
116
+ #
117
+ # Cacheable data.
118
+ #
100
119
  cache do
101
120
  self.name = 'base64_encode'
102
121
  self.description = %{Example base64 payload encoder}
@@ -105,6 +124,9 @@ of Ronin.
105
124
  self.os :name => 'Linux'
106
125
  end
107
126
 
127
+ #
128
+ # Base64 encodes the specified _data_.
129
+ #
108
130
  def call(data)
109
131
  return data.to_s.base64_encode
110
132
  end
@@ -115,8 +137,17 @@ of Ronin.
115
137
  ronin_remote_tcp_exploit do
116
138
  helper :buffer_overflow
117
139
 
140
+ #
141
+ # Cacheable data.
142
+ #
118
143
  cache do
119
144
  self.name = 'test'
145
+ self.description = %{This is an example exploit.}
146
+
147
+ self.status = :potential
148
+ self.disclosure = [:in_wild, :public]
149
+
150
+ author(:name => 'Postmodern', :organization => 'SophSec')
120
151
 
121
152
  targeting do |target|
122
153
  target.arch :i686
@@ -125,10 +156,16 @@ of Ronin.
125
156
  end
126
157
  end
127
158
 
159
+ #
160
+ # Builds the exploit.
161
+ #
128
162
  def build
129
163
  @buffer = "USER #{build_buffer}\n"
130
164
  end
131
165
 
166
+ #
167
+ # Deploys the built exploit.
168
+ #
132
169
  def deploy
133
170
  tcp_send @buffer
134
171
  end
data/Rakefile CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'hoe'
5
+ require 'hoe/signing'
5
6
  require './tasks/spec.rb'
6
- require './lib/ronin/exploits/version.rb'
7
7
 
8
- Hoe.new('ronin-exploits', Ronin::Exploits::VERSION) do |p|
9
- p.rubyforge_name = 'ronin'
10
- p.developer('Postmodern', 'postmodern.mod3@gmail.com')
11
- p.remote_rdoc_dir = 'docs/ronin-exploits'
12
- p.extra_deps = [['ronin', '>=0.2.3']]
8
+ Hoe.spec('ronin-exploits') do
9
+ self.rubyforge_name = 'ronin'
10
+ self.developer('Postmodern', 'postmodern.mod3@gmail.com')
11
+ self.remote_rdoc_dir = 'docs/ronin-exploits'
12
+ self.extra_deps = [['ronin', '>=0.2.4']]
13
13
  end
14
14
 
15
15
  # vim: syntax=Ruby
data/TODO.txt CHANGED
@@ -1,16 +1,19 @@
1
1
  == TODO:
2
2
 
3
- === Ronin Exploits 0.1.1:
3
+ === Ronin Exploits 0.2.1:
4
4
 
5
- * Add more dm-scope methods for finding exploits and payloads based:
6
- * Target attributes:
7
- * Arch (name).
8
- * OS (name, version).
9
- * Authors
10
- * Spec exploit/payload relations and dm-scope methods.
11
- * Add methods for chaining exploits.
5
+ * Integreate with DataMapper 0.10.0.
12
6
 
13
- === Ronin Exploits 0.2.0:
7
+ === Ronin Exploits 0.2.2:
8
+
9
+ * Move RPC code out of ronin and into ronin-exploits:
10
+ * Define base XMLRPC Client, Call and Response classes.
11
+ * Define base JSONRPC Client, Call and Response classes.
12
+ * Prepare Ronin::Payloads::Payload to use RPC.
13
+ * Add top-level methods to Ronin::Exploits and Ronin::Payloads:
14
+ * Goal: Deploy an exploit/payload in one-line of code.
15
+
16
+ === Longterm:
14
17
 
15
18
  * Design a basic Vulnerability Scanner class:
16
19
  * Scan networks of hosts.
@@ -38,7 +38,7 @@ module Ronin
38
38
  # The behavior which is allowed
39
39
  belongs_to :behavior,
40
40
  :child_key => [:behavior_id],
41
- :class_name => '::Ronin::Vuln::Behavior'
41
+ :class_name => 'Ronin::Vuln::Behavior'
42
42
 
43
43
  # The exploit which facilitates the behavior
44
44
  belongs_to :exploit
@@ -24,15 +24,11 @@
24
24
  require 'ronin/arch'
25
25
 
26
26
  module Ronin
27
- class TargetedArch < Arch
27
+ class Arch
28
28
 
29
29
  # The exploit targets for the Arch
30
30
  has n, :targets,
31
31
  :class_name => 'Ronin::Exploits::Target'
32
32
 
33
- # The payloads which target the Arch
34
- has n, :payloads,
35
- :class_name => 'Ronin::Payloads::Payload'
36
-
37
33
  end
38
34
  end
@@ -26,13 +26,18 @@ require 'ronin/exploits/exceptions/target_unspecified'
26
26
  require 'ronin/exploits/exceptions/target_data_missing'
27
27
  require 'ronin/exploits/exceptions/restricted_char'
28
28
  require 'ronin/exploits/exceptions/exploit_not_built'
29
+ require 'ronin/exploits/license'
30
+ require 'ronin/exploits/verifiers'
29
31
  require 'ronin/exploits/exploit_author'
30
32
  require 'ronin/exploits/target'
31
33
  require 'ronin/exploits/allow'
32
- require 'ronin/payloads/payload'
33
34
  require 'ronin/vuln/behavior'
34
35
  require 'ronin/cacheable'
35
- require 'ronin/has_license'
36
+ require 'ronin/model/has_name'
37
+ require 'ronin/model/has_description'
38
+ require 'ronin/model/has_version'
39
+ require 'ronin/model/has_license'
40
+ require 'ronin/ui/diagnostics'
36
41
 
37
42
  require 'parameters'
38
43
  require 'chars/char_set'
@@ -43,22 +48,18 @@ module Ronin
43
48
 
44
49
  include Parameters
45
50
  include Cacheable
46
- include HasLicense
51
+ include Model::HasName
52
+ include Model::HasDescription
53
+ include Model::HasVersion
54
+ include Model::HasLicense
55
+ include UI::Diagnostics
56
+ include Verifiers
47
57
 
48
58
  contextify :ronin_exploit
49
59
 
50
60
  # Primary key of the exploit
51
61
  property :id, Serial
52
62
 
53
- # Name of the exploit
54
- property :name, String, :index => true
55
-
56
- # Version of the exploit
57
- property :version, String, :default => '0.1', :index => true
58
-
59
- # Description of the exploit
60
- property :description, Text
61
-
62
63
  # The status of the exploit (either, :potential, :proven or
63
64
  # :weaponized)
64
65
  property :status, Enum[
@@ -110,8 +111,11 @@ module Ronin
110
111
  def initialize(attributes={},&block)
111
112
  super(attributes)
112
113
 
114
+ initialize_params(attributes)
115
+
113
116
  @target = nil
114
117
  @built = false
118
+ @deployed = false
115
119
 
116
120
  @restricted_chars = Chars::CharSet.new
117
121
  @encoders = []
@@ -119,28 +123,6 @@ module Ronin
119
123
  instance_eval(&block) if block
120
124
  end
121
125
 
122
- #
123
- # Finds all exploits with names like the specified _name_.
124
- #
125
- def self.named(name)
126
- self.all(:name.like => "%#{name}%")
127
- end
128
-
129
- #
130
- # Finds all exploits with descriptions like the specified
131
- # _description_.
132
- #
133
- def self.describing(description)
134
- self.all(:description.like => "%#{description}%")
135
- end
136
-
137
- #
138
- # Finds the exploit with the most recent vesion.
139
- #
140
- def self.latest
141
- self.first(:order => [:version.desc])
142
- end
143
-
144
126
  #
145
127
  # Adds an ExploitAuthor with the given _attributes_ to the exploit.
146
128
  # If a _block_ is given, it will be passed to the newly created
@@ -155,12 +137,14 @@ module Ronin
155
137
  end
156
138
 
157
139
  #
158
- # Adds a new Allow object granting the specified _behavior_.
140
+ # Adds a new Allow object granting the specified _behaviors_.
159
141
  #
160
- # allowing :code_exec
142
+ # allowing :code_exec, :auth_bypass
161
143
  #
162
- def allowing(behavior)
163
- self.allows << Allow.new(:behavior => Vuln::Behavior[behavior])
144
+ def allowing(*behaviors)
145
+ behaviors.each do |behavior|
146
+ self.allows << Allow.new(:behavior => Vuln::Behavior[behavior])
147
+ end
164
148
  end
165
149
 
166
150
  #
@@ -260,37 +244,14 @@ module Ronin
260
244
  end
261
245
 
262
246
  #
263
- # Switches to the _new_payload_ then calls the specified _block_.
264
- # After the _block_ has been called the payload will be reverted to
265
- # it's previous value.
266
- #
267
- def switch_payload(new_payload,&block)
268
- old_payload = @payload
269
- @payload = new_payload
270
-
271
- block.call(self)
272
-
273
- @payload = old_payload
274
- return self
275
- end
276
-
277
- #
278
- # Builds and encodes the current payload, returning the encoded
279
- # payload in String form.
247
+ # Encodes the current payload, returning the encoded payload in
248
+ # String form.
280
249
  #
281
250
  def encode_payload!
282
251
  @encoded_payload = ''
283
252
 
284
253
  if @payload
285
- if @payload.class.include?(Parameters)
286
- @payload.params = self.params
287
- end
288
-
289
- if @payload.kind_of?(Payloads::Payload)
290
- @encoded_payload = @payload.build!
291
- else
292
- @encoded_payload = @payload.to_s
293
- end
254
+ @encoded_payload = @payload.to_s
294
255
 
295
256
  @encoders.each do |encoder|
296
257
  if (new_payload = encoder.call(@encoded_payload))
@@ -317,7 +278,7 @@ module Ronin
317
278
  #
318
279
  def build!(options={})
319
280
  if options[:payload]
320
- @payload ||= options.delete(:payload)
281
+ @payload = options.delete(:payload)
321
282
  end
322
283
 
323
284
  self.params = options
@@ -346,30 +307,37 @@ module Ronin
346
307
  end
347
308
 
348
309
  #
349
- # Deploys the exploit. If a _block_ is given and the payload used is
350
- # a kind of Payload, then the payloads deploy method will be passed
351
- # the given _block_. If the payload used is not a kind of Payload and
352
- # a _block_ is given, the _block_ will be passed to the exploits
353
- # deploy method. If the exploit has not been previously built, an
354
- # ExploitNotBuilt exception will be raised.
310
+ # Returns +true+ if the exploit has previously been deployed, returns
311
+ # +false+ otherwise.
312
+ #
313
+ def deployed?
314
+ @deployed == true
315
+ end
316
+
317
+ #
318
+ # Verifies then deploys the exploit with the given _block_. If a
319
+ # _block_ is given, it will be passed the deployed exploit. If the
320
+ # exploit has not been previously built, an ExploitNotBuilt exception
321
+ # will be raised.
355
322
  #
356
323
  def deploy!(&block)
357
324
  verify!
358
325
 
359
- if @payload.kind_of?(Payloads::Payload)
360
- deploy()
326
+ @deployed = false
361
327
 
362
- return @payload.deploy!(&block)
363
- else
364
- return deploy(&block)
365
- end
328
+ deploy()
329
+
330
+ @deployed = true
331
+
332
+ block.call(self) if block
333
+ return self
366
334
  end
367
335
 
368
336
  #
369
337
  # Builds the exploit with the given _options_, then deploys the
370
338
  # exploit with the given _block_.
371
339
  #
372
- def exploit!(options={},&block)
340
+ def call(options={},&block)
373
341
  build!(options)
374
342
 
375
343
  return deploy!(&block)
@@ -382,6 +350,16 @@ module Ronin
382
350
  "#{self.name} #{self.version}"
383
351
  end
384
352
 
353
+ #
354
+ # Inspects the contents of the exploit.
355
+ #
356
+ def inspect
357
+ str = "#{self.class}: #{self}"
358
+ str << " #{self.params.inspect}" unless self.params.empty?
359
+
360
+ return "#<#{str}>"
361
+ end
362
+
385
363
  protected
386
364
 
387
365
  #
@@ -399,7 +377,9 @@ module Ronin
399
377
 
400
378
  begin
401
379
  require File.join('ronin','exploits','helpers',name)
402
- rescue LoadError
380
+ rescue Gem::LoadError => e
381
+ raise(e)
382
+ rescue ::LoadError
403
383
  raise(UnknownHelper,"unknown helper #{name.dump}",caller)
404
384
  end
405
385
 
@@ -417,55 +397,6 @@ module Ronin
417
397
  return true
418
398
  end
419
399
 
420
- #
421
- # Verifies that a target has been selected. If a target has not been
422
- # selected, a TargetUnspecified exception will be raised, otherwise
423
- # +true+ will be returned.
424
- #
425
- def verify_target!
426
- if target.nil?
427
- raise(TargetUnspecified,"no suitable target provided",caller)
428
- end
429
-
430
- return true
431
- end
432
-
433
- #
434
- # Verifies that the selected target has an arch property.
435
- # If the selected target does not have an arch property, a
436
- # TargetDataMissing exception will be raised, otherwise
437
- # +true+ will be return.
438
- #
439
- def verify_arch!
440
- if arch.nil?
441
- raise(TargetDataMissing,"no suitable arch was provided",caller)
442
- end
443
- end
444
-
445
- #
446
- # Verifies that the selected target has an os property.
447
- # If the selected target does not have an os property, a
448
- # TargetDataMissing exception will be raised, otherwise
449
- # +true+ will be return.
450
- #
451
- def verify_os!
452
- if os.nil?
453
- raise(TargetDataMissing,"no suitable os was provided",caller)
454
- end
455
- end
456
-
457
- #
458
- # Verifies that the selected target has an product property.
459
- # If the selected target does not have an product property, a
460
- # TargetDataMissing exception will be raised, otherwise
461
- # +true+ will be return.
462
- #
463
- def verify_product!
464
- if product.nil?
465
- raise(TargetDataMissing,"no suitable product was provided",caller)
466
- end
467
- end
468
-
469
400
  #
470
401
  # Returns +true+ if the specified _text_ contains any restricted
471
402
  # characters, returns +false+ otherwise.
@@ -478,22 +409,6 @@ module Ronin
478
409
  return false
479
410
  end
480
411
 
481
- #
482
- # Raises a RestrictedChar exception if the specified _text_ contains
483
- # any restricted characters, returns +true+ otherwise.
484
- #
485
- def verify_restricted!(text)
486
- found = @restricted_chars.select { |char|
487
- text.include?(char)
488
- }.map { |char| char.dump }
489
-
490
- unless found.empty?
491
- raise(RestrictedChar,"restricted characters #{found.join(', ')} was detected in #{text.dump}",caller)
492
- end
493
-
494
- return true
495
- end
496
-
497
412
  #
498
413
  # Default build method.
499
414
  #