ronin 0.2.3 → 0.2.4

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