ronin-exploits 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
  #