CrackMe.apk
Download file
package com.google.android.exoplayer2.extractor.ts;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.extractor.ExtractorOutput;
import com.google.android.exoplayer2.extractor.TrackOutput;
import com.google.android.exoplayer2.extractor.ts.TsPayloadReader;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray;
public final class Id3Reader implements ElementaryStreamReader {
private static final String TAG = "Id3Reader";
private final ParsableByteArray id3Header = new ParsableByteArray(10);
private TrackOutput output;
private int sampleBytesRead;
private int sampleSize;
private long sampleTimeUs = C.TIME_UNSET;
private boolean writingSample;
public void seek() {
this.writingSample = false;
this.sampleTimeUs = C.TIME_UNSET;
}
public void createTracks(ExtractorOutput extractorOutput, TsPayloadReader.TrackIdGenerator trackIdGenerator) {
trackIdGenerator.generateNewId();
TrackOutput track = extractorOutput.track(trackIdGenerator.getTrackId(), 5);
this.output = track;
track.format(new Format.Builder().setId(trackIdGenerator.getFormatId()).setSampleMimeType(MimeTypes.APPLICATION_ID3).build());
}
public void packetStarted(long j, int i) {
if ((i & 4) != 0) {
this.writingSample = true;
if (j != C.TIME_UNSET) {
this.sampleTimeUs = j;
}
this.sampleSize = 0;
this.sampleBytesRead = 0;
}
}
public void consume(ParsableByteArray parsableByteArray) {
Assertions.checkStateNotNull(this.output);
if (this.writingSample) {
int bytesLeft = parsableByteArray.bytesLeft();
int i = this.sampleBytesRead;
if (i < 10) {
int min = Math.min(bytesLeft, 10 - i);
System.arraycopy(parsableByteArray.getData(), parsableByteArray.getPosition(), this.id3Header.getData(), this.sampleBytesRead, min);
if (this.sampleBytesRead + min == 10) {
this.id3Header.setPosition(0);
if (73 == this.id3Header.readUnsignedByte() && 68 == this.id3Header.readUnsignedByte() && 51 == this.id3Header.readUnsignedByte()) {
this.id3Header.skipBytes(3);
this.sampleSize = this.id3Header.readSynchSafeInt() + 10;
} else {
Log.w(TAG, "Discarding invalid ID3 tag");
this.writingSample = false;
return;
}
}
}
int min2 = Math.min(bytesLeft, this.sampleSize - this.sampleBytesRead);
this.output.sampleData(parsableByteArray, min2);
this.sampleBytesRead += min2;
}
}
public void packetFinished() {
int i;
Assertions.checkStateNotNull(this.output);
if (this.writingSample && (i = this.sampleSize) != 0 && this.sampleBytesRead == i) {
long j = this.sampleTimeUs;
if (j != C.TIME_UNSET) {
this.output.sampleMetadata(j, 1, i, 0, (TrackOutput.CryptoData) null);
}
this.writingSample = false;
}
}
}
Download file