ronin-support 0.1.0.pre1
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.
- data/.document +4 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +504 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +23 -0
- data/README.md +98 -0
- data/Rakefile +29 -0
- data/gemspec.yml +20 -0
- data/lib/ronin/extensions.rb +28 -0
- data/lib/ronin/extensions/file.rb +63 -0
- data/lib/ronin/extensions/ip_addr.rb +220 -0
- data/lib/ronin/extensions/kernel.rb +45 -0
- data/lib/ronin/extensions/meta.rb +22 -0
- data/lib/ronin/extensions/meta/object.rb +24 -0
- data/lib/ronin/extensions/string.rb +200 -0
- data/lib/ronin/formatting.rb +26 -0
- data/lib/ronin/formatting/binary.rb +22 -0
- data/lib/ronin/formatting/digest.rb +22 -0
- data/lib/ronin/formatting/extensions.rb +25 -0
- data/lib/ronin/formatting/extensions/binary.rb +24 -0
- data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
- data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
- data/lib/ronin/formatting/extensions/digest.rb +23 -0
- data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
- data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
- data/lib/ronin/formatting/extensions/http.rb +23 -0
- data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
- data/lib/ronin/formatting/extensions/http/string.rb +102 -0
- data/lib/ronin/formatting/extensions/text.rb +23 -0
- data/lib/ronin/formatting/extensions/text/array.rb +125 -0
- data/lib/ronin/formatting/extensions/text/string.rb +206 -0
- data/lib/ronin/formatting/http.rb +22 -0
- data/lib/ronin/formatting/text.rb +22 -0
- data/lib/ronin/network.rb +29 -0
- data/lib/ronin/network/esmtp.rb +22 -0
- data/lib/ronin/network/extensions.rb +29 -0
- data/lib/ronin/network/extensions/esmtp.rb +22 -0
- data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
- data/lib/ronin/network/extensions/http.rb +22 -0
- data/lib/ronin/network/extensions/http/net.rb +661 -0
- data/lib/ronin/network/extensions/imap.rb +22 -0
- data/lib/ronin/network/extensions/imap/net.rb +124 -0
- data/lib/ronin/network/extensions/pop3.rb +22 -0
- data/lib/ronin/network/extensions/pop3/net.rb +92 -0
- data/lib/ronin/network/extensions/smtp.rb +22 -0
- data/lib/ronin/network/extensions/smtp/net.rb +110 -0
- data/lib/ronin/network/extensions/ssl.rb +22 -0
- data/lib/ronin/network/extensions/ssl/net.rb +147 -0
- data/lib/ronin/network/extensions/tcp.rb +22 -0
- data/lib/ronin/network/extensions/tcp/net.rb +304 -0
- data/lib/ronin/network/extensions/telnet.rb +22 -0
- data/lib/ronin/network/extensions/telnet/net.rb +156 -0
- data/lib/ronin/network/extensions/udp.rb +22 -0
- data/lib/ronin/network/extensions/udp/net.rb +226 -0
- data/lib/ronin/network/http.rb +24 -0
- data/lib/ronin/network/http/exceptions.rb +22 -0
- data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
- data/lib/ronin/network/http/http.rb +290 -0
- data/lib/ronin/network/http/proxy.rb +307 -0
- data/lib/ronin/network/imap.rb +49 -0
- data/lib/ronin/network/network.rb +41 -0
- data/lib/ronin/network/pop3.rb +49 -0
- data/lib/ronin/network/smtp.rb +24 -0
- data/lib/ronin/network/smtp/email.rb +143 -0
- data/lib/ronin/network/smtp/smtp.rb +68 -0
- data/lib/ronin/network/ssl.rb +47 -0
- data/lib/ronin/network/tcp.rb +22 -0
- data/lib/ronin/network/telnet.rb +109 -0
- data/lib/ronin/network/udp.rb +22 -0
- data/lib/ronin/path.rb +132 -0
- data/lib/ronin/support.rb +28 -0
- data/lib/ronin/support/inflector.rb +40 -0
- data/lib/ronin/support/version.rb +27 -0
- data/lib/ronin/templates.rb +23 -0
- data/lib/ronin/templates/erb.rb +75 -0
- data/lib/ronin/templates/template.rb +161 -0
- data/ronin-support.gemspec +10 -0
- data/spec/extensions/file_spec.rb +24 -0
- data/spec/extensions/ip_addr_spec.rb +171 -0
- data/spec/extensions/kernel_spec.rb +30 -0
- data/spec/extensions/string_spec.rb +177 -0
- data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
- data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
- data/spec/formatting/binary/integer_spec.rb +140 -0
- data/spec/formatting/binary/string_spec.rb +306 -0
- data/spec/formatting/digest/string_spec.rb +82 -0
- data/spec/formatting/http/integer_spec.rb +42 -0
- data/spec/formatting/http/string_spec.rb +76 -0
- data/spec/formatting/text/array_spec.rb +105 -0
- data/spec/formatting/text/string_spec.rb +180 -0
- data/spec/network/http/http_spec.rb +280 -0
- data/spec/network/http/proxy_spec.rb +150 -0
- data/spec/network/network_spec.rb +8 -0
- data/spec/network/ssl_spec.rb +14 -0
- data/spec/path_spec.rb +84 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support_spec.rb +8 -0
- data/spec/templates/classes/example_erb.rb +11 -0
- data/spec/templates/classes/example_template.rb +35 -0
- data/spec/templates/erb_spec.rb +21 -0
- data/spec/templates/helpers/data.rb +9 -0
- data/spec/templates/helpers/data/includes/_relative.erb +1 -0
- data/spec/templates/helpers/data/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +54 -0
- metadata +286 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/formatting/extensions/digest/string'
|
|
23
|
+
require 'ronin/formatting/extensions/digest/file'
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'digest/md5'
|
|
23
|
+
require 'digest/sha1'
|
|
24
|
+
require 'digest/sha2'
|
|
25
|
+
|
|
26
|
+
class File
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# Calculates the MD5 checksum of a file.
|
|
30
|
+
#
|
|
31
|
+
# @param [String] path
|
|
32
|
+
# The path to the file.
|
|
33
|
+
#
|
|
34
|
+
# @return [String]
|
|
35
|
+
# The MD5 checksum of the file.
|
|
36
|
+
#
|
|
37
|
+
# @example
|
|
38
|
+
# File.md5('data.txt')
|
|
39
|
+
# # => "5d41402abc4b2a76b9719d911017c592"
|
|
40
|
+
#
|
|
41
|
+
def File.md5(path)
|
|
42
|
+
Digest::MD5.file(path).hexdigest
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Calculates the SHA1 checksum of a file.
|
|
47
|
+
#
|
|
48
|
+
# @param [String] path
|
|
49
|
+
# The path to the file.
|
|
50
|
+
#
|
|
51
|
+
# @return [String]
|
|
52
|
+
# The SHA1 checksum of the file.
|
|
53
|
+
#
|
|
54
|
+
# @example
|
|
55
|
+
# File.sha1('data.txt')
|
|
56
|
+
# # => "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d"
|
|
57
|
+
#
|
|
58
|
+
def File.sha1(path)
|
|
59
|
+
Digest::SHA1.file(path).hexdigest
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
#
|
|
63
|
+
# @see File.sha1
|
|
64
|
+
#
|
|
65
|
+
def File.sha128(path)
|
|
66
|
+
File.sha1(path)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#
|
|
70
|
+
# Calculates the SHA256 checksum of a file.
|
|
71
|
+
#
|
|
72
|
+
# @param [String] path
|
|
73
|
+
# The path to the file.
|
|
74
|
+
#
|
|
75
|
+
# @return [String]
|
|
76
|
+
# The SHA256 checksum of the file.
|
|
77
|
+
#
|
|
78
|
+
# @example
|
|
79
|
+
# File.sha256('data.txt')
|
|
80
|
+
# # => "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
|
|
81
|
+
#
|
|
82
|
+
def File.sha256(path)
|
|
83
|
+
Digest::SHA256.file(path).hexdigest
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# @see File.sha256
|
|
88
|
+
#
|
|
89
|
+
def File.sha2(path)
|
|
90
|
+
File.sha256(path)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# Calculates the SHA512 checksum of a file.
|
|
95
|
+
#
|
|
96
|
+
# @param [String] path
|
|
97
|
+
# The path to the file.
|
|
98
|
+
#
|
|
99
|
+
# @return [String]
|
|
100
|
+
# The SHA512 checksum of the file.
|
|
101
|
+
#
|
|
102
|
+
# @example
|
|
103
|
+
# File.sha512('data.txt')
|
|
104
|
+
# # => "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043"
|
|
105
|
+
#
|
|
106
|
+
def File.sha512(path)
|
|
107
|
+
Digest::SHA512.file(path).hexdigest
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
#
|
|
111
|
+
# @see File.sha512
|
|
112
|
+
#
|
|
113
|
+
def File.sha5(path)
|
|
114
|
+
File.sha512(path)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'digest/md5'
|
|
23
|
+
require 'digest/sha1'
|
|
24
|
+
require 'digest/sha2'
|
|
25
|
+
|
|
26
|
+
class String
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# @return [String]
|
|
30
|
+
# The MD5 checksum of the String.
|
|
31
|
+
#
|
|
32
|
+
# @example
|
|
33
|
+
# "hello".md5
|
|
34
|
+
# # => "5d41402abc4b2a76b9719d911017c592"
|
|
35
|
+
#
|
|
36
|
+
def md5
|
|
37
|
+
Digest::MD5.hexdigest(self)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# @return [String]
|
|
42
|
+
# The SHA1 checksum of the String.
|
|
43
|
+
#
|
|
44
|
+
# @example
|
|
45
|
+
# "hello".sha1
|
|
46
|
+
# # => "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d"
|
|
47
|
+
#
|
|
48
|
+
def sha1
|
|
49
|
+
Digest::SHA1.hexdigest(self)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
alias sha128 sha1
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# @return [String]
|
|
56
|
+
# The SHA2 checksum of the String.
|
|
57
|
+
#
|
|
58
|
+
# @example
|
|
59
|
+
# "hello".sha2
|
|
60
|
+
# # => "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
|
|
61
|
+
#
|
|
62
|
+
def sha256
|
|
63
|
+
Digest::SHA256.hexdigest(self)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
alias sha2 sha256
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# @return [String]
|
|
70
|
+
# The SHA512 checksum of the String.
|
|
71
|
+
#
|
|
72
|
+
# @example
|
|
73
|
+
# "hello".sha512
|
|
74
|
+
# # => "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043"
|
|
75
|
+
#
|
|
76
|
+
def sha512
|
|
77
|
+
Digest::SHA512.hexdigest(self)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/formatting/extensions/http/integer'
|
|
23
|
+
require 'ronin/formatting/extensions/http/string'
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'uri'
|
|
23
|
+
require 'cgi'
|
|
24
|
+
|
|
25
|
+
class Integer
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# URI encodes the byte.
|
|
29
|
+
#
|
|
30
|
+
# @return [String]
|
|
31
|
+
# The URI encoded byte.
|
|
32
|
+
#
|
|
33
|
+
def uri_encode
|
|
34
|
+
URI.encode(self.chr)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# URI escapes the byte.
|
|
39
|
+
#
|
|
40
|
+
# @return [String]
|
|
41
|
+
# The URI escaped byte.
|
|
42
|
+
#
|
|
43
|
+
def uri_escape
|
|
44
|
+
CGI.escape(self.chr)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Formats the byte for HTTP.
|
|
49
|
+
#
|
|
50
|
+
# @return [String]
|
|
51
|
+
# The formatted byte.
|
|
52
|
+
#
|
|
53
|
+
def format_http
|
|
54
|
+
"%%%x" % self
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/formatting/extensions/http/integer'
|
|
23
|
+
require 'ronin/formatting/extensions/text'
|
|
24
|
+
|
|
25
|
+
require 'uri'
|
|
26
|
+
require 'cgi'
|
|
27
|
+
|
|
28
|
+
class String
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# URI encodes the String.
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
# The URI encoded form of the String.
|
|
35
|
+
#
|
|
36
|
+
# @example
|
|
37
|
+
# "art is graffiti".uri_encode
|
|
38
|
+
# # => "art%20is%20graffiti"
|
|
39
|
+
#
|
|
40
|
+
def uri_encode
|
|
41
|
+
URI.encode(self)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# URI decodes the String.
|
|
46
|
+
#
|
|
47
|
+
# @return [String]
|
|
48
|
+
# The decoded URI form of the String.
|
|
49
|
+
#
|
|
50
|
+
# @example
|
|
51
|
+
# "genre%3f".uri_decode
|
|
52
|
+
# # => "genre?"
|
|
53
|
+
#
|
|
54
|
+
def uri_decode
|
|
55
|
+
URI.decode(self)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# URI escapes the String.
|
|
60
|
+
#
|
|
61
|
+
# @return [String]
|
|
62
|
+
# The URI escaped form of the String.
|
|
63
|
+
#
|
|
64
|
+
# @example
|
|
65
|
+
# "x > y".uri_escape
|
|
66
|
+
# # => "x+%3E+y"
|
|
67
|
+
#
|
|
68
|
+
def uri_escape
|
|
69
|
+
CGI.escape(self)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# URI unescapes the String.
|
|
74
|
+
#
|
|
75
|
+
# @return [String]
|
|
76
|
+
# The unescaped URI form of the String.
|
|
77
|
+
#
|
|
78
|
+
# @example
|
|
79
|
+
# "sweet+%26+sour".uri_unescape
|
|
80
|
+
# # => "sweet & sour"
|
|
81
|
+
#
|
|
82
|
+
def uri_unescape
|
|
83
|
+
CGI.unescape(self)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# Formats the bytes of the String.
|
|
88
|
+
#
|
|
89
|
+
# @return [String]
|
|
90
|
+
# The HTTP hexidecimal encoded form of the String.
|
|
91
|
+
#
|
|
92
|
+
# @example
|
|
93
|
+
# "hello".format_http
|
|
94
|
+
# # => "%68%65%6c%6c%6f"
|
|
95
|
+
#
|
|
96
|
+
# @see String#format_bytes
|
|
97
|
+
#
|
|
98
|
+
def format_http(options={})
|
|
99
|
+
format_bytes(options) { |b| b.format_http }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/formatting/extensions/text/string'
|
|
23
|
+
require 'ronin/formatting/extensions/text/array'
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
class Array
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# Decodes the bytes contained within the Array. The Array may contain
|
|
26
|
+
# both Integer and String objects.
|
|
27
|
+
#
|
|
28
|
+
# @return [Array]
|
|
29
|
+
# The bytes contained within the Array.
|
|
30
|
+
#
|
|
31
|
+
# @example
|
|
32
|
+
# [0x41, 0x41, 0x20].bytes
|
|
33
|
+
# # => [0x41, 0x41, 0x20]
|
|
34
|
+
#
|
|
35
|
+
# @example
|
|
36
|
+
# ['A', 'BB', 0x90].bytes
|
|
37
|
+
# # => [0x41, 0x42, 0x42, 0x90]
|
|
38
|
+
#
|
|
39
|
+
def bytes
|
|
40
|
+
self.inject([]) do |accum,elem|
|
|
41
|
+
if elem.kind_of?(Integer)
|
|
42
|
+
accum << elem
|
|
43
|
+
else
|
|
44
|
+
elem.to_s.each_byte { |b| accum << b }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
accum
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
#
|
|
52
|
+
# Decodes the characters contained within the Array. The Array may contain
|
|
53
|
+
# either Integer or String objects.
|
|
54
|
+
#
|
|
55
|
+
# @return [Array]
|
|
56
|
+
# The characters generated from the array.
|
|
57
|
+
#
|
|
58
|
+
# @example
|
|
59
|
+
# [0x41, 0x41, 0x20].chars
|
|
60
|
+
# # => ["A", "A", " "]
|
|
61
|
+
#
|
|
62
|
+
def chars
|
|
63
|
+
array_bytes = self.bytes
|
|
64
|
+
|
|
65
|
+
array_bytes.map! { |b| b.chr }
|
|
66
|
+
return array_bytes
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#
|
|
70
|
+
# @return [String]
|
|
71
|
+
# The String created from the characters within the Array.
|
|
72
|
+
#
|
|
73
|
+
# @example
|
|
74
|
+
# [0x41, 0x41, 0x20].char_string
|
|
75
|
+
# # => "AA "
|
|
76
|
+
#
|
|
77
|
+
def char_string
|
|
78
|
+
chars.join
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#
|
|
82
|
+
# Decodes the bytes contained with the Array, and escapes them as
|
|
83
|
+
# hexadecimal characters.
|
|
84
|
+
#
|
|
85
|
+
# @return [Array<String>]
|
|
86
|
+
# The hexidecimal characters contained within the Array.
|
|
87
|
+
#
|
|
88
|
+
# @example
|
|
89
|
+
# [0x41, 0x41, 0x20].bytes
|
|
90
|
+
# # => ['\x41', '\x41', '\x20']
|
|
91
|
+
#
|
|
92
|
+
# @example
|
|
93
|
+
# ['A', 'BB', 0x90].bytes
|
|
94
|
+
# # => ['\x41', '\x42', '\x42', '\x90']
|
|
95
|
+
#
|
|
96
|
+
def hex_chars
|
|
97
|
+
array_bytes = self.bytes
|
|
98
|
+
|
|
99
|
+
array_bytes.map! { |b| '\x%x' % b }
|
|
100
|
+
return array_bytes
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
#
|
|
104
|
+
# Decodes the bytes contained with the Array, and escapes them as
|
|
105
|
+
# hexadecimal integers.
|
|
106
|
+
#
|
|
107
|
+
# @return [Array<String>]
|
|
108
|
+
# The hexidecimal integers contained within the Array.
|
|
109
|
+
#
|
|
110
|
+
# @example
|
|
111
|
+
# [0x41, 0x41, 0x20].bytes
|
|
112
|
+
# # => ['0x41', '0x41', '0x20']
|
|
113
|
+
#
|
|
114
|
+
# @example
|
|
115
|
+
# ['A', 'BB', 0x90].bytes
|
|
116
|
+
# # => ['0x41', '0x42', '0x42', '0x90']
|
|
117
|
+
#
|
|
118
|
+
def hex_integers
|
|
119
|
+
array_bytes = self.bytes
|
|
120
|
+
|
|
121
|
+
array_bytes.map! { |b| '0x%x' % b }
|
|
122
|
+
return array_bytes
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
end
|