ronin 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/FAQ.txt +103 -0
  2. data/History.txt +10 -1
  3. data/Manifest.txt +26 -0
  4. data/Rakefile +2 -0
  5. data/TODO.txt +9 -2
  6. data/lib/ronin/arch.rb +9 -2
  7. data/lib/ronin/author.rb +9 -10
  8. data/lib/ronin/chars/chars.rb +1 -1
  9. data/lib/ronin/console.rb +5 -5
  10. data/lib/ronin/context.rb +1 -1
  11. data/lib/ronin/database.rb +8 -3
  12. data/lib/ronin/extensions/string.rb +1 -1
  13. data/lib/ronin/extensions/uri/http.rb +1 -1
  14. data/lib/ronin/license.rb +4 -0
  15. data/lib/ronin/model.rb +8 -0
  16. data/lib/ronin/models.rb +1 -8
  17. data/lib/ronin/network/extensions/telnet/net.rb +11 -6
  18. data/lib/ronin/network/extensions/udp/net.rb +0 -12
  19. data/lib/ronin/objects.rb +1 -3
  20. data/lib/ronin/parameters/parameters.rb +26 -15
  21. data/lib/ronin/platform.rb +4 -1
  22. data/lib/ronin/product.rb +3 -0
  23. data/lib/ronin/runner/program/program.rb +4 -2
  24. data/lib/ronin/sessions/esmtp.rb +2 -10
  25. data/lib/ronin/sessions/imap.rb +1 -9
  26. data/lib/ronin/sessions/pop3.rb +1 -9
  27. data/lib/ronin/sessions/session.rb +20 -19
  28. data/lib/ronin/sessions/smtp.rb +1 -9
  29. data/lib/ronin/sessions/tcp.rb +1 -21
  30. data/lib/ronin/sessions/telnet.rb +1 -9
  31. data/lib/ronin/sessions/udp.rb +1 -21
  32. data/lib/ronin/sessions/web.rb +1 -9
  33. data/lib/ronin/target.rb +3 -0
  34. data/lib/ronin/version.rb +1 -1
  35. data/spec/arch_spec.rb +61 -0
  36. data/spec/author_spec.rb +10 -0
  37. data/spec/chars/chars_spec.rb +82 -0
  38. data/spec/context/context_spec.rb +84 -0
  39. data/spec/context/helpers/book_context.rb +15 -0
  40. data/spec/context/helpers/book_review_context.rb +21 -0
  41. data/spec/context/helpers/contexts/neuromancer_review.rb +15 -0
  42. data/spec/context/helpers/contexts/snow_crash.rb +8 -0
  43. data/spec/extensions/hash_spec.rb +38 -0
  44. data/spec/extensions/string_spec.rb +13 -0
  45. data/spec/extensions/uri/http_spec.rb +40 -0
  46. data/spec/extensions/uri/query_params_spec.rb +38 -0
  47. data/spec/formatting/binary_spec.rb +65 -0
  48. data/spec/formatting/digest_spec.rb +54 -0
  49. data/spec/formatting/html_spec.rb +37 -0
  50. data/spec/formatting/http_spec.rb +44 -0
  51. data/spec/formatting/text_spec.rb +21 -0
  52. data/spec/license_spec.rb +20 -0
  53. data/spec/parameters/parameters_spec.rb +109 -0
  54. data/spec/path_spec.rb +34 -0
  55. data/spec/platform_spec.rb +24 -0
  56. data/spec/product_spec.rb +16 -0
  57. data/spec/ronin_spec.rb +11 -0
  58. data/spec/sessions/session_spec.rb +56 -0
  59. data/spec/spec_helper.rb +2 -0
  60. data/spec/target_spec.rb +16 -0
  61. metadata +39 -2
data/lib/ronin/target.rb CHANGED
@@ -36,5 +36,8 @@ module Ronin
36
36
  # Targeted architecture
37
37
  belongs_to :arch
38
38
 
39
+ # Validates
40
+ validates_present :platform, :arch
41
+
39
42
  end
40
43
  end
data/lib/ronin/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
 
24
24
  module Ronin
25
25
  # Ronin version
26
- VERSION = '0.0.9'
26
+ VERSION = '0.1.0'
27
27
  end
