ronin 0.2.3 → 0.2.4

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 (76) hide show
  1. data.tar.gz.sig +2 -0
  2. data/History.txt +43 -0
  3. data/Manifest.txt +27 -10
  4. data/README.txt +2 -1
  5. data/Rakefile +12 -11
  6. data/TODO.txt +8 -0
  7. data/bin/{ronin-ls → ronin-list} +2 -2
  8. data/bin/{ronin-rm → ronin-remove} +2 -2
  9. data/lib/ronin/cacheable.rb +25 -4
  10. data/lib/ronin/code/reference.rb +0 -9
  11. data/lib/ronin/code/symbol_table.rb +5 -5
  12. data/lib/ronin/code/token.rb +1 -1
  13. data/lib/ronin/database/database.rb +3 -1
  14. data/lib/ronin/extensions/kernel.rb +25 -3
  15. data/lib/ronin/formatting/extensions/binary/file.rb +60 -0
  16. data/lib/ronin/formatting/extensions/text.rb +1 -0
  17. data/lib/ronin/formatting/extensions/text/array.rb +67 -0
  18. data/lib/ronin/model.rb +1 -40
  19. data/lib/ronin/{has_license.rb → model/has_description.rb} +16 -18
  20. data/lib/ronin/model/has_license.rb +53 -0
  21. data/lib/ronin/model/has_name.rb +49 -0
  22. data/lib/ronin/model/has_version.rb +46 -0
  23. data/lib/ronin/model/model.rb +64 -0
  24. data/lib/ronin/network/extensions/http/net.rb +580 -99
  25. data/lib/ronin/network/http.rb +54 -6
  26. data/lib/ronin/os.rb +7 -7
  27. data/lib/ronin/platform/extension.rb +4 -6
  28. data/lib/ronin/platform/maintainer.rb +1 -1
  29. data/lib/ronin/platform/object_cache.rb +10 -2
  30. data/lib/ronin/platform/overlay_cache.rb +1 -1
  31. data/lib/ronin/platform/platform.rb +5 -3
  32. data/lib/ronin/platform/ronin.rb +3 -3
  33. data/lib/ronin/scanners.rb +25 -0
  34. data/lib/ronin/scanners/exceptions.rb +24 -0
  35. data/lib/ronin/scanners/exceptions/unknown_category.rb +29 -0
  36. data/lib/ronin/scanners/scanner.rb +239 -0
  37. data/lib/ronin/sessions/http.rb +548 -7
  38. data/lib/ronin/{translators.rb → templates.rb} +1 -1
  39. data/lib/ronin/templates/erb.rb +56 -0
  40. data/lib/ronin/ui/command_line/command_line.rb +10 -1
  41. data/lib/ronin/ui/command_line/commands/{ls.rb → list.rb} +1 -1
  42. data/lib/ronin/ui/command_line/commands/{rm.rb → remove.rb} +1 -1
  43. data/lib/ronin/ui/command_line/commands/uninstall.rb +2 -2
  44. data/lib/ronin/ui/console.rb +66 -17
  45. data/lib/ronin/ui/shell.rb +16 -36
  46. data/lib/ronin/version.rb +1 -1
  47. data/spec/cacheable_spec.rb +1 -1
  48. data/spec/code/classes/thing.rb +4 -0
  49. data/spec/code/reference_spec.rb +4 -0
  50. data/spec/code/symbol_table_spec.rb +5 -1
  51. data/spec/extensions/kernel_spec.rb +45 -5
  52. data/spec/extensions/string_spec.rb +4 -0
  53. data/spec/formatting/binary/integer_spec.rb +3 -3
  54. data/spec/formatting/binary/string_spec.rb +5 -5
  55. data/spec/formatting/digest/string_spec.rb +5 -9
  56. data/spec/formatting/http/string_spec.rb +5 -9
  57. data/spec/formatting/text/array_spec.rb +64 -0
  58. data/spec/formatting/text/string_spec.rb +3 -3
  59. data/spec/model/classes/licensed_model.rb +12 -0
  60. data/spec/{has_license_spec.rb → model/has_license_spec.rb} +5 -5
  61. data/spec/network/http_spec.rb +197 -0
  62. data/spec/os_spec.rb +2 -5
  63. data/spec/platform/maintainer_spec.rb +30 -0
  64. data/spec/platform/ronin_spec.rb +2 -2
  65. data/spec/scanners/classes/another_scanner.rb +16 -0
  66. data/spec/scanners/classes/example_scanner.rb +22 -0
  67. data/spec/scanners/scanner_spec.rb +148 -0
  68. data/spec/spec_helper.rb +1 -1
  69. data/spec/templates/classes/uses_erb.rb +11 -0
  70. data/spec/templates/erb_spec.rb +20 -0
  71. data/static/ronin/platform/overlay.xsl +128 -49
  72. metadata +83 -30
  73. metadata.gz.sig +0 -0
  74. data/lib/ronin/translators/translator.rb +0 -75
  75. data/spec/classes/licensed_model.rb +0 -12
  76. data/spec/translators/translator_spec.rb +0 -61
