ronin 0.2.1 → 0.2.2
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/History.txt +25 -0
- data/Manifest.txt +36 -11
- data/README.txt +6 -8
- data/Rakefile +2 -1
- data/lib/ronin/config.rb +0 -3
- data/lib/ronin/environment.rb +1 -1
- data/lib/ronin/extensions/string.rb +0 -11
- data/lib/ronin/formatting/extensions/binary/integer.rb +24 -12
- data/lib/ronin/formatting/extensions/binary/string.rb +166 -0
- data/lib/ronin/formatting/extensions/text/string.rb +4 -4
- data/lib/ronin/license.rb +42 -12
- data/lib/ronin/os.rb +3 -2
- data/lib/ronin/platform/extension.rb +11 -141
- data/lib/ronin/platform/extension_cache.rb +11 -0
- data/lib/ronin/platform/overlay.rb +56 -25
- data/lib/ronin/platform/overlay_cache.rb +1 -1
- data/lib/ronin/platform/platform.rb +14 -3
- data/lib/ronin/platform/ronin.rb +20 -1
- data/lib/ronin/platform/tasks/spec.rb +9 -0
- data/lib/ronin/{chars.rb → static.rb} +2 -2
- data/lib/ronin/static/finders.rb +144 -0
- data/lib/ronin/static/static.rb +53 -0
- data/lib/ronin/ui/command_line/commands/add.rb +21 -5
- data/lib/ronin/ui/command_line/commands/install.rb +19 -3
- data/lib/ronin/ui/command_line/commands/rm.rb +1 -1
- data/lib/ronin/ui/command_line/commands/uninstall.rb +1 -1
- data/lib/ronin/ui/command_line/commands/update.rb +9 -2
- data/lib/ronin/version.rb +1 -1
- data/spec/extensions/string_spec.rb +0 -10
- data/spec/formatting/binary/helpers/hexdumps.rb +14 -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 +61 -1
- data/spec/formatting/binary/string_spec.rb +166 -9
- data/spec/platform/extension_cache_spec.rb +8 -0
- data/spec/platform/helpers/overlays.yaml.erb +3 -0
- data/spec/platform/helpers/overlays/hello/ronin.xml +1 -1
- data/spec/platform/helpers/overlays/random/random/extension.rb +7 -0
- data/spec/platform/helpers/overlays/random/ronin.xml +26 -0
- data/spec/platform/helpers/overlays/test1/ronin.xml +2 -2
- data/spec/platform/helpers/overlays/test2/ronin.xml +2 -2
- data/spec/platform/overlay_cache_spec.rb +5 -3
- data/spec/platform/overlay_spec.rb +35 -0
- data/spec/platform/ronin_spec.rb +13 -1
- data/spec/static/finders_spec.rb +55 -0
- data/spec/static/helpers/static.rb +11 -0
- data/spec/static/helpers/static1/dir/two.txt +0 -0
- data/spec/static/helpers/static1/one.txt +0 -0
- data/spec/static/helpers/static2/dir/two.txt +0 -0
- data/spec/static/helpers/static_class.rb +7 -0
- data/spec/static/static_spec.rb +24 -0
- data/static/{overlay.xsl → ronin/platform/overlay.xsl} +0 -0
- metadata +50 -17
- data/bin/ronin-ext +0 -12
- data/bin/ronin-overlay +0 -12
- data/lib/ronin/chars/char_set.rb +0 -198
- data/lib/ronin/chars/chars.rb +0 -190
- data/lib/ronin/ui/command_line/commands/ext.rb +0 -70
- data/lib/ronin/ui/command_line/commands/overlay.rb +0 -189
- data/spec/chars/char_set_spec.rb +0 -175
- data/spec/chars/chars_spec.rb +0 -107
- data/static/extension.rb +0 -9
data/History.txt
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
=== 0.2.2 / 2009-03-26
|
2
|
+
|
3
|
+
* Split out Ronin::Chars into the Chars library.
|
4
|
+
* Split out ronin-overlay and ronin-ext sub-commands into the Ronin Gen
|
5
|
+
library.
|
6
|
+
* Require chars >= 0.1.0.
|
7
|
+
* Require repertoire >= 0.2.1.
|
8
|
+
* Removed String#to_method_name, use Extlib instead.
|
9
|
+
* Refactored Ronin::Platform::Overlay.
|
10
|
+
* Renamed Overlay#media_type to Overlay#media.
|
11
|
+
* Fixed parsing bugs in Overlay#initialize_metadata.
|
12
|
+
* Allow Extensions to be accessed via constants.
|
13
|
+
* Added the Creative Commons Zero license to Ronin::License.
|
14
|
+
* Added the Integer#bytes method.
|
15
|
+
* Added the String#hex_unescape method.
|
16
|
+
* Added the String#unhexdump method.
|
17
|
+
* Added Ronin::Static for managing static resources.
|
18
|
+
* Added Ronin::Static::Finders for searching for static files.
|
19
|
+
* Added static directories to Overlays and Extensions.
|
20
|
+
* Added ronin/platform/tasks:
|
21
|
+
* Added ronin/platform/tasks/spec task for running RSpec tests in an
|
22
|
+
Overlay.
|
23
|
+
* Added the ExtensionCache#reload! method.
|
24
|
+
* Added more specs.
|
25
|
+
|
1
26
|
=== 0.2.1 / 2009-02-23
|
2
27
|
|
3
28
|
* Added Ronin::UI::Verbose.
|
data/Manifest.txt
CHANGED
@@ -7,16 +7,17 @@ Rakefile
|
|
7
7
|
bin/ronin
|
8
8
|
bin/ronin-add
|
9
9
|
bin/ronin-console
|
10
|
-
bin/ronin-ext
|
11
10
|
bin/ronin-help
|
12
11
|
bin/ronin-install
|
13
12
|
bin/ronin-ls
|
14
|
-
bin/ronin-overlay
|
15
13
|
bin/ronin-rm
|
16
14
|
bin/ronin-uninstall
|
17
15
|
bin/ronin-update
|
18
16
|
lib/ronin.rb
|
19
17
|
lib/ronin/config.rb
|
18
|
+
lib/ronin/static.rb
|
19
|
+
lib/ronin/static/static.rb
|
20
|
+
lib/ronin/static/finders.rb
|
20
21
|
lib/ronin/extensions.rb
|
21
22
|
lib/ronin/extensions/meta.rb
|
22
23
|
lib/ronin/extensions/meta/object.rb
|
@@ -41,9 +42,6 @@ lib/ronin/formatting/extensions/text.rb
|
|
41
42
|
lib/ronin/formatting/extensions/text/string.rb
|
42
43
|
lib/ronin/formatting/extensions/http.rb
|
43
44
|
lib/ronin/formatting/extensions/http/string.rb
|
44
|
-
lib/ronin/chars.rb
|
45
|
-
lib/ronin/chars/char_set.rb
|
46
|
-
lib/ronin/chars/chars.rb
|
47
45
|
lib/ronin/translators.rb
|
48
46
|
lib/ronin/translators/translator.rb
|
49
47
|
lib/ronin/path.rb
|
@@ -122,6 +120,7 @@ lib/ronin/objectify/objectify.rb
|
|
122
120
|
lib/ronin/models.rb
|
123
121
|
lib/ronin/environment.rb
|
124
122
|
lib/ronin/platform.rb
|
123
|
+
lib/ronin/platform/tasks/spec.rb
|
125
124
|
lib/ronin/platform/exceptions.rb
|
126
125
|
lib/ronin/platform/exceptions/extension_not_found.rb
|
127
126
|
lib/ronin/platform/exceptions/overlay_cached.rb
|
@@ -151,8 +150,6 @@ lib/ronin/ui/command_line/command.rb
|
|
151
150
|
lib/ronin/ui/command_line/options.rb
|
152
151
|
lib/ronin/ui/command_line/param_parser.rb
|
153
152
|
lib/ronin/ui/command_line/commands/console.rb
|
154
|
-
lib/ronin/ui/command_line/commands/overlay.rb
|
155
|
-
lib/ronin/ui/command_line/commands/ext.rb
|
156
153
|
lib/ronin/ui/command_line/commands/add.rb
|
157
154
|
lib/ronin/ui/command_line/commands/install.rb
|
158
155
|
lib/ronin/ui/command_line/commands/ls.rb
|
@@ -166,16 +163,42 @@ lib/ronin/version.rb
|
|
166
163
|
tasks/spec.rb
|
167
164
|
spec/helpers.rb
|
168
165
|
spec/spec_helper.rb
|
166
|
+
spec/static/helpers/static1/one.txt
|
167
|
+
spec/static/helpers/static1/dir/two.txt
|
168
|
+
spec/static/helpers/static2/dir/two.txt
|
169
|
+
spec/static/helpers/static.rb
|
170
|
+
spec/static/helpers/static_class.rb
|
171
|
+
spec/static/finders_spec.rb
|
172
|
+
spec/static/static_spec.rb
|
169
173
|
spec/arch_spec.rb
|
170
174
|
spec/author_spec.rb
|
171
|
-
spec/chars/char_set_spec.rb
|
172
|
-
spec/chars/chars_spec.rb
|
173
175
|
spec/translators/translator_spec.rb
|
174
176
|
spec/objectify/objectify_spec.rb
|
175
177
|
spec/extensions/hash_spec.rb
|
176
178
|
spec/extensions/string_spec.rb
|
177
179
|
spec/extensions/uri/http_spec.rb
|
178
180
|
spec/extensions/uri/query_params_spec.rb
|
181
|
+
spec/formatting/binary/helpers/hexdumps.rb
|
182
|
+
spec/formatting/binary/helpers/hexdumps/repeated.bin
|
183
|
+
spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt
|
184
|
+
spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt
|
185
|
+
spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt
|
186
|
+
spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt
|
187
|
+
spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt
|
188
|
+
spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt
|
189
|
+
spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt
|
190
|
+
spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt
|
191
|
+
spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt
|
192
|
+
spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt
|
193
|
+
spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt
|
194
|
+
spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt
|
195
|
+
spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt
|
196
|
+
spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt
|
197
|
+
spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt
|
198
|
+
spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt
|
199
|
+
spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt
|
200
|
+
spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt
|
201
|
+
spec/formatting/binary/helpers/hexdumps/od_repeated.txt
|
179
202
|
spec/formatting/binary/integer_spec.rb
|
180
203
|
spec/formatting/binary/string_spec.rb
|
181
204
|
spec/formatting/digest_spec.rb
|
@@ -197,7 +220,10 @@ spec/platform/helpers/overlays/test2/ronin.xml
|
|
197
220
|
spec/platform/helpers/overlays/test2/test/extension.rb
|
198
221
|
spec/platform/helpers/overlays/hello/ronin.xml
|
199
222
|
spec/platform/helpers/overlays/hello/hello/extension.rb
|
223
|
+
spec/platform/helpers/overlays/random/ronin.xml
|
224
|
+
spec/platform/helpers/overlays/random/random/extension.rb
|
200
225
|
spec/platform/extension_spec.rb
|
226
|
+
spec/platform/overlay_spec.rb
|
201
227
|
spec/platform/overlay_cache_spec.rb
|
202
228
|
spec/platform/extension_cache_spec.rb
|
203
229
|
spec/platform/platform_spec.rb
|
@@ -206,5 +232,4 @@ spec/ui/verbose_spec.rb
|
|
206
232
|
spec/ui/command_line/helpers/example_command.rb
|
207
233
|
spec/ui/command_line/param_parser_spec.rb
|
208
234
|
spec/ronin_spec.rb
|
209
|
-
static/overlay.xsl
|
210
|
-
static/extension.rb
|
235
|
+
static/ronin/platform/overlay.xsl
|
data/README.txt
CHANGED
@@ -29,7 +29,7 @@ users to pick and choose what functionality they want in Ronin.
|
|
29
29
|
|
30
30
|
Ronin does not have a central repository of exploits and payloads which
|
31
31
|
all developers contribute to. Instead Ronin has Overlays, repositories of
|
32
|
-
code that can be hosted on any
|
32
|
+
code that can be hosted on any SVN/Hg/Git/Rsync server. Users can then use
|
33
33
|
Ronin to quickly install or update Overlays. This allows developers and
|
34
34
|
users to form their own communities, independent of the main developers
|
35
35
|
of Ronin.
|
@@ -38,11 +38,10 @@ of Ronin.
|
|
38
38
|
|
39
39
|
* Supports installing/updating/uninstalling of Overlays.
|
40
40
|
* Supports accessing Overlays from various media types:
|
41
|
-
* CVS
|
42
41
|
* Subversion (SVN)
|
42
|
+
* Mercurial (Hg)
|
43
43
|
* Git
|
44
44
|
* Rsync
|
45
|
-
* Darcs
|
46
45
|
* Allows for the loading of Extensions from one or more Overlays.
|
47
46
|
* Provides persistent storage of objects using DataMapper.
|
48
47
|
* Caches and mirrors objects stored in Overlays using DataMapper.
|
@@ -147,13 +146,12 @@ Google (tm) Dorks functionality.
|
|
147
146
|
Ronin Exploits is a Ruby library for Ronin that provides exploitation and
|
148
147
|
payload crafting functionality.
|
149
148
|
|
150
|
-
=== Ronin
|
149
|
+
=== Ronin Gen
|
151
150
|
|
152
|
-
* http://ronin.rubyforge.org/
|
153
|
-
* http://github.com/postmodern/ronin-
|
151
|
+
* http://ronin.rubyforge.org/gen/
|
152
|
+
* http://github.com/postmodern/ronin-gen
|
154
153
|
|
155
|
-
Ronin
|
156
|
-
complex HTML/JavaScript or crafting XSS/CSRF attacks.
|
154
|
+
Ronin Gen is a Ruby library for Ronin that provides various generators.
|
157
155
|
|
158
156
|
=== Ronin SQL
|
159
157
|
|
data/Rakefile
CHANGED
@@ -19,10 +19,11 @@ Hoe.new('ronin', Ronin::VERSION) do |p|
|
|
19
19
|
['dm-aggregates', '>=0.9.9'],
|
20
20
|
['dm-validations', '>=0.9.9'],
|
21
21
|
['dm-predefined', '>=0.1.0'],
|
22
|
+
['chars', '>=0.1.0'],
|
22
23
|
['parameters', '>=0.1.3'],
|
23
24
|
['contextify', '>=0.1.2'],
|
24
25
|
['reverse-require', '>=0.3.1'],
|
25
|
-
['repertoire', '>=0.1
|
26
|
+
['repertoire', '>=0.2.1']
|
26
27
|
]
|
27
28
|
end
|
28
29
|
|
data/lib/ronin/config.rb
CHANGED
@@ -31,9 +31,6 @@ module Ronin
|
|
31
31
|
# Ronin home directory
|
32
32
|
PATH = FileUtils.mkdir_p(File.join(HOME,'.ronin'))
|
33
33
|
|
34
|
-
# Path to static directory
|
35
|
-
STATIC_DIR = File.expand_path(File.join(File.dirname(__FILE__),'..','..','static'))
|
36
|
-
|
37
34
|
# Main configuration file
|
38
35
|
CONFIG_PATH = File.join(PATH,'config.rb')
|
39
36
|
|
data/lib/ronin/environment.rb
CHANGED
@@ -24,13 +24,13 @@
|
|
24
24
|
require 'ronin/config'
|
25
25
|
require 'ronin/extensions'
|
26
26
|
require 'ronin/formatting'
|
27
|
-
require 'ronin/chars'
|
28
27
|
require 'ronin/path'
|
29
28
|
require 'ronin/network'
|
30
29
|
require 'ronin/models'
|
31
30
|
require 'ronin/ui'
|
32
31
|
require 'ronin/ronin'
|
33
32
|
|
33
|
+
require 'chars'
|
34
34
|
require 'pp'
|
35
35
|
|
36
36
|
Ronin::Config.load
|
@@ -23,17 +23,6 @@
|
|
23
23
|
|
24
24
|
class String
|
25
25
|
|
26
|
-
#
|
27
|
-
# Converts the +String+ into an appropriate method name.
|
28
|
-
#
|
29
|
-
# 'GPL 2'.to_method_name # => "gpl_2"
|
30
|
-
#
|
31
|
-
# 'Ronin::Arch' # => "ronin_arch"
|
32
|
-
#
|
33
|
-
def to_method_name
|
34
|
-
downcase.gsub(/(::|[\s\-])/,'_')
|
35
|
-
end
|
36
|
-
|
37
26
|
#
|
38
27
|
# Returns the common prefix of the string and the specified _other_
|
39
28
|
# string. If no common prefix can be found an empty string will be
|
@@ -26,29 +26,28 @@ require 'ronin/arch'
|
|
26
26
|
class Integer
|
27
27
|
|
28
28
|
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
# length of the _arch_.
|
32
|
-
#
|
33
|
-
# 0x41.pack(Arch.i686) # => "A\000\000\000"
|
29
|
+
# Returns an Array of bytes which represent the integer, using the
|
30
|
+
# specified _address_length_ and given _endian_.
|
34
31
|
#
|
35
|
-
#
|
32
|
+
# _endian_ must be either <tt>:little</tt>, <tt>:big</tt> or
|
33
|
+
# <tt>:net</tt>.
|
36
34
|
#
|
37
|
-
def
|
38
|
-
|
35
|
+
def bytes(address_length,endian=:little)
|
36
|
+
endian = endian.to_s
|
37
|
+
buffer = []
|
39
38
|
|
40
|
-
if
|
39
|
+
if (endian == 'little' || endian == 'net')
|
41
40
|
mask = 0xff
|
42
41
|
|
43
42
|
address_length.times do |i|
|
44
|
-
buffer
|
43
|
+
buffer << ((self & mask) >> (i*8))
|
45
44
|
mask <<= 8
|
46
45
|
end
|
47
|
-
elsif
|
46
|
+
elsif endian == 'big'
|
48
47
|
mask = (0xff << ((address_length-1)*8))
|
49
48
|
|
50
49
|
address_length.times do |i|
|
51
|
-
buffer
|
50
|
+
buffer << ((self & mask) >> ((address_length-i-1)*8))
|
52
51
|
mask >>= 8
|
53
52
|
end
|
54
53
|
end
|
@@ -56,6 +55,19 @@ class Integer
|
|
56
55
|
return buffer
|
57
56
|
end
|
58
57
|
|
58
|
+
#
|
59
|
+
# Packs the integer using the specified _arch_ and the given
|
60
|
+
# _address_length_. The _address_length_ will default to the address
|
61
|
+
# length of the _arch_.
|
62
|
+
#
|
63
|
+
# 0x41.pack(Arch.i686) # => "A\000\000\000"
|
64
|
+
#
|
65
|
+
# 0x41.pack(Arch.ppc,2) # => "\000A"
|
66
|
+
#
|
67
|
+
def pack(arch,address_length=arch.address_length)
|
68
|
+
bytes(address_length,arch.endian).map { |b| b.chr }.join
|
69
|
+
end
|
70
|
+
|
59
71
|
#
|
60
72
|
# Returns the hex escaped form of the integer.
|
61
73
|
#
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#++
|
22
22
|
#
|
23
23
|
|
24
|
+
require 'ronin/formatting/extensions/binary/integer'
|
24
25
|
require 'ronin/formatting/extensions/text'
|
25
26
|
require 'ronin/arch'
|
26
27
|
|
@@ -67,6 +68,61 @@ class String
|
|
67
68
|
format_bytes(options) { |b| "\\x%.2x" % b }
|
68
69
|
end
|
69
70
|
|
71
|
+
#
|
72
|
+
# Returns an unescaped version of the hex escaped string.
|
73
|
+
#
|
74
|
+
# "\\x68\\x65\\x6c\\x6c\\x6f".hex_unescape
|
75
|
+
# # => "hello"
|
76
|
+
#
|
77
|
+
def hex_unescape
|
78
|
+
buffer = ''
|
79
|
+
hex_index = 0
|
80
|
+
hex_length = length
|
81
|
+
|
82
|
+
while (hex_index < hex_length)
|
83
|
+
hex_substring = self[hex_index..-1]
|
84
|
+
|
85
|
+
if hex_substring =~ /^\\[0-7]{3}/
|
86
|
+
buffer << hex_substring[0..3].to_i(8)
|
87
|
+
hex_index += 3
|
88
|
+
elsif hex_substring =~ /^\\x[0-9a-fA-F]{1,2}/
|
89
|
+
hex_substring[2..-1].scan(/^[0-9a-fA-F]{1,2}/) do |hex_byte|
|
90
|
+
buffer << hex_byte.to_i(16)
|
91
|
+
hex_index += (2 + hex_byte.length)
|
92
|
+
end
|
93
|
+
elsif hex_substring =~ /^\\./
|
94
|
+
escaped_char = hex_substring[1..1]
|
95
|
+
|
96
|
+
buffer << case escaped_char
|
97
|
+
when '0'
|
98
|
+
"\0"
|
99
|
+
when 'a'
|
100
|
+
"\a"
|
101
|
+
when 'b'
|
102
|
+
"\b"
|
103
|
+
when 't'
|
104
|
+
"\t"
|
105
|
+
when 'n'
|
106
|
+
"\n"
|
107
|
+
when 'v'
|
108
|
+
"\v"
|
109
|
+
when 'f'
|
110
|
+
"\f"
|
111
|
+
when 'r'
|
112
|
+
"\r"
|
113
|
+
else
|
114
|
+
escaped_char
|
115
|
+
end
|
116
|
+
hex_index += 2
|
117
|
+
else
|
118
|
+
buffer << hex_substring[0]
|
119
|
+
hex_index += 1
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
return buffer
|
124
|
+
end
|
125
|
+
|
70
126
|
#
|
71
127
|
# XOR encodes the string using the specified _key_.
|
72
128
|
#
|
@@ -91,4 +147,114 @@ class String
|
|
91
147
|
Base64.decode64(self)
|
92
148
|
end
|
93
149
|
|
150
|
+
#
|
151
|
+
# Converts a multitude of hexdump formats back into the original
|
152
|
+
# raw-data using the given _options_.
|
153
|
+
#
|
154
|
+
# _options_ may contain the following keys:
|
155
|
+
# <tt>:format</tt>:: The expected format of the hexdump. Must be either
|
156
|
+
# <tt>:od</tt> or <tt>:hexdump</tt>.
|
157
|
+
# <tt>:encoding</tt>:: Denotes the encoding used for the bytes within the
|
158
|
+
# hexdump. Must be one of the following:
|
159
|
+
# <tt>:binary</tt>:: Binary encoded bytes.
|
160
|
+
# <tt>:octal</tt>:: Octal encoding.
|
161
|
+
# <tt>:octal_bytes</tt>:: Octal encoded bytes.
|
162
|
+
# <tt>:octal_shorts</tt>:: Octal encoded shorts.
|
163
|
+
# <tt>:octal_ints</tt>:: Octal encoded integers.
|
164
|
+
# <tt>:octal_quads</tt>:: Octal encoded quads.
|
165
|
+
# <tt>:decimal</tt>:: Unsigned decimal encoding.
|
166
|
+
# <tt>:decimal_bytes</tt>:: Unsigned decimal bytes.
|
167
|
+
# <tt>:decimal_shorts</tt>:: Unsigned decimal shorts.
|
168
|
+
# <tt>:decimal_ints</tt>:: Unsigned decimal ints.
|
169
|
+
# <tt>:decimal_quads</tt>:: Unsigned decimal quads.
|
170
|
+
# <tt>:hex</tt>:: Hexadecimal encoding.
|
171
|
+
# <tt>:hex_bytes</tt>:: Hexadecimal bytes.
|
172
|
+
# <tt>:hex_shorts</tt>:: Hexadecimal shorts.
|
173
|
+
# <tt>:hex_ints</tt>:: Hexadecimal ints.
|
174
|
+
# <tt>:hex_quads</tt>:: Hexadecimal quads.
|
175
|
+
# <tt>:segment</tt>:: The length in bytes of each segment in the hexdump.
|
176
|
+
# Defaults to 16, if not specified.
|
177
|
+
#
|
178
|
+
def unhexdump(options={})
|
179
|
+
case (format = options[:format])
|
180
|
+
when :od
|
181
|
+
address_base = base = 8
|
182
|
+
word_size = 2
|
183
|
+
when :hexdump
|
184
|
+
address_base = base = 16
|
185
|
+
word_size = 2
|
186
|
+
else
|
187
|
+
address_base = base = 16
|
188
|
+
word_size = 1
|
189
|
+
end
|
190
|
+
|
191
|
+
case options[:encoding]
|
192
|
+
when :binary
|
193
|
+
base = 2
|
194
|
+
when :octal, :octal_bytes, :octal_shorts, :octal_ints, :octal_quads
|
195
|
+
base = 8
|
196
|
+
when :decimal, :decimal_bytes, :decimal_shorts, :decimal_ints, :decimal_quads
|
197
|
+
base = 10
|
198
|
+
when :hex, :hex_bytes, :hex_shorts, :hex_ints, :hex_quads
|
199
|
+
base = 16
|
200
|
+
end
|
201
|
+
|
202
|
+
case options[:encoding]
|
203
|
+
when :binary, :octal_bytes, :decimal_bytes, :hex_bytes
|
204
|
+
word_size = 1
|
205
|
+
when :octal_shorts, :decimal_shorts, :hex_shorts
|
206
|
+
word_size = 2
|
207
|
+
when :octal_ints, :decimal_ints, :hex_ints
|
208
|
+
word_size = 4
|
209
|
+
when :octal_quads, :decimal_quads, :hex_quads
|
210
|
+
word_size = 8
|
211
|
+
end
|
212
|
+
|
213
|
+
current_addr = last_addr = first_addr = nil
|
214
|
+
repeated = false
|
215
|
+
|
216
|
+
segment_length = (options[:segment] || 16)
|
217
|
+
segment = []
|
218
|
+
buffer = []
|
219
|
+
|
220
|
+
each_line do |line|
|
221
|
+
if format == :hexdump
|
222
|
+
line = line.gsub(/\s+\|.+\|\s*$/,'')
|
223
|
+
end
|
224
|
+
|
225
|
+
words = line.split
|
226
|
+
|
227
|
+
if words.first == '*'
|
228
|
+
repeated = true
|
229
|
+
elsif words.length > 0
|
230
|
+
current_addr = words.shift.to_i(address_base)
|
231
|
+
first_addr ||= current_addr
|
232
|
+
|
233
|
+
if repeated
|
234
|
+
(((current_addr - last_addr) / segment.length) - 1).times do
|
235
|
+
buffer += segment
|
236
|
+
end
|
237
|
+
|
238
|
+
repeated = false
|
239
|
+
end
|
240
|
+
|
241
|
+
segment.clear
|
242
|
+
|
243
|
+
words.each do |word|
|
244
|
+
if (base != 10 && word =~ /^(\\[0abtnvfr\\]|.)$/)
|
245
|
+
word.hex_unescape.each_byte { |b| segment << b }
|
246
|
+
else
|
247
|
+
segment += word.to_i(base).bytes(word_size)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
segment = segment[0...segment_length]
|
252
|
+
buffer += segment
|
253
|
+
last_addr = current_addr
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
return buffer[0...(last_addr - first_addr)]
|
258
|
+
end
|
259
|
+
|
94
260
|
end
|