Class: Rex::OLE::Util

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/ole/util.rb

Class Method Summary collapse

Class Method Details

.get16(buf, offset) ⇒ Object



99
100
101
102
103
104
105
106
# File 'lib/rex/ole/util.rb', line 99

def self.get16(buf, offset)
  @endian = LITTLE_ENDIAN if not @endian
  if (@endian == LITTLE_ENDIAN)
    buf[offset,2].unpack('v')[0]
  else
    buf[offset,2].unpack('n')[0]
  end
end

.get32(buf, offset) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/rex/ole/util.rb', line 63

def self.get32(buf, offset)
  @endian = LITTLE_ENDIAN if not @endian
  if (@endian == LITTLE_ENDIAN)
    buf[offset,4].unpack('V')[0]
  else
    buf[offset,4].unpack('N')[0]
  end
end

.get32array(buf) ⇒ Object



81
82
83
84
85
86
87
88
# File 'lib/rex/ole/util.rb', line 81

def self.get32array(buf)
  @endian = LITTLE_ENDIAN if not @endian
  if (@endian == LITTLE_ENDIAN)
    buf.unpack('V*')
  else
    buf.unpack('N*')
  end
end

.get64(buf, offset) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/rex/ole/util.rb', line 40

def self.get64(buf, offset)
  @endian = LITTLE_ENDIAN if not @endian
  if (@endian == LITTLE_ENDIAN)
    arr = buf[offset,8].unpack('VV')
    return (arr[0] + (arr[1] << 32))
  else
    arr = buf[offset,8].unpack('NN')
    return ((arr[0] << 32) + arr[1])
  end
end

.get8(buf, offset) ⇒ Object



117
118
119
# File 'lib/rex/ole/util.rb', line 117

def self.get8(buf, offset)
  buf[offset,1].unpack('C')[0]
end

.getUnicodeString(buf) ⇒ Object



126
127
128
129
130
131
132
# File 'lib/rex/ole/util.rb', line 126

def self.getUnicodeString(buf)
  buf = buf.unpack('v*').pack('C*')
  if (idx = buf.index(0x00.chr))
    buf.slice!(idx, buf.length)
  end
  buf
end

.Hexify32array(arr) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/rex/ole/util.rb', line 13

def self.Hexify32array(arr)
  ret = ""
  arr.each { |dw|
    ret << " " if ret.length > 0
    ret << "0x%08x" % dw
  }
  ret
end

.name_is_valid(name) ⇒ Object



143
144
145
146
147
148
149
# File 'lib/rex/ole/util.rb', line 143

def self.name_is_valid(name)
  return nil if (name.length > 31)
  (0..0x1f).to_a.each { |x|
    return nil if (name.include?(x.chr))
  }
  return true
end

.pack16(value) ⇒ Object



108
109
110
111
112
113
114
115
# File 'lib/rex/ole/util.rb', line 108

def self.pack16(value)
  @endian = LITTLE_ENDIAN if not @endian
  if (@endian == LITTLE_ENDIAN)
    [value].pack('v')
  else
    [value].pack('n')
  end
end

.pack32(value) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/rex/ole/util.rb', line 72

def self.pack32(value)
  @endian = LITTLE_ENDIAN if not @endian
  if (@endian == LITTLE_ENDIAN)
    [value].pack('V')
  else
    [value].pack('N')
  end
end

.pack32array(arr) ⇒ Object



90
91
92
93
94
95
96
97
# File 'lib/rex/ole/util.rb', line 90

def self.pack32array(arr)
  @endian = LITTLE_ENDIAN if not @endian
  if (@endian == LITTLE_ENDIAN)
    arr.pack('V*')
  else
    arr.pack('N*')
  end
end

.pack64(value) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rex/ole/util.rb', line 51

def self.pack64(value)
  @endian = LITTLE_ENDIAN if not @endian
  arr = []
  arr << (value & 0xffffffff)
  arr << (value >> 32)
  if (@endian == LITTLE_ENDIAN)
    arr.pack('VV')
  else
    arr.reverse.pack('NN')
  end
end

.pack8(value) ⇒ Object



121
122
123
# File 'lib/rex/ole/util.rb', line 121

def self.pack8(value)
  [value].pack('C')
end

.Printable(buf) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/rex/ole/util.rb', line 22

def self.Printable(buf)
  ret = ""
  buf.unpack('C*').each { |byte|
    ch = byte.chr
    if (byte < 0x20 || byte > 0x7e)
      ret << "\\x" + ch.unpack('H*')[0]
    else
      ret << ch
    end
  }
  ret
end

.putUnicodeString(buf) ⇒ Object



134
135
136
137
138
139
140
# File 'lib/rex/ole/util.rb', line 134

def self.putUnicodeString(buf)
  buf = buf.unpack('C*').pack('v*')
  if (buf.length < 0x40)
    buf << "\x00" * (0x40 - buf.length)
  end
  buf
end

.set_endian(endian) ⇒ Object



36
37
38
# File 'lib/rex/ole/util.rb', line 36

def self.set_endian(endian)
  @endian = endian
end