@@ -21,4 +21,4 @@
21
21
  #++
22
22
  #
23
23
 
24
- require 'ronin/translators/translator'
24
+ require 'ronin/templates/erb'
@@ -0,0 +1,56 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'erb'
25
+
26
+ module Ronin
27
+ module Templates
28
+ module Erb
29
+ #
30
+ # Renders the specified inline ERB _template_ in the scope of the
31
+ # object, returning the resulting +String+.
32
+ #
33
+ # @user = 'lolcats'
34
+ #
35
+ # erb %{
36
+ # USER: <%= @user %>
37
+ # PASSWORD: <%= @user.reverse %>
38
+ # }
39
+ # # => "\nUSER: lolcats\nPASSWORD: staclol\n"
40
+ #
41
+ def erb(template)
42
+ ERB.new(template).result(binding)
43
+ end
44
+
45
+ #
46
+ # Renders the ERB template at the specified _path_ in the scope of the
47
+ # object, returning the resulting +String+.
48
+ #
49
+ # erb_file 'path/to/template.erb'
50
+ #
51
+ def erb_file(path)
52
+ erb(File.read(path))
53
+ end
54
+ end
55
+ end
56
+ end
@@ -67,12 +67,21 @@ module Ronin
67
67
  # Returns the Command registered with the command-line utility
68
68
  # with the specified _name_.
69
69
  #
70
+ # CommandLine.get_command('gen_overlay')
71
+ # # => Ronin::UI::CommandLine::Commands::GenOverlay
72
+ #
70
73
  def CommandLine.get_command(name)
71
74
  name = name.to_s
72
75
 
76
+ #eventually someone is going to use a space or - which is going mess things up
77
+ #we will take care of this ahead of time here
78
+ name.gsub!(/[\s-]/, '_')
79
+
73
80
  begin
74
81
  require File.join(COMMANDS_DIR,name)
75
- rescue LoadError
82
+ rescue Gem::LoadError => e
83
+ raise(e)
84
+ rescue ::LoadError
76
85
  raise(UnknownCommand,"unable to load the command #{name.dump}",caller)
77
86
  end
78
87
 
@@ -28,7 +28,7 @@ module Ronin
28
28
  module UI
29
29
  module CommandLine
30
30
  module Commands
31
- class Ls < Command
31
+ class List < Command
32
32
 
33
33
  def defaults
34
34
  @cache = nil
@@ -28,7 +28,7 @@ module Ronin
28
28
  module UI
29
29
  module CommandLine
30
30
  module Commands
31
- class Rm < Command
31
+ class Remove < Command
32
32
 
33
33
  def defaults
34
34
  @cache = nil
@@ -59,8 +59,8 @@ module Ronin
59
59
  Platform.load_overlays(@cache) if @cache
60
60
 
61
61
  args.each do |name|
62
- Platform.uninstall(name) do |overlay|
63
- puts "Uninstalling Overlay #{overlay.name.dump} ..."
62
+ Platform.uninstall(name) do
63
+ puts "Uninstalling Overlay #{name.dump} ..."
64
64
  end
65
65
  end
66
66
  end
