rbkb 0.6.11 → 0.6.12

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.
@@ -1,3 +1,7 @@
1
+ == 0.6.12 / 2009-10-15
2
+ * better ruby 1.8 <-> 1.9 portability
3
+ * tweaked rotate_bytes to "wrap" on char boundary and rotate backwards safely
4
+
1
5
  == 0.6.11 / 2009-10-06
2
6
  * split off rbkb/http as its own package
3
7
  * added some new String crypto utilities in extends
@@ -2,7 +2,7 @@
2
2
  module Rbkb
3
3
 
4
4
  # :stopdoc:
5
- VERSION = '0.6.11'
5
+ VERSION = '0.6.12'
6
6
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
7
7
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
8
8
  # :startdoc:
@@ -4,6 +4,7 @@
4
4
  require "stringio"
5
5
  require 'zlib'
6
6
  require 'open3'
7
+ require 'enumerator'
7
8
 
8
9
  module Rbkb
9
10
  DEFAULT_BYTE_ORDER=:big
@@ -33,8 +34,28 @@ end if not defined? with
33
34
  # Mixins and class-specific items
34
35
 
35
36
  class String
37
+ # fake the ruby 1.9 String#bytes method if we don't have one
38
+ def bytes
39
+ ::Enumerable::Enumerator.new(self, :each_byte)
40
+ end if not defined?("".bytes)
41
+
42
+ # fake the ruby 1.9 String#getbyte method if we don't have one
43
+ def getbyte(i)
44
+ self[i]
45
+ end if RUBY_VERSION.to_f < 1.9 and not defined?("".getbyte)
46
+
47
+ # fake the ruby 1.9 String#ord method if we don't have one
48
+ def ord
49
+ getbyte(0)
50
+ end if not defined?("".ord)
51
+
52
+ # Works just like each_with_index, but with each_byte
53
+ def each_byte_with_index
54
+ bytes.each_with_index {|b,i| yield(b,i) }
55
+ end
56
+
36
57
  # shortcut for hex sanity with regex
37
- def ishex? ; (self =~ /^[a-f0-9]+$/i)? true : false ; end
58
+ def ishex? ; (self =~ /^[a-f0-9]+$/i) != nil ; end
38
59
 
39
60
  # Encode into percent-hexify url encoding format
40
61
  def urlenc(opts={})
@@ -46,7 +67,7 @@ class String
46
67
  hx = Rbkb::HEXCHARS
47
68
 
48
69
  s.gsub(opts[:rx]) do |c|
49
- c=c[0]
70
+ c=c.ord
50
71
  (plus and c==32)? '+' : "%" + (hx[(c >> 4)] + hx[(c & 0xf )])
51
72
  end
52
73
  end
@@ -69,24 +90,22 @@ class String
69
90
  end
70
91
 
71
92
  # Base64 decode
72
- def d64; self.unpack("m")[0]; end
93
+ def d64; self.unpack("m").first ; end
73
94
 
74
95
  # right-align to 'a' alignment padded with 'p'
75
96
  def ralign(a, p=' ')
76
- s=self
77
97
  p ||= ' '
78
- l = s.length
98
+ l = self.length
79
99
  pad = l.pad(a)
80
- s.rjust(pad+l, p)
100
+ self.rjust(pad+l, p)
81
101
  end
82
102
 
83
103
  # left-align to 'a' alignment padded with 'p'
84
104
  def lalign(a, p=' ')
85
- s=self
86
105
  p ||= ' '
87
- l = s.length
106
+ l = self.length
88
107
  pad = l.pad(a)
89
- s.ljust(pad+l, p)
108
+ self.ljust(pad+l, p)
90
109
  end
91
110
 
92
111
 
@@ -97,7 +116,6 @@ class String
97
116
  # :suffix - suffix after each hex byte
98
117
  #
99
118
  def hexify(opts={})
100
- s=self
101
119
  delim = opts[:delim]
102
120
  pre = (opts[:prefix] || "")
