EMM
EMM - How to block, save, select and write with OSCam
Begriffsbestimmung
EMM = Entitlement Management Messages werden mit dem TV-Stream ausgesendet und lösen durch Zusammenwirken von SmartCard und CardReader (ggf mit entsprechenden Interfaces) auf der Empfängerseite bestimmte Aktionen aus, wie z.B.
- Aktivieren bzw. Freischalten der SmartCard
- Verlängerungen der Gültigkeit
- Hinzuwählen von bestimmten Sendungen
- Pairen (verheiraten) mit einem bestimmten Receiver
OSCam unterscheidet vier Arten von EMM:
- unique = nur für eine ganz bestimmte SmartCard eines Providers
- shared = für eine bestimmte Gruppe von SmartCards eines Providers
- global = für alle SmartCards eines Providers
- unknown = unbekannte EMM
Dieses Wiki befasst sich mit den Möglichkeiten von OSCam, eingehende EMM für SmartCards auf dem Cardserver zu
- blocken (block)
- sichern (save)
- filtern (select) und schließlich manuell auf die SmartCard zu
- schreiben (write)
EMM-Management
Die Configuration der oscam.server ermöglicht dem CardReader, die beim Client eingehenden EMM auf unterschiedliche Weise zu behandeln.
block
Hiermit wird die Weiterleitung der EMM an die SmartCard blockiert. Sie wird also nicht auf die Karte geschrieben. Man kann die einzelnen EMM-Arten separat mit Setzen einer 1 blockieren:
- blockemm-u = blockiert nur unique EMM
- blockemm-s = blockiert nur shared EMM
- blockemm-g = blockiert nur global EMM
- blockemm-unknown = blockiert nur unbekannte EMM
Der Default-Wert ist bei allen 4 Parametern 0, also nicht geblockt!
Will man alle EMM an einer Weiterleitung zur SmartCard hindern, muss bei allen vier obengenannten Parametern eine 1 gesetzt werden!
Eine Sonderstellung nimmt folgender Parameter ein:
- blockemm-bylen
Damit können EMM aller oben aufgeführten Arten mit einer bestimmten Länge blockiert werden. Eine Kombination zwischen den 4 EMM-Arten und blockemm-bylen ist nicht nur möglich sondern auch zweckmäßig.
Beispiel: blockemm-u = 0 blockemm-s = 1 blockemm-g = 1 blockemm-unknown = 1 blockemm-bylen = 50-60,100-110
Es werden alle unique EMM auf die SmartCard geschrieben mit Ausnahme der Längen 50 bis 60 und 100 bis 110.
Achtung:
Es ist zweckmäßig, einen Range in blockemm-bylen nicht mit einer 0 zu beginnen! Bei einer 0 am Anfang eines Ranges haben User negative Erfahrungen mit dem Durchrutschen unerwünschter EMM gemacht. Besser die 1 wählen!
save
In bestimmten Fällen ist es zweckmäßig, die EMM zu prüfen, bevor sie auf die SmartCard geschrieben werden. Das kann man nicht, wenn man sie nur, wie oben beschrieben, blockt. Sie müssen also zunächst gesichert werden, damit man sie prüfen und ggf. manuell auf die SmartCard schreiben kann.
Vorbedingung ist, dass in oscam.conf[global] ein Pfad für die Sicherung der Logdaten festgelegt ist:
Beispiel: /var/log/oscam/emm.log/
Oder im WebIF.
Wenn dort nichts eingetragen wird, gilt als Default-Wert das Verzeichnis, in dem die Config steht!
Das Verzeichnis wird nicht von Oscam erstellt. Es muss bereits auf der Festplatte vorhanden sein.
In der oscam.server stehen folgende Speichermöglichkeiten zur Verfügung:
- saveemm-u = speichern der unique EMM
- saveemm-s = speichern der share EMM
- saveemm-g = speichern der global EMM
- save-unknown = speichern der unknown EMM
Defaultwert ist für alle 0 = keine Speicherung. Mit dem Setzen von 1 wird eine Speicherung unter dem in oscam.conf[global] festgelegten Pfad vorgenommen.
Diese Parameter können auch im WebIf verwaltet werden:
select
Aus den gespeicherten EMM kann man nun die EMM heraussuchen, die man auf die SmartCard schreiben möchte. Das macht man am besten mit copy&paste (siehe nächster Abschnitt!).
write
Das WebIf bietet unter dem Tab Reader die Möglichkeit, einzelne EMM manuell auf die SmartCard zu schreiben:
Man erhält dann folgendes Bild:
In den oberen Abschnitt fügt man die gewünschte EMM mit copy&paste ein.
Die CAID muss nicht eingetragen werden!
Erläuterung:(Schelle76 StB)
Einen Pfad muss man nur angeben, wenn man eine EMM aus einer Datei (z.B. var/log/oscam/emm.log) schreiben will. Solange man es nur händisch macht, benötigt man keinen Pfad.
Beispiel NDS/Videogard V14 SmartCard
Anhand einer V14 SmartCard (NDS/Videogard) soll die praktische Anwendung des EMM-Management beschrieben werden. Die nachfolgenden Ausführungen sind eine Zusammenfassung der wesentlichen Erkenntnisse aus diesem sehr umfangreichen Streamboard-Thread
FAQ
Unpair
Q: Ist eine "Trennung" zwischen Karte und Receiver möglich?
A: Nein (Stand 23.08.2014)
Pair
Q: Mit welcher Hardware kann die Karte überhaupt gepaired werden?
A: Pairing ist nur mit Sky NDS zertifizierten HD Receivern / Sky CI+ möglich. Die Pairingaktivierung per EMM ist jedoch in jedem Videoguard (Soft)CAM möglich!
Erste Inbetriebnahme
Q: Werden Karte und Receiver bereits "gepaired" geliefert?
A: Nein (Stand 23.08.2014)
Q: Was ist zu beachten, wenn ich die neue Karte und den neuen Receiver erhalten habe?
A: Karte erst in einen Receiver, CAM oder Cardreader stecken, nachdem sichergestellt ist, dass die EMMs geblockt werden. Das gilt z.B. auch für einen OSCam-Reader, erst alle EMMs blocken, dann Karte einstecken.
Karte und Sender freischalten
Nachfolgende Tabelle führt die Längen in Hex von Unique-EMMs auf, die bisher erfolgreich zur Aktivierung der Karte und anschließender Aktivierung/Verlängerung der Tiers genutzt worden sind.
Beispiel 0x85/0x32: Eine EMM mit Länge 0x85 wurde geloggt und manuell auf die Karte geschrieben, was die Karte aktivierte. Danach folgte irgendwann eine EMM mit Länge 0x32, die ebenso manuell auf die Karte geschrieben wurde und die letztendlich die Erleuchtung brachte, sprich die Tiers aktivierte/verlängerte.
Stand: 06.09.2014
EMM-Length activate Card | EMM-Length activate Programs (Tiers) |
---|---|
51 | 33 |
6D | 34 |
84 | 2f |
84 | 35 |
8C | 35 |
85 | 32 |
85 | 34 |
85 | 36 |
88 | 33 |
88 | 34 |
88 | 35 |
91 | 33 |
block
Da die EMM, die die
- Aktivierung bzw. Freischaltung
- Verlängerung
- Entitlements
- Select Bestellungen
- Pairing
auf der SmartCard veranlassen, alle kartenspezifisch, also unique sind, können die übrigen EMM-Arten geblockt werden.
Eine unique EMM erkennt man auch daran, dass sie die Serial-Nr. der SmartCard enthält!
Die oscam.server wird daher wie folgt konfiguriert:
blockemm-s = 1 blockemm-g = 1 blockemm-unknown = 1
Da wir (derzeit noch) nicht wissen, welche EMM das Pairing mit dem Receiver bzw. CI verursachen und welche Längen diese EMM haben, werden die nach augenblicklichem Erkenntnisstand gefährlichen EMM herausgefiltert mit:
blockemm-bylen = 1-38,40,42-44,65-124,126-127,131,139-255
Achtung: Das ist nur ein Beispiel! Die Parameter sollten ständig mit der V14-Sammelliste hier abgeglichen werden!
Damit wird folgendes erreicht:
- Alle share, global und unknown EMM werden geblockt
- Zur SmartCard werden nur die unique EMM durchgelassen
- Diese unique EMM werden aber über den Parameter blockemm-bylen so gefiltert, dass nur gute EMM auf die SmartCard gelangen.
Mit diesen Vorkehrungen hat man nach dem augenblicklichen Stand der Erkenntnisse eigentlich schon alles getan, um eine Hochzeit zwischen SmartCard und Receiver bzw. CI zu verhindern.
save
Falls sich etwas bei den EMM von Provider-Seite ändert, ist es gut, wenn man sich diese EMM anschauen und bei Bedarf manuell auf die Smartcard schreiben kann.
Daher folgender Eintrag in die oscam.server:
saveemm-u = 1
Es besteht keine Notwendigkeit, auch die übrigen EMM (s,g,unknown) zu loggen und zu speichern
Hier ein FileZilla-Ausschnit, der anzeigt, was dort gespeichert wird:
- Auf der *.bin sind die Logdaten im bin-Format. Diese Datei wird eigentlich nirgendwo mehr benötigt. Sie sollte im Rahmen der weiteren Programmpflege von OSCam wegfallen, da sie nur irritiert!
- Die *.log sind die mit saveemm und ggf. mit blockemm-bylen gefilterten EMM. Die kann kann man sich am besten mit Wordpad oder einem anderen Editor anschauen und die ausgesuchten EMM dann mit copy&paste auf die Karte schreiben.
Achtung: Ab Revision 9741 von OSCam werden separate Log-Dateien für die die einzelnen EMM-Arten (unknown, unique, share und global) ausgegeben!
select
pepo83 hat hier eine Liste im Streamboard-Forum angelegt, die etwas über die guten und bösen EMM aussagt.
write
Wenn man keine Filterung über den Parameter blockemm-bylen vornimmt, sondern auch die unique EMM mit blockemm-u blockt, muss man die erforderlichen EMM anhand der Liste von pepo83 aus den mit saveemm-u gespeicherten EMM einzeln heraussuchen, auf die SmartCard schreiben (siehe oben!) und schauen, was dann passiert. Dies ist eine Methode, mit der man sich vorsichtig an die guten EMM herantasten kann und die auch bei der Schaffung dieser Liste im o.g. Thread Pate gestanden hat.
Hier noch eine Faustregel von derdaa aus dem StB:
EMM-BLOCK und LOG
- Freischalten lassen
- 40 Minuten Warten
- Log Auslesen, die EMM die nach 30 Minuten nicht mehr kommt Schreiben (das ist die Freischaltung)
- die Kürzeste EMM (Im HEX 20-40 gesammt 108 Zeichen ist die Verlängerung)
Mehr nicht machen; da hat man dann meist um die 3 Monate Ruhe und bis dahin gibt es evtl schon was neues!
Fusebyte
Das Fusebyte gibt darüber Auskunft, in welchem Aktivierungszustand sich die SmartCard befindet:
Format 15 48 xx 00 nicht aktiviert 05 aktiviert 25 gepairt (mit Receiver verheiratet) <--- was wir unter allen Umständen vermeiden wollen!
Das Fusebyte findet man, wenn man im WebIF auf der Status-Seite unten den Debug-Modus ALL auswählt, danach den Reader neu startet und nach der Folge 15 48 XX sucht.
Sollte Switch Debug from 0 to 0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 ALL auf der Status Seite nicht angezeigt werden, dann unter Config -> WebIf -> Show/Hide in Status -> Show aktivieren!
Alternativ dazu kann der Debug Modus auch im LiveLog geändert werden. Dazu muss dort der Button Einstellungen anzeigen gedrückt werden.
Ein Tipp von User kaggee aus dem StB: Für alle, die das Fusebyte im Oscamlog nicht finden: Die Standardgröße für das OSCam.log von 256 KB auf 1.500 KB erhöhen, dann kann man das Fusebyte sehen!
Payload
Über die Bedeutung dieses EMM-Bestandteils besteht noch keine Einigkeit. Es gibt Meinungen, die dem Payload eine größere Bedeutung als dem Fusebyte zumessen.
Sichtbar wird es im Log, wenn im WebIF Status-Seite unten im Debug-Level die Ziffern 2 und 4 ausgewählt werden:
Dann erscheint in der 2. Logzeile nach [videogard2]Decrypted eine HEX-Ziffernfolge
0F 06 02 30 vor dem Aktivieren der Karte 0F 06 02 10 nach dem Aktivieren der Karte 0F 06 02 00 beim Schreiben der Tiers
Weitere Erkenntnisse hierüber liegen noch nicht vor!
Script für Fusebyte und Payload
brain666 vom Stb hat ein script entwickelt, das das Ermitteln und Auslesen von Fusebyte und Payload erleichtert
Download: Fusebyte-Payload-Script
Achtung:
es muss curl im Image vorhanden sein, zur Not muss es nachinstalliert werden. curl ist ein Hilfsprogramm, um über die Kommandozeile Webinformationen abrufen zu können. Hier im Skript wird das Webinterface von OSCAM abgefragt.
Nachinstallation von curl wenn nötig mit
code opkg update opkg install curl
<syntaxhighlight lang="bash">
- !/bin/sh
TEMP="/tmp/tempfile" LOGIN="benutzer" PW="passwort" IP="127.0.0.1" PORT="12345" KARTE="sky.v14.lokal1" LOGPFAD="/opt/lampp/htdocs/oscam17000/os17000.log"
PLATZ="################################" curl -s --digest -o - -u $LOGIN:$PW "http://$IP:$PORT/status.html?debug=65535" > $TEMP printf "switching debug to 65535 ... \n"; rm -f $TEMP
curl -s --digest -o - -u $LOGIN:$PW "http://$IP:$PORT/readers.html?label=$KARTE&action=disable" > $TEMP printf "$KARTE DISABLED ... waiting 1 sec. \n"; rm -f $TEMP sleep 1 curl -s --digest -o - -u $LOGIN:$PW "http://$IP:$PORT/readers.html?label=$KARTE&action=enable" > $TEMP printf "$KARTE ENABLED ... waiting 15 sec. until Card finished \n"; rm -f $TEMP sleep 15 printf "$PLATZ \n"; printf "## checking fusebyte \n";
- grep -A 3 -B 1 "15 48 " $LOGPFAD |tail -n 1
grep -A 2 -B 1 "15 48 " $LOGPFAD | grep -A 1 "Answer from cardreader" | grep -A 1 " $KARTE " | tail -n 2 > $TEMP cat $TEMP | tail -n 2 rm -f $TEMP printf "$PLATZ \n"; printf "15 48 00 = Virgin \n"; printf "15 48 05 = Active \n"; printf "15 48 25 = Married/Activated \n"; curl -s --digest -o - -u $LOGIN:$PW "http://$IP:$PORT/status.html?debug=0" > $TEMP rm -f $TEMP printf "$PLATZ \n"; printf "## checking Payload \n"; cat $LOGPFAD | grep -A 0 -B 3 "00 0F 06 " | grep Dec | tail -n 1 >> $TEMP cat $LOGPFAD | grep -A 0 -B 3 "00 0F 06 " | tail -n 1 >> $TEMP cat $TEMP | tail -n 2 rm -f $TEMP printf "$PLATZ \n"; printf "0F 06 02 30 = vor dem Aktivieren der Karte \n"; printf "0F 06 02 10 = nach dem Aktivieren der Karte \n"; printf "0F 06 02 00 = beim Schreiben der Tiers \n"; printf "$PLATZ \n"; printf "$PLATZ \n"; printf "switching debug to 0 ... done \n"; exit 1 </syntaxhighlight>
so sieht dann ein Ergebnis aus:
root@Linux:/opt/check.sh switching debug to 65535 ... sky.v14.lokal1 DISABLED ... waiting 1 sec. sky.v14.lokal1 ENABLED ... waiting 15 sec. until Card finished ################################ ## checking fusebyte 2014/05/10 17:53:11 8BB7658 r sky.v14.lokal1 [mouse] Answer from cardreader: 2014/05/10 17:53:11 8BB7658 15 48 25 00 63 xxxxxxxxxxxxxxxxx ################################ 15 48 00 = Virgin 15 48 05 = Active 15 48 25 = Married/Activated ################################ ## checking Payload 2014/05/10 17:53:23 8BB7658 r sky.v14.lokal1 [videoguard2] Decrypted payload 2014/05/10 17:53:23 8BB7658 00 00 0E 02 03 00 0F 06 02 00 xxxxxxxxxxxxx <---- ################################ 0F 06 02 30 = vor dem Aktivieren der Karte 0F 06 02 10 = nach dem Aktivieren der Karte 0F 06 02 00 = beim Schreiben der Tiers ################################ ################################ switching debug to 0 ... done
Achtung: Die Parameter im Script müssen natürlich User-spezifisch angepasst werden!
Installation des Scripts
Hier eine Anleitung von Basti756 aus dem StB:
Das Script muss auf das Gerät kopiert werden, auf dem OSCAM mit der V14 Karte auf einem Smartcardreader läuft und ausführbar gemacht werden (chmod 755 script.sh). Das Verzeichnis in dem das Script liegt, spielt keine Rolle. Anschließend müssen die folgenden Variablen an die lokalen Gegebenheiten angepasst werden (Anführungszeichen nicht entfernen!):
code 1: TEMP="/tmp/tempfile" #muss nicht angepasst werden 2: LOGIN="benutzer" #Benutzer für die Anmeldung am OSCAM WebIf 3: PW="passwort" #Passwort des Benutzers für die Anmeldung am OSCAM WebIf 4: IP="127.0.0.1" #muss nicht angepasst werden 5: PORT="12345" #Port auf dem das WebIf lauscht 6: KARTE="sky.v14.lokal1" #Readername der Sky V14 7: LOGPFAD="/opt/lampp/htdocs/oscam17000/os17000.log" #Pfad im Dateisystem zur Logdatei von OSCAM
Die Ausführung des Scripts geschieht auf der Kommandozeile:
code: 1: sh /pfad/zum/script.sh
Das Script gibt nun die gefundenen Werte des Fusebytes und der decrypted Payload inkl. ihrer Bedeutung aus.
Der Receiver muss natürlich auf einem entsprechenden Pay-Channel eingestellt sein!
Konfigurationen
Nachfolgend einige Muster-Konfigurationen für die oscam.server
- die mit *** gekennzeichneten Parameter sind benutzerspezifisch!
- die Parameter für blockemm-bylen sind nur Beispiele, die anhand der V14-Sammelliste hier ständig aktualiert werden müssen!
easymouse 2
[reader] label = SkyDE_V13 protocol = mouse device = ANPASSEN! services = ANPASSEN ODER WEGLASSEN! caid = 09C4 boxid = 12345678 ins7e11 = 15 detect = cd group = ANPASSEN! emmcache = 1,1,2 blockemm-unknown = 1 blockemm-u = 0 (Besser auf 1 setzen und EMMs manuell schreiben! (Siehe Forum)) blockemm-s = 1 blockemm-g = 1 #blockemm-bylen = 1-38,40,42-44,65-124,126-127,131,139-255 (Nicht mehr notwendig mindestens seit Version 9881.) saveemm-u = 1 ndsversion = 2
[reader] label = SkyDE_V14 protocol = mouse device = ANPASSEN! services = ANPASSEN ODER WEGLASSEN! caid = 098C boxid = 12345678 ins7e11 = 15 detect = cd group = ANPASSEN! emmcache = 1,1,2 blockemm-unknown = 1 blockemm-u = 0 (Besser auf 1 setzen und EMMs manuell schreiben! (Siehe Forum)) blockemm-s = 1 blockemm-g = 1 #blockemm-bylen = 1-38,40,42-44,65-124,126-127,131,139-255 (Nicht mehr notwendig mindestens seit Version 9881.) saveemm-u = 1 ndsversion = 2
serial
[reader] label = V14 protocol = smartreader device = *** services = *** autospeed = 0 caid = *** boxid = 12345678 ins7e11 = 15 detect = cd mhz = 480 cardmhz = 369 group = 1 emmcache = 1,1,2 blockemm-unknown = 1 blockemm-u = 0 (Besser auf 1 setzen und EMMs manuell schreiben! (Siehe Forum)) blockemm-s = 1 blockemm-g = 1 #blockemm-bylen = 1-38,40,42-44,65-124,126-127,131,139-255 (Nicht mehr notwendig mindestens seit Version 9881.) saveemm-u = 1 ndsversion = 2
smargo
# Sky V14 im Smargo FTDI muss aktiv sein [reader] Label = SkyV14 device = /dev/ttyUSB0 protocol = mouse caid = 098C boxid = 12345678 ins7e11 = 13 smargopatch = 1 detect = cd cardmhz = 368 mhz = 480 autospeed = 0 group = 1 emmcache = 1,1,2 saveemm-u = 1 blockemm-unknown = 1 blockemm-g = 1 blockemm-s = 1 blockemm-bylen = 1-38,40,42-44,65-124,126-127,131,139-255 ndsversion = 2
# Sky V14 im Smargo USB:ID mit z.B. list_smargo auslesen [reader] Label = SkyV14 device = USB:ID protocol = smartreader caid = 098C boxid = 12345678 ins7e11 = 13 detect = cd cardmhz = 368 mhz = 480 autospeed = 0 group = 1 emmcache = 1,1,2 saveemm-u = 1 blockemm-unknown = 1 blockemm-g = 1 blockemm-s = 1 blockemm-bylen = 1-38,40,42-44,65-124,126-127,131,139-255 ndsversion = 2
Dank an Bulldog vom StB
OSCar-EMM-Analyse-Programm
mcmagic2 vom StB hat ein Programm geschrieben, mit dem man die EMM-Logdaten von OSCam analysieren kann. In diesem Thread stehen die Programmversionen für Windows und MAC zum Download zur Verfügung. Hier wird auch über die Testergebnisse und Weiterentwicklung diskutiert.
Es ist beabsichtigt, diese Programme in die Database von Streamboard aufzunehmen.
Erklärungen und ein How-To werden an dieser Stelle folgen!