@@ -24,16 +24,27 @@
24
24
  require 'ronin/config'
25
25
 
26
26
  require 'irb'
27
- require 'irb/completion'
28
27
 
29
28
  module Ronin
30
29
  module UI
31
30
  module Console
31
+ # Default prompt style.
32
+ PROMPT = :SIMPLE
33
+
34
+ # Default indentation mode.
35
+ INDENT = true
36
+
37
+ # Default backtrace depth.
38
+ BACKTRACE_DEPTH = 5
39
+
40
+ # Default completion mode.
41
+ COMPLETION = true
42
+
32
43
  #
33
- # Returns the default Console prompt style
44
+ # Returns the default Console prompt style, defaults to +PROMPT+.
34
45
  #
35
46
  def Console.prompt
36
- @@ronin_console_prompt ||= :SIMPLE
47
+ @@ronin_console_prompt ||= PROMPT
37
48
  end
38
49
 
39
50
  #
@@ -44,17 +55,54 @@ module Ronin
44
55
  end
45
56
 
46
57
  #
47
- # Returns the default Console indent setting.
58
+ # Returns the default Console indent setting, defaults to +INDENT+.
48
59
  #
49
60
  def Console.indent
50
- @@ronin_console_indent ||= true
61
+ @@ronin_console_indent ||= INDENT
62
+ end
63
+
64
+ #
65
+ # Sets the default Console indent setting to the specified _mode_.
66
+ #
67
+ # Console.indent = false
68
+ # # => false
69
+ #
70
+ def Console.indent=(mode)
71
+ @@ronin_console_indent = mode
72
+ end
73
+
74
+ #
75
+ # Returns the default Console back trace limit, defaults to
76
+ # +BACKTRACE_DEPTH+.
77
+ #
78
+ def Console.backtrace_depth
79
+ @@ronin_console_backtrace_depth ||= BACKTRACE_DEPTH
51
80
  end
52
81
 
53
82
  #
54
- # Sets the default Console indent setting.
83
+ # Sets the default Console back trace depth to the specified _depth_.
55
84
  #
56
- def Console.indent=(value)
57
- @@ronin_console_indent = value
85
+ def Console.backtrace_depth=(depth)
86
+ @@ronin_console_backtrace_depth = depth
87
+ end
88
+
89
+ #
90
+ # Returns the default Console tab-completion mode, defaults to
91
+ # +COMPLETION+.
92
+ #
93
+ def Console.completion
94
+ @@ronin_console_completion ||= COMPLETION
95
+ end
96
+
97
+ #
98
+ # Sets the default Console tab-completion mode to the specified
99
+ # _mode_.
100
+ #
101
+ # Console.completion = false
102
+ # # => false
103
+ #
104
+ def Console.completion=(mode)
105
+ @@ronin_console_completion = mode
58
106
  end
59
107
 
60
108
  #
@@ -79,17 +127,22 @@ module Ronin
79
127
  def Console.start(script=nil,&block)
80
128
  IRB.setup(script)
81
129
 
130
+ # configure IRB
82
131
  IRB.conf[:IRB_NAME] = 'ronin'
83
132
  IRB.conf[:PROMPT_MODE] = Console.prompt
84
133
  IRB.conf[:AUTO_INDENT] = Console.indent
134
+ IRB.conf[:BACK_TRACE_LIMIT] = Console.backtrace_depth
85
135
 
86
136
  irb = IRB::Irb.new(nil,script)
87
137
 
88
- # configure the irb workspace
138
+ # configure the IRB context
89
139
  irb.context.main.instance_eval do
90
140
  require 'ronin/environment'
91
141
  require 'ronin/platform'
92
142
 
143
+ require 'irb/completion' if Ronin::UI::Console.completion
144
+
145
+ # require any of the auto-load paths
93
146
  Ronin::UI::Console.auto_load.each do |path|
94
147
  require path
95
148
  end
@@ -97,22 +150,18 @@ module Ronin
97
150
  include Ronin
98
151
  end
99
152
 
153
+ # run any setup-blocks
100
154
  Console.setup_blocks.each do |setup_block|
