namespace EmmFilter
{
class Program
{
static void Main(string[] args)
{
// hier anpassen:
uint serial = 0x00123456;
string inputFile = @"astra19-11914H-dump.ts";
string outputFile = @"emmtest.txt";
// ab nachfolgend nix mehr anpassen :)
ushort header = 0x8270;
byte[] byteSerial = new byte[8];
byteSerial[0] = (byte)((serial >> 24) & 0xff);
byteSerial[1] = (byte)((serial >> 16) & 0xff);
byteSerial[2] = (byte)((serial >> 08) & 0xff);
byteSerial[3] = (byte)((serial >> 00) & 0xff);
using (FileStream fs = new FileStream(inputFile, FileMode.Open))
using (BinaryReader rdr = new BinaryReader(fs))
{
byte[] tspacket = new byte[188];
int emmlen = 0;
StringBuilder sball = new StringBuilder();
StringBuilder sbemm = new StringBuilder();
int count = 0;
int offset = 0;
while (fs.Position < fs.Length)
{
rdr.Read(tspacket, 0, 188); // packet einlesen.
offset = 0; // weil mehr als 1 EMM pro packet vorhanden sein kann.
while (true)
{
if (offset < 182 && ((tspacket[5 + offset] << 8) | tspacket[6 + offset]) == header) // header gefunden...
{
emmlen = tspacket[7 + offset];
if (emmlen > 188) //dann kann was nicht stimemen...
break;
bool serialFound = true;
for (int i = 0; i < 4; i++) // serial prüfen...
{
if (byteSerial[i] != tspacket[offset + i + 9])
{
serialFound = false;
break;
}
}
if (!serialFound)
{
offset += emmlen + 3; // besser zurückspringen nicht dass wir hier in vershclüsselten Daten gelandet sind...
continue;
}
// hier emm gefunden und komplett drin... :-)
Console.Write("EMM Found: ");
sbemm.Append(count.ToString("0000"));
sbemm.Append("/00/00 00:00:00 ");
sbemm.Append(ByteArrToString(byteSerial, 0, 8));
sbemm.Append(" ");
sbemm.Append(ByteArrToString(tspacket, offset + 5, emmlen + 3));
sball.AppendLine(sbemm.ToString());
Console.WriteLine(sbemm.ToString());
sbemm.Clear();
count++;
break;
}
else
{
break;
}
}
}
File.WriteAllText(outputFile, sball.ToString());
}
}
static string ByteArrToString(byte[] arr, int start, int len)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++)
{
sb.Append(arr[i + start].ToString("X2"));
}
return sb.ToString();
}
}
}