ronin 0.1.4 → 0.2.0

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 (73) hide show
  1. data/History.txt +50 -0
  2. data/Manifest.txt +31 -19
  3. data/README.txt +27 -19
  4. data/Rakefile +1 -1
  5. data/TODO.txt +1 -7
  6. data/lib/ronin.rb +1 -11
  7. data/lib/ronin/database/database.rb +1 -1
  8. data/lib/ronin/{cache/config.rb → environment.rb} +10 -8
  9. data/lib/ronin/formatting.rb +0 -1
  10. data/lib/ronin/formatting/extensions.rb +0 -1
  11. data/lib/ronin/formatting/extensions/binary/integer.rb +10 -0
  12. data/lib/ronin/formatting/extensions/binary/string.rb +11 -0
  13. data/lib/ronin/formatting/extensions/http/string.rb +1 -1
  14. data/lib/ronin/network/extensions/http/net.rb +8 -0
  15. data/lib/ronin/objectify/objectify.rb +0 -47
  16. data/lib/ronin/os.rb +89 -0
  17. data/lib/ronin/platform.rb +4 -77
  18. data/lib/ronin/{cache → platform}/exceptions.rb +2 -2
  19. data/lib/ronin/{cache → platform}/exceptions/extension_not_found.rb +1 -1
  20. data/lib/ronin/{cache → platform}/exceptions/overlay_cached.rb +1 -1
  21. data/lib/ronin/{cache → platform}/exceptions/overlay_not_found.rb +1 -1
  22. data/lib/ronin/{cache → platform}/extension.rb +68 -177
  23. data/lib/ronin/{cache → platform}/extension_cache.rb +9 -7
  24. data/lib/ronin/{cache → platform}/maintainer.rb +1 -1
  25. data/lib/ronin/platform/object_cache.rb +94 -0
  26. data/lib/ronin/platform/overlay.rb +274 -0
  27. data/lib/ronin/platform/overlay_cache.rb +318 -0
  28. data/lib/ronin/platform/platform.rb +195 -0
  29. data/lib/ronin/{cache → platform}/ronin.rb +7 -6
  30. data/lib/ronin/target.rb +5 -5
  31. data/lib/ronin/ui.rb +4 -1
  32. data/lib/ronin/ui/command_line/command_line.rb +0 -1
  33. data/lib/ronin/ui/command_line/commands/add.rb +21 -6
  34. data/lib/ronin/ui/command_line/commands/default.rb +6 -1
  35. data/lib/ronin/ui/command_line/commands/extension.rb +3 -3
  36. data/lib/ronin/ui/command_line/commands/install.rb +16 -5
  37. data/lib/ronin/ui/command_line/commands/list.rb +31 -8
  38. data/lib/ronin/ui/command_line/commands/overlay.rb +10 -9
  39. data/lib/ronin/ui/command_line/commands/remove.rb +16 -5
  40. data/lib/ronin/ui/command_line/commands/uninstall.rb +16 -5
  41. data/lib/ronin/ui/command_line/commands/update.rb +16 -3
  42. data/lib/ronin/ui/console.rb +81 -77
  43. data/lib/ronin/ui/diagnostics.rb +73 -0
  44. data/lib/ronin/version.rb +1 -1
  45. data/spec/chars/chars_spec.rb +1 -3
  46. data/spec/formatting/binary/integer_spec.rb +48 -36
  47. data/spec/formatting/binary/string_spec.rb +66 -4
  48. data/spec/os_spec.rb +24 -0
  49. data/spec/platform/extension_cache_spec.rb +42 -0
  50. data/spec/platform/extension_spec.rb +62 -0
  51. data/spec/platform/helpers/overlays.rb +18 -0
  52. data/spec/platform/helpers/overlays.yaml.erb +10 -0
  53. data/spec/platform/helpers/overlays/hello/hello/extension.rb +7 -0
  54. data/spec/platform/helpers/overlays/hello/ronin.xml +26 -0
  55. data/spec/platform/helpers/overlays/test1/ronin.xml +26 -0
  56. data/spec/platform/helpers/overlays/test1/test/extension.rb +7 -0
  57. data/spec/platform/helpers/overlays/test2/ronin.xml +26 -0
  58. data/spec/platform/helpers/overlays/test2/test/extension.rb +7 -0
  59. data/spec/platform/overlay_cache_spec.rb +63 -0
  60. data/spec/platform/platform_spec.rb +14 -0
  61. data/spec/platform/ronin_spec.rb +22 -0
  62. data/spec/target_spec.rb +1 -1
  63. data/spec/ui/diagnostics_spec.rb +17 -0
  64. metadata +34 -22
  65. data/lib/ronin/cache.rb +0 -27
  66. data/lib/ronin/cache/cache.rb +0 -78
  67. data/lib/ronin/cache/overlay.rb +0 -470
  68. data/lib/ronin/cache/overlay_cache.rb +0 -216
  69. data/lib/ronin/formatting/extensions/html.rb +0 -24
  70. data/lib/ronin/formatting/extensions/html/string.rb +0 -75
  71. data/lib/ronin/formatting/html.rb +0 -24
  72. data/spec/formatting/html_spec.rb +0 -46
  73. data/spec/platform_spec.rb +0 -24