101
155
  irb.context.main.instance_eval(&setup_block)
102
156
  end
103
157
 
104
- # Load console configuration block is given
158
+ # run the supplied configuration block is given
105
159
  irb.context.main.instance_eval(&block) if block
106
160
 
107
161
  IRB.conf[:MAIN_CONTEXT] = irb.context
108
162
 
109
- trap('SIGINT') do
110
- irb.signal_handle
111
- end
112
-
113
- catch(:IRB_EXIT) do
114
- irb.eval_input
115
- end
163
+ trap('SIGINT') { irb.signal_handle }
164
+ catch(:IRB_EXIT) { irb.eval_input }
116
165
 
117
166
  putc "\n"
118
167
  return nil
@@ -22,45 +22,30 @@
22
22
  #
23
23
 
24
24
  module Ronin
25
- class Shell
25
+ module Shell
26
26
 
27
27
  # Default shell prompt
28
28
  DEFAULT_PROMPT = '>'
29
29
 
30
- # Shell name to use
31
- attr_accessor :name
32
-
33
- # Shell prompt
34
- attr_accessor :prompt
35
-
36
- #
37
- # Creates a new Shell object with the given _options_.
38
- #
39
- # _options_ may contain the following keys:
40
- # <tt>:name</tt>:: The name of the shell.
41
- # <tt>:prompt</tt>::The prompt to use for the shell.
42
- #
43
- def initialize(options={})
44
- @name = options[:name]
45
- @prompt = (options[:prompt] || DEFAULT_PROMPT)
46
- end
47
-
48
30
  #
49
31
  # Creates and starts a new Shell object with the specified _options_.
50
32
  # If a _block_ is given, it will be passed every command.
51
33
  #
52
- def self.start(options={},&block)
53
- self.new(options).start(&block)
54
- end
55
-
34
+ # _options_ may contain the following keys:
35
+ # <tt>:name</tt>:: Name of the shell.
36
+ # <tt>:prompt</tt>:: Prompt to use for the shell, defaults to
37
+ # +DEFAULT_PROMPT+.
56
38
  #
57
- # Starts the shell using the given _block_ to process commands.
39
+ # Shell.start(:prompt => '$') { |shell,line| system(line) }
58
40
  #
59
- def start(&block)
41
+ def Shell.start(options={},&block)
42
+ name = (options[:name] || '')
43
+ prompt = (options[:prompt] || DEFAULT_PROMPT)
44
+
60
45
  history_rollback = 0
61
46
 
62
47
  loop do
63
- line = Readline.readline("#{@name}#{@prompt} ")
48
+ line = Readline.readline("#{name}#{prompt} ")
64
49
 
65
50
  if line =~ /^\s*exit\s*$/
66
51
  break
@@ -76,40 +61,35 @@ module Ronin
76
61
  end
77
62
  end
78
63
 
79
- history_rollback.times do
80
- Readline::HISTORY.pop
81
- end
82
-
64
+ history_rollback.times { Readline::HISTORY.pop }
83
65
  return nil
84
66
  end
85
67
 
86
68
  #
87
69
  # Equivalent to <tt>STDOUT.putc(char)</tt>.
88
70
  #
89
- def putc(char)
71
+ def Shell.putc(char)
90
72
  STDOUT.putc(char)
91
73
  end
92
74
 
93
75
  #
94
76
  # Equivalent to <tt>STDOUT.print(string)</tt>.
95
77
  #
96
- def print(string)
78
+ def Shell.print(string)
97
79
  STDOUT.print(string)
98
80
  end
99
81
 
100
82
  #
101
83
  # Equivalent to <tt>STDOUT.puts(string)</tt>.
102
84
  #
103
- def puts(string)
85
+ def Shell.puts(string)
104
86
  STDOUT.puts(string)
105
87
  end
106
88
 
107
- alias << puts
108
-
109
89
  #
110
90
  # Equivalent to <tt>STDOUT.printf(string,*objects)</tt>.
111
91
  #
112
- def printf(string,*objects)
92
+ def Shell.printf(string,*objects)
113
93
  STDOUT.printf(string,*objects)