data/spec/arch_spec.rb ADDED
@@ -0,0 +1,61 @@
1
+ require 'ronin/arch'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Arch do
6
+ it "should require a name, endian and address_length attributes" do
7
+ @arch = Arch.new
8
+ @arch.should_not be_valid
9
+
10
+ @arch.name = 'future'
11
+ @arch.should_not be_valid
12
+
13
+ @arch.endian = 'little'
14
+ @arch.should_not be_valid
15
+
16
+ @arch.address_length = 4
17
+ @arch.should be_valid
18
+ end
19
+
20
+ it "should require a unique name" do
21
+ @first_arch = Arch.create(:name => 'cats',
22
+ :endian => 'little',
23
+ :address_length => 4)
24
+ @first_arch.should be_valid
25
+
26
+ @second_arch = Arch.new(:name => 'cats',
27
+ :endian => 'big',
28
+ :address_length => 4)
29
+ @second_arch.should_not be_valid
30
+ end
31
+
32
+ it "should require either 'little' or 'big' for the endian attribute" do
33
+ @arch = Arch.new(:name => 'test',
34
+ :endian => 'lol',
35
+ :address_length => 4)
36
+ @arch.should_not be_valid
37
+
38
+ @arch.endian = 'little'
39
+ @arch.should be_valid
40
+
41
+ @arch.endian = 'big'
42
+ @arch.should be_valid
43
+ end
44
+
45
+ it "should require a numeric valid for the address_length attribute" do
46
+ @arch = Arch.new(:name => 'test2',
47
+ :endian => 'big',
48
+ :address_length => 'x')
49
+ @arch.should_not be_valid
50
+
51
+ @arch.address_length = '4'
52
+ @arch.should be_valid
53
+
54
+ @arch.address_length = 4
55
+ @arch.should be_valid
56
+ end
57
+
58
+ it "should provide built-in archs" do
59
+ Arch.i386.should_not be_nil
60
+ end
61
+ end
@@ -0,0 +1,10 @@
1
+ require 'ronin/author'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Author do
6
+ it "should have a default name" do
7
+ @author = Author.new
8
+ @author.name.should == Author::ANONYMOUSE
9
+ end
10
+ end
@@ -0,0 +1,82 @@
1
+ require 'ronin/chars/chars'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Ronin do
6
+ describe Chars do
7
+ before(:all) do
8
+ @numeric_string = Chars.numeric.random_string(10)
9
+ @octal_string = Chars.octal.random_string(10)
10
+ @uppercase_hex_string = Chars.uppercase_hexadecimal.random_string(10)
11
+ @lowercase_hex_string = Chars.lowercase_hexadecimal.random_string(10)
12
+ @hex_string = Chars.hexadecimal.random_string(10)
13
+ @uppercase_alpha_string = Chars.uppercase_alpha.random_string(10)
14
+ @lowercase_alpha_string = Chars.lowercase_alpha.random_string(10)
15
+ @alpha_string = Chars.alpha.random_string(10)
16
+ @alpha_numeric = Chars.alpha_numeric.random_string(10)
17
+ @space_string = Chars.space.random_string(10)
18
+ @punctuation_string = Chars.punctuation.random_string(10)
19
+ @symbols_string = Chars.symbols.random_string(10)
20
+ @control_string = Chars.control.random_string(10)
21
+ @ascii_string = Chars.ascii.random_string(10)
22
+ @all_string = Chars.all.random_string(10)
23
+ end
24
+
25
+ it "should provide a numeric CharSet" do
26
+ (@numeric_string =~ /[0-9]{10}/).should_not be_nil
27
+ end
28
+
29
+ it "should provide an octal CharSet" do
30
+ (@octal_string =~ /[0-7]{10}/).should_not be_nil
31
+ end
32
+
33
+ it "should provide an upper-case hexadecimal CharSet" do
34
+ (@uppercase_hex_string =~ /[0-9A-F]{10}/).should_not be_nil
35
+ end
36
+
37
+ it "should provide a lower-case hexadecimal CharSet" do
38
+ (@lowercase_hex_string =~ /[0-9a-f]{10}/).should_not be_nil
39
+ end
40
+
41
+ it "should provide a hexadecimal CharSet" do
42
+ (@hex_string =~ /[0-9A-Fa-f]{10}/).should_not be_nil
43
+ end
44
+
45
+ it "should provide an upper-case alpha CharSet" do
46
+ (@uppercase_alpha_string =~ /[A-Z]{10}/).should_not be_nil
47
+ end
48
+
49
+ it "should provide a lower-case alpha CharSet" do
50
+ (@lowercase_alpha_string =~ /[a-z]{10}/).should_not be_nil
51
+ end
52
+
53
+ it "should provide an alpha CharSet" do
54
+ (@alpha_string =~ /[A-Za-z]{10}/).should_not be_nil
55
+ end
56
+
57
+ it "should provide an alpha-numeric CharSet" do
58
+ (@alpha_numeric_string =~ /[A-Za-z0-9]{10}/).should_not be_nil
59
+ end
60
+
61
+ it "should provide a space CharSet" do
62
+ (@space_string =~ /[ \f\n\r\t\v]{10}/).should_not be_nil
63
+ end
64
+
65
+ it "should provide a punctuation CharSet" do
66
+ (@punctuation_string =~ /[ \'\"\`\,\;\:\~\-\(\)\[\]\{\}\.\?\!]{10}/).should_not be_nil
67
+ end
68
+
69
+ it "should provide a symbols CharSet" do
70
+ #(@symbols_string =~ /[\@\#\$\%\^\&\*\_\+\=\|\\\<\>\/]{10}/).should_not be_nil
71
+ end
72
+
73
+ it "should provide a control CharSet" do
74
+ end
75
+
76
+ it "should provide an ascii CharSet" do
77
+ end
78
+
79
+ it "should provide an 'all' CharSet" do
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,84 @@
1
+ require 'ronin/context'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Ronin do
6
+ describe Context do
7
+ before(:all) do
8
+ require 'context/helpers/book_context'
9
+ require 'context/helpers/book_review_context'
10
+
11
+ @contexts_dir = File.expand_path(File.join(File.dirname(__FILE__),'helpers','contexts'))
12
+ @snow_crash_path = File.join(@contexts_dir,'snow_crash.rb')
13
+ @neuromancer_path = File.join(@contexts_dir,'neuromancer_review.rb')
14
+ end
15
+
16
+ it "should contain defined contexts" do
17
+ Context.is_context?(:book).should == true
18
+ end
19
+
20
+ it "should create a class-level context name" do
21
+ Book.context_name.should == :book
22
+ end
23
+
24
+ it "should raise an UnknownContext exception when loading unknwon-contexts" do
25
+ lambda {
26
+ Context.load_context(:nothing, 'some_path.rb')
27
+ }.should raise_error(UnknownContext)
28
+ end
29
+
30
+ it "should raise a ContextNotFound exception when loading from non-existant files" do
31
+ lambda {
32
+ Context.load_context(:book, 'not_here.rb')
33
+ }.should raise_error(ContextNotFound)
34
+ end
35
+
36
+ it "should load contexts by context-name from a file" do
37
+ @book = Context.load_context(:book, @snow_crash_path)
38
+ @book.should_not be_nil
39
+ @book.class.should == Book
40
+ end
41
+
42
+ it "should load a specific context from a file with multiple contexts" do
43
+ @book = Context.load_context(:book, @neuromancer_path)
44
+ @book.should_not be_nil
45
+ @book.class.should == Book
46
+
47
+ @review = Context.load_context(:book_review, @neuromancer_path)
48
+ @review.should_not be_nil
49
+ @review.class.should == BookReview
50
+ end
51
+
52
+ it "should provide class-level methods for loading a context" do
53
+ @book = Book.load_context(@snow_crash_path)
54
+ @book.should_not be_nil
55
+ @book.class.should == Book
56
+ end
57
+
58
+ it "should provide top-level ronin methods for loading a context" do
59
+ @book = ronin_load_book(@snow_crash_path)
60
+ @book.should_not be_nil
61
+ @book.class.should == Book
62
+ end
63
+
64
+ describe "loaded contexts" do
65
+ before(:all) do
66
+ @book = Book.load_context(@snow_crash_path)
67
+ end
68
+
69
+ it "should have a context name" do
70
+ @book.context_name.should == :book
71
+ end
72
+
73
+ it "should have attributes" do
74
+ @book.title.should == 'Snow Crash'
75
+ @book.author.should == 'Neal Stephenson'
76
+ end
77
+
78
+ it "should have instance methods" do
79
+ @book.methods.include?('rating').should == true
80
+ @book.rating.should == 10
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,15 @@
1
+ require 'ronin/context'
2
+
3
+ class Book
4
+
5
+ include Context
6
+
7
+ contextify :book
8
+
9
+ # Title of the book
10
+ attr_accessor :title
11
+
12
+ # Author of the book
13
+ attr_accessor :author
14
+
15
+ end
@@ -0,0 +1,21 @@
1
+ require 'ronin/context'
2
+
3
+ class BookReview
4
+
5
+ include Context
6
+
7
+ contextify :book_review
8
+
9
+ # Title of the book
10
+ attr_accessor :book_title
11
+
12
+ # Author of the book
13
+ attr_accessor :book_author
14
+
15
+ # Author of this review
16
+ attr_accessor :author
17
+
18
+ # Summary
19
+ attr_accessor :summary
20
+
21
+ end
@@ -0,0 +1,15 @@
1
+ ronin_book do
2
+ @title = 'Neuromancer'
3
+ @author = 'William Gibson'
4
+ end
5
+
6
+ ronin_book_review do
7
+ @book_title = 'Neuromancer'
8
+ @book_author = 'William Gibson'
9
+
10
+ @author = 'postmodern'
11
+ @summary = %{
12
+ Classic cyber-punk book. Provides you with a very realistic and gritty
13
+ vision of the future and the characters that inhabit it.
14
+ }
15
+ end
@@ -0,0 +1,8 @@
1
+ ronin_book do
2
+ @title = 'Snow Crash'
3
+ @author = 'Neal Stephenson'
4
+
5
+ def rating
6
+ 10
7
+ end
8
+ end
@@ -0,0 +1,38 @@
1
+ require 'ronin/extensions/hash'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hash do
6
+ before(:all) do
7
+ @hash = {:a => 1, :b => 2, :c => 3}
8
+ end
9
+
10
+ it "should be able to be exploded" do
11
+ @exploded = @hash.explode(:x)
12
+ @exploded.length.should == 3
13
+
14
+ @exploded.each do |key,new_hash|
15
+ new_hash[key].should == :x
16
+ end
17
+ end
18
+
19
+ it "should explode only with specific keys" do
20
+ @keys = [:a, :c]
21
+ @exploded = @hash.explode(:x, :included => @keys)
22
+
23
+ @exploded.each do |key,new_hash|
24
+ @keys.include?(key).should == true
25
+ new_hash[key].should == :x
26
+ end
27
+ end
28
+
29
+ it "should not explode on specified keys" do
30
+ @keys = [:b]
31
+ @exploded = @hash.explode(:x, :excluded => @keys)
32
+
33
+ @exploded.each do |key,new_hash|
34
+ @keys.include?(key).should == false
35
+ new_hash[key].should == :x
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ require 'ronin/extensions/string'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe String do
6
+ it "should be able to convert proper names to method names" do
7
+ "Proper Name".to_method_name.should == 'proper_name'
8
+ end
9
+
10
+ it "should be able to convert Class names to method names" do
11
+ "Namespace::Test".to_method_name.should == 'namespace_test'
12
+ end
13
+ end
@@ -0,0 +1,40 @@
1
+ require 'ronin/extensions/uri'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe URI::HTTP do
6
+ it "should include QueryParams" do
7
+ URI::HTTP.include?(URI::QueryParams).should == true
8
+ end
9
+
10
+ it "should have explodable query params" do
11
+ @url = URI('http://search.dhgate.com/search.do?dkp=1&searchkey=yarn&catalog=')
12
+
13
+ @urls = @url.explode_query_params('x')
14
+ @urls.each do |param,new_url|
15
+ new_url.query_params[param].should == 'x'
16
+ end
17
+ end
18
+
19
+ it "should only explode query params with specified params" do
20
+ @params = ['dkp', 'catalog']
21
+ @url = URI('http://search.dhgate.com/search.do?dkp=1&searchkey=yarn&catalog=')
22
+
23
+ @urls = @url.explode_query_params('x', :included => @params)
24
+ @urls.each do |param,new_url|
25
+ @params.include?(param).should == true
26
+ new_url.query_params[param].should == 'x'
27
+ end
28
+ end
29
+
30
+ it "should not explode query params with certain params" do
31
+ @params = ['searchkey']
32
+ @url = URI('http://search.dhgate.com/search.do?dkp=1&searchkey=yarn&catalog=')
33
+
34
+ @urls = @url.explode_query_params('x', :excluded => @params)
35
+ @urls.each do |param,new_url|
36
+ @params.include?(param).should == false
37
+ new_url.query_params[param].should == 'x'
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,38 @@
1
+ require 'ronin/extensions/uri'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe URI::QueryParams do
6
+ before(:each) do
7
+ @uri = URI('http://www.test.com/page.php?x=1&y=one%20two&z')
8
+ end
9
+
10
+ it "should provide #query_params" do
11
+ @uri.should respond_to(:query_params)
12
+ end
13
+
14
+ it "#query_params should be a Hash" do
15
+ @uri.query_params.class.should == Hash
16
+ end
17
+
18
+ it "#query_params should contain params" do
19
+ @uri.query_params.empty?.should == false
20
+ end
21
+
22
+ it "#query_params can contain single-word params" do
23
+ @uri.query_params['x'].should == '1'
24
+ end
25
+
26
+ it "#query_params can contain multi-word params" do
27
+ @uri.query_params['y'].should == 'one two'
28
+ end
29
+
30
+ it "#query_params can contain empty params" do
31
+ @uri.query_params['z'].should be_nil
32
+ end
33
+
34
+ it "should update #query_params along with #query=" do
35
+ @uri.query = 'u=3'
36
+ @uri.query_params['u'].should == '3'
37
+ end
38
+ end