data/lib/ronin/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
 
24
24
  module Ronin
25
25
  # Ronin version
26
- VERSION = '0.1.4'
26
+ VERSION = '0.2.0'
27
27
  end
@@ -66,8 +66,6 @@ describe Chars do
66
66
  end
67
67
 
68
68
  it "should provide a symbols CharSet" do
69
- pending "need to fix the testing regex" do
70
- (@symbols_string =~ /[\@\#\$\%\^\&\*\_\+\=\|\\\<\>\/]{10}/).should_not be_nil
71
- end
69
+ (@symbols_string =~ /[\@\#\$\%\^\&\*\_\+\=\|\\\<\>\/]/).should_not be_nil
72
70
  end
73
71
  end
@@ -3,53 +3,65 @@ require 'ronin/formatting/binary'
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Integer do
6
- before(:all) do
7
- @integer = 0x1337
8
-
9
- @i386_packed_int = "7\023\000\000"
10
- @i386_packed_short = "7\023"
11
- @i386_packed_long = "7\023\000\000"
12
- @i386_packed_quad = "7\023\000\000\000\000\000\000"
13
-
14
- @ppc_packed_int = "\000\000\0237"
15
- @ppc_packed_short = "\0237"
16
- @ppc_packed_long = "\000\000\0237"
17
- @ppc_packed_quad = "\000\000\000\000\000\000\0237"
18
- end
19
-
20
6
  it "should provide Integer#pack" do
21
- @integer.respond_to?('pack').should == true
7
+ Integer.instance_method('pack').should_not be_nil
22
8
  end
23
9
 
24
- it "Integer#pack should pack itself for a little-endian architecture" do
25
- @integer.pack(Arch.i386).should == @i386_packed_int
10
+ it "should provide Integer#hex_escape" do
11
+ Integer.instance_method('hex_escape').should_not be_nil
26
12
  end
27
13
 
28
- it "Integer#pack should pack itself as a short for a little-endian architecture" do
29
- @integer.pack(Arch.i386,2).should == @i386_packed_short
30
- end
14
+ describe "pack" do
15
+ before(:all) do
16
+ @integer = 0x1337
31
17
 
32
- it "Integer#pack should pack itself as a long for a little-endian architecture" do
33
- @integer.pack(Arch.i386,4).should == @i386_packed_long
34
- end
18
+ @i386_packed_int = "7\023\000\000"
19
+ @i386_packed_short = "7\023"
20
+ @i386_packed_long = "7\023\000\000"
21
+ @i386_packed_quad = "7\023\000\000\000\000\000\000"
35
22
 
36
- it "Integer#pack should pack itself as a quad for a little-endian architecture" do
37
- @integer.pack(Arch.i386,8).should == @i386_packed_quad
38
- end
23
+ @ppc_packed_int = "\000\000\0237"
24
+ @ppc_packed_short = "\0237"
25
+ @ppc_packed_long = "\000\000\0237"
26
+ @ppc_packed_quad = "\000\000\000\000\000\000\0237"
27
+ end
39
28
 
40
- it "Integer#pack should pack itself for a big-endian architecture" do
41
- @integer.pack(Arch.ppc).should == @ppc_packed_int
42
- end
29
+ it "should pack itself for a little-endian architecture" do
30
+ @integer.pack(Arch.i386).should == @i386_packed_int
31
+ end
43
32
 
44
- it "Integer#pack should pack itself as a short for a big-endian architecture" do
45
- @integer.pack(Arch.ppc,2).should == @ppc_packed_short
46
- end
33
+ it "should pack itself as a short for a little-endian architecture" do
34
+ @integer.pack(Arch.i386,2).should == @i386_packed_short
35
+ end
36
+
37
+ it "Integer#pack should pack itself as a long for a little-endian architecture" do
38
+ @integer.pack(Arch.i386,4).should == @i386_packed_long
39
+ end
40
+
41
+ it "should pack itself as a quad for a little-endian architecture" do
42
+ @integer.pack(Arch.i386,8).should == @i386_packed_quad
43
+ end
44
+
45
+ it "should pack itself for a big-endian architecture" do
46
+ @integer.pack(Arch.ppc).should == @ppc_packed_int
47
+ end
48
+
49
+ it "should pack itself as a short for a big-endian architecture" do
50
+ @integer.pack(Arch.ppc,2).should == @ppc_packed_short
51
+ end
52
+
53
+ it "should pack itself as a long for a big-endian architecture" do
54
+ @integer.pack(Arch.ppc,4).should == @ppc_packed_long
55
+ end
47
56
 
48
- it "Integer#pack should pack itself as a long for a big-endian architecture" do
49
- @integer.pack(Arch.ppc,4).should == @ppc_packed_long
57
+ it "should pack itself as a quad for a big-endian architecture" do
58
+ @integer.pack(Arch.ppc,8).should == @ppc_packed_quad
59
+ end
50
60
  end
51
61
 
52
- it "Integer#pack should pack itself as a quad for a big-endian architecture" do
53
- @integer.pack(Arch.ppc,8).should == @ppc_packed_quad
62
+ describe "hex_escape" do
63
+ it "should hex escape an Integer" do
64
+ 42.hex_escape.should == "\\x2a"
65
+ end
54
66
  end
55
67
  end
@@ -3,12 +3,74 @@ require 'ronin/formatting/binary'
3
3
  require 'spec_helper'
4
4
 
5
5
  describe String do
6
- before(:all) do
7
- @packed_integer = ""
6
+ it "should provide String#depack" do
7
+ String.instance_method('depack').should_not be_nil
8
8
  end
9
9
 
10
- it "should provide String#depack" do
11
- @packed_integer.respond_to?('depack').should == true
10
+ it "should provide String#hex_escape" do
11
+ String.instance_method('hex_escape').should_not be_nil
12
+ end
13
+
14
+ it "should provide String#xor" do
15
+ String.instance_method('xor').should_not be_nil
16
+ end
17
+
18
+ describe "pack" do
19
+ before(:all) do
20
+ @integer = 0x1337
21
+
22
+ @i386_packed_int = "7\023\000\000"
23
+ @i386_packed_short = "7\023"
24
+ @i386_packed_long = "7\023\000\000"
25
+ @i386_packed_quad = "7\023\000\000\000\000\000\000"
26
+
27
+ @ppc_packed_int = "\000\000\0237"
28
+ @ppc_packed_short = "\0237"
29
+ @ppc_packed_long = "\000\000\0237"
30
+ @ppc_packed_quad = "\000\000\000\000\000\000\0237"
31
+ end
32
+
33
+ it "should pack itself for a little-endian architecture" do
34
+ @i386_packed_int.depack(Arch.i386).should == @integer
35
+ end
36
+
37
+ it "should pack itself as a short for a little-endian architecture" do
38
+ @i386_packed_short.depack(Arch.i386,2).should == @integer
39
+ end
40
+
41
+ it "Integer#pack should pack itself as a long for a little-endian architecture" do
42
+ @i386_packed_long.depack(Arch.i386,4).should == @integer
43
+ end
44
+
45
+ it "should pack itself as a quad for a little-endian architecture" do
46
+ @i386_packed_quad.depack(Arch.i386,8).should == @integer
47
+ end
48
+
49
+ it "should pack itself for a big-endian architecture" do
50
+ @ppc_packed_int.depack(Arch.ppc).should == @integer
51
+ end
52
+
53
+ it "should pack itself as a short for a big-endian architecture" do
54
+ @ppc_packed_short.depack(Arch.ppc,2).should == @integer
55
+ end
56
+
57
+ it "should pack itself as a long for a big-endian architecture" do
58
+ @ppc_packed_long.depack(Arch.ppc,4).should == @integer
59
+ end
60
+
61
+ it "should pack itself as a quad for a big-endian architecture" do
62
+ @ppc_packed_quad.depack(Arch.ppc,8).should == @integer
63
+ end
64
+ end
65
+
66
+ describe "hex_escape" do
67
+ before(:all) do
68
+ @binary_string = "hello\x4e"
69
+ end
70
+
71
+ it "should hex escape a String" do
72
+ @binary_string.hex_escape.should == "\\x68\\x65\\x6c\\x6c\\x6f\\x4e"
73
+ end
12
74
  end
13
75
 
14
76
  describe "xor" do
data/spec/os_spec.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'ronin/os'
2
+
3
+ require 'helpers/database'
4
+
5
+ describe OS do
6
+ it "should require os and version attributes" do
7
+ @os = OS.new
8
+ @os.should_not be_valid
9
+
10
+ @os.name = 'test'
11
+ @os.should_not be_valid
12
+
13
+ @os.version = '0.0.1'
14
+ @os.should be_valid
15
+ end
16
+
17
+ it "should provide methods for built-in OSes" do
18
+ OS.linux.should_not be_nil
19
+ end
20
+
21
+ it "should provide methods for creating OSes with versions" do
22
+ OS.linux_version('2.6.11').should be_valid
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ require 'ronin/platform/extension_cache'
2
+
3
+ require 'platform/helpers/overlays'
4
+ require 'spec_helper'
5
+
6
+ describe Platform::ExtensionCache do
7
+ before(:all) do
8
+ Platform.load_overlays(overlay_cache_path)
9
+
10
+ @cache = Platform::ExtensionCache.new
11
+ end
12
+
13
+ it "should be able to load an extension from the overlays" do
14
+ ext = @cache.load_extension('test')
15
+
16
+ ext.should_not be_nil
17
+ ext.name.should == 'test'
18
+ end
19
+
20
+ it "should provide transparent caching of extensions" do
21
+ ext = @cache['test']
22
+ ext.should_not be_nil
23
+ ext.name.should == 'test'
24
+
25
+ @cache['test'].should == ext
26
+ end
27
+
28
+ it "should load together the extension from all overlays" do
29
+ ext = @cache.load_extension('test')
30
+
31
+ ext.should_not be_nil
32
+ ext.test1.should == 'test one'
33
+ ext.test2.should == 'test two'
34
+ end
35
+
36
+ it "should have loaded extensions with multiple paths" do
37
+ paths = @cache.load_extension('test').paths
38
+
39
+ paths.length.should == 2
40
+ paths.select { |path| path =~ /test$/ }.should == paths
41
+ end
42
+ end
@@ -0,0 +1,62 @@
1
+ require 'ronin/platform/extension'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Platform::Extension do
6
+ before(:each) do
7
+ @ext = Platform::Extension.new('test') do
8
+ setup do
9
+ @var = :setup
10
+ end
11
+
12
+ teardown do
13
+ @var = :toredown
14
+ end
15
+
16
+ def test_method
17
+ :method
18
+ end
19
+
20
+ def run_method
21
+ @var = :running
22
+ end
23
+ end
24
+ end
25
+
26
+ it "should allow for custom methods" do
27
+ @ext.has_method?(:test_method).should == true
28
+ @ext.test_method.should == :method
29
+ end
30
+
31
+ it "should have a setup state" do
32
+ @ext.setup!
33
+ @ext.should be_setup
34
+ end
35
+
36
+ it "should have setup blocks" do
37
+ @ext.setup!
38
+ @ext.instance_eval { @var }.should == :setup
39
+ end
40
+
41
+ it "should have a toredown state" do
42
+ @ext.teardown!
43
+ @ext.should be_toredown
44
+ end
45
+
46
+ it "should have teardown blocks" do
47
+ @ext.setup!
48
+ @ext.teardown!
49
+ @ext.instance_eval { @var }.should == :toredown
50
+ end
51
+
52
+ it "should not be torendown before it is setup" do
53
+ @ext.teardown!
54
+ @ext.instance_eval { @var }.should be_nil
55
+ end
56
+
57
+ it "should be able to be ran" do
58
+ @ext.run do |ext|
59
+ ext.run_method.should == :running
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,18 @@
1
+ require 'tempfile'
2
+ require 'erb'
3
+
4
+ OVERLAY_CACHE = File.expand_path(File.join(File.dirname(__FILE__),'overlays'))
5
+
6
+ def overlay_cache_path(&block)
7
+ file = Tempfile.new('overlays.yaml')
8
+ path = file.path
9
+
10
+ template_path = File.join(File.dirname(__FILE__),'overlays.yaml.erb')
11
+ template = ERB.new(File.read(template_path))
12
+
13
+ file.write(template.result(binding))
14
+ file.close
15
+
16
+ block.call(path) if block
17
+ return path
18
+ end
@@ -0,0 +1,10 @@
1
+ ---
2
+ - :media:
3
+ :uri:
4
+ :path: <%= File.join(OVERLAY_CACHE,'test1') %>
5
+ - :media:
6
+ :uri:
7
+ :path: <%= File.join(OVERLAY_CACHE,'test2') %>
8
+ - :media:
9
+ :uri:
10
+ :path: <%= File.join(OVERLAY_CACHE,'hello') %>
@@ -0,0 +1,7 @@
1
+ ronin_extension do
2
+
3
+ def greatings
4
+ 'hello'
5
+ end
6
+
7
+ end
@@ -0,0 +1,26 @@
1
+ <?xml version='1.0'?>
2
+ <?xml-stylesheet type="text/xsl" href="http://ronin.rubyforge.org/dist/overlay.xsl"?>
3
+ <ronin-overlay version='0.1.5'>
4
+ <title>
5
+ Hello World
6
+ </title>
7
+ <website>
8
+ http://ronin.rubyforge.org/
9
+ </website>
10
+ <license>
11
+ GPL-2
12
+ </license>
13
+ <maintainers>
14
+ <maintainer>
15
+ <name>
16
+ Postmodern
17
+ </name>
18
+ <email>
19
+ postmodern.mod3@gmail.com
20
+ </email>
21
+ </maintainer>
22
+ </maintainers>
23
+ <description>
24
+ This is a test overlay used in Ronin&apos;s specs.
25
+ </description>
26
+ </ronin-overlay>
@@ -0,0 +1,26 @@
1
+ <?xml version='1.0'?>
2
+ <?xml-stylesheet type="text/xsl" href="http://ronin.rubyforge.org/dist/overlay.xsl"?>
3
+ <ronin-overlay version='0.1.5'>
4
+ <title>
5
+ Test One
6
+ </title>
7
+ <website>
8
+ http://ronin.rubyforge.org/
9
+ </website>
10
+ <license>
11
+ GPL-2
12
+ </license>
13
+ <maintainers>
14
+ <maintainer>
15
+ <name>
16
+ Postmodern
17
+ </name>
18
+ <email>
19
+ postmodern.mod3@gmail.com
20
+ </email>
21
+ </maintainer>
22
+ </maintainers>
23
+ <description>
24
+ This is a test overlay used in Ronin&apos;s specs.
25
+ </description>
26
+ </ronin-overlay>
@@ -0,0 +1,7 @@
1
+ ronin_extension do
2
+
3
+ def test1
4
+ "test one"
5
+ end
6
+
7
+ end
@@ -0,0 +1,26 @@
1
+ <?xml version='1.0'?>
2
+ <?xml-stylesheet type="text/xsl" href="http://ronin.rubyforge.org/dist/overlay.xsl"?>
3
+ <ronin-overlay version='0.1.5'>
4
+ <title>
5
+ Test Two
6
+ </title>
7
+ <website>
8
+ http://ronin.rubyforge.org/
9
+ </website>
10
+ <license>
11
+ GPL-2
12
+ </license>
13
+ <maintainers>
14
+ <maintainer>
15
+ <name>
16
+ Postmodern
17
+ </name>
18
+ <email>
19
+ postmodern.mod3@gmail.com
20
+ </email>
21
+ </maintainer>
22
+ </maintainers>
23
+ <description>
24
+ This is a test overlay used in Ronin&apos;s specs.
25
+ </description>
26
+ </ronin-overlay>