103
121
  suf = (opts[:suffix] || "")
@@ -110,7 +128,7 @@ class String
110
128
 
111
129
  out=Array.new
112
130
 
113
- s.each_byte do |c|
131
+ self.each_byte do |c|
114
132
  hc = if (rx and not rx.match c.chr)
115
133
  c.chr
116
134
  else
@@ -205,11 +223,6 @@ class String
205
223
  # ["t", 242],
206
224
  # ["o", 233],
207
225
  # ["i", 218],
208
- # ["a", 176],
209
- # ["s", 172],
210
- # ["r", 172],
211
- # ["n", 167],
212
- # ["d", 106],
213
226
  # ...
214
227
  # ]
215
228
  #
@@ -219,16 +232,14 @@ class String
219
232
  hits.to_a.sort {|a,b| b[1] <=> a[1] }
220
233
  end
221
234
 
222
-
223
235
  # xor against a key. key will be repeated or truncated to self.size.
224
236
  def xor(k)
225
- s=self
226
- out=StringIO.new ; i=0;
227
- s.each_byte do |x|
228
- out.write((x ^ (k[i] || k[i=0]) ).chr)
229
- i+=1
230
- end
231
- out.string
237
+ i=0
238
+ self.bytes.map do |b|
239
+ x = k.getbyte(i) || k.getbyte(i=0)
240
+ i+=1
241
+ (b ^ x).chr
242
+ end.join
232
243
  end
233
244
 
234
245
 
@@ -256,15 +267,9 @@ class String
256
267
 
257
268
 
258
269
  # Byte rotation as found in lame ciphers.
259
- # This was cribbed from Timur Duehr with only a minor change.
260
270
  def rotate_bytes(k=0)
261
- r = self.dup
262
- i=0
263
- self.each_byte do |b|
264
- r[i] = ((b + k) % 384).chr
265
- i+=1
266
- end
267
- return r
271
+ k = (256 + k) if k < 0
272
+ self.bytes.map {|c| ((c + k) & 0xff).chr }.join
268
273
  end
269
274
 
270
275
 
@@ -320,7 +325,7 @@ class String
320
325
  out.write(" " * (len-i) ) # pad
321
326
  out.write(" ") if i < hlen
322
327
 
323
- out.write(" |" + m.tr("\0-\37\177-\377", '.') + "|\n")
328
+ out.write(" |#{m.tr("\0-\37\177-\377", '.')}|\n")
324
329
  off += m.length
325
330
  end
326
331
 
@@ -4,6 +4,8 @@
4
4
 
5
5
  require "rbkb"
6
6
 
7
+ begin require 'rubygems' ; rescue LoadError ; end
8
+ require 'eventmachine'
7
9
  require "rbkb/plug/plug"
8
10
  require "rbkb/plug/blit"
9
11
 
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{rbkb}
5
- s.version = "0.6.11"
5
+ s.version = "0.6.12"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Eric Monti"]
9
- s.date = %q{2009-10-07}
9
+ s.date = %q{2009-11-02}
10
10
  s.description = %q{Rbkb is a collection of ruby-based pen-testing and reversing tools. Inspired by Matasano Blackbag.}
11
11
  s.email = %q{emonti@matasano.com}
12
12
  s.executables = ["b64", "bgrep", "blit", "c", "crc32", "d64", "dedump", "feed", "hexify", "len", "plugsrv", "rex", "rstrings", "slice", "telson", "unhexify", "urldec", "urlenc", "xor"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbkb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.11
4
+ version: 0.6.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Monti
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-07 00:00:00 -05:00
12
+ date: 2009-11-02 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -195,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
195
  requirements: []
196
196
 
197
197
  rubyforge_project: rbkb
198
- rubygems_version: 1.3.4
198
+ rubygems_version: 1.3.5
199
199
  signing_key:
200
200
  specification_version: 3
201
201
  summary: Rbkb is a collection of ruby-based pen-testing and reversing tools