114
94
  end
115
95
 
data/lib/ronin/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
 
24
24
  module Ronin
25
25
  # Ronin version
26
- VERSION = '0.2.3'
26
+ VERSION = '0.2.4'
27
27
  end
@@ -94,7 +94,7 @@ describe Cacheable do
94
94
 
95
95
  model = CacheableModel.cache(CACHEABLE_PATH)
96
96
  model.cached_timestamp -= 10
97
- model.save!
97
+ model.save
98
98
  end
99
99
 
100
100
  it "should re-cache modified files" do
@@ -4,6 +4,10 @@ class Thing
4
4
  1
5
5
  end
6
6
 
7
+ def inspect
8
+ "#<Thing: stuff>"
9
+ end
10
+
7
11
  protected
8
12
 
9
13
  def not_exposed
@@ -56,4 +56,8 @@ describe Code::Reference do
56
56
  it "should raise a NoMethodError when trying to call a protected or private method" do
57
57
  lambda { @ref.not_exposed }.should raise_error(NoMethodError)
58
58
  end
59
+
60
+ it "should inspect the referenced object when inspect is called" do
61
+ @ref.inspect.should == '#<Thing: stuff>'
62
+ end
59
63
  end
@@ -3,7 +3,7 @@ require 'ronin/code/symbol_table'
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Code::SymbolTable do
6
- before(:all) do
6
+ before(:each) do
7
7
  @one = [:a, :b, :c]
8
8
  @two = {:one => 1, :two => 2}
9
9
 
@@ -38,4 +38,8 @@ describe Code::SymbolTable do
38
38
  @table[:three].should == 3
39
39
  @table[:four].should == 4
40
40
  end
41
+
42
+ it "should display the values of the symbols when inspected" do
43
+ @table.inspect.should == '{:one=>[:a, :b, :c], :two=>{:one=>1, :two=>2}}'
44
+ end
41
45
  end
@@ -3,17 +3,57 @@ require 'ronin/extensions/kernel'
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Kernel do
6
- it "should provide Kernel#try" do
7
- Kernel.respond_to?('try').should == true
6
+ it "should provide Kernel#attempt" do
7
+ Kernel.respond_to?('attempt').should == true
8
8
  end
9
9
 
10
- describe "try" do
10
+ describe "attempt" do
11
11
  it "should return the result of the block if nothing is raised" do
12
- try { 2 + 2 }.should == 4
12
+ attempt { 2 + 2 }.should == 4
13
13
  end
14
14
 
15
15
  it "should return nil if an exception is raised" do
16
- try { 2 + 'a' }.should be_nil
16
+ attempt { 2 + 'a' }.should be_nil
17
+ end
18
+
19
+ it "should rescue RuntimeError exceptions" do
20
+ lambda {
21
+ attempt { raise(RuntimeError,"something happened",caller) }
22
+ }.should_not raise_error(RuntimeError)
23
+ end
24
+
25
+ it "should rescue StandardError exceptions" do
26
+ lambda {
27
+ attempt { raise(StandardError,"not allowed to do that",caller) }
28
+ }.should_not raise_error(StandardError)
29
+ end
30
+ end
31
+
32
+ describe "catch_all" do
33
+ it "should run a block" do
34
+ var = 1
35
+
36
+ catch_all { var += 1 }
37
+
38
+ var.should == 2
39
+ end
40
+
41
+ it "should catch SyntaxError exceptions" do
42
+ lambda {
43
+ catch_all(false) { raise(SyntaxError,"horrible code",caller) }
44
+ }.should_not raise_error(SyntaxError)
45
+ end
46
+
47
+ it "should catch RuntimeError exceptions" do
48
+ lambda {
49
+ catch_all(false) { raise(RuntimeError,"something happened",caller) }
50
+ }.should_not raise_error(RuntimeError)
51
+ end
52
+
53
+ it "should catch StandardError exceptions" do
54
+ lambda {
55
+ catch_all(false) { raise(StandardError,"not allowed to do that",caller) }
56
+ }.should_not raise_error(StandardError)
17
57
  end
18
58
  end
19
59
  end