EMM

Aus Streamboard Wiki
Version vom 28. Mai 2014, 13:45 Uhr von Wiwe (Diskussion | Beiträge) (→‎save: Änderung EMM-Logdatei ab svn 9741)
Zur Navigation springen Zur Suche springen


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



WarningS.png 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.
Ausschnitt oscam.conf-global).jpg

Wenn dort nichts eingetragen wird, gilt als Default-Wert das Verzeichnis, in dem die Config steht!



MessageS.png Info:

Das Verzeichnis wird aber 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:
Ausschnitt oscam.server -block-save-.jpg

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:
Ausschnitt oscam.server -Tab1-.jpg


Man erhält dann folgendes Bild:
Ausschnitt Server Tab2 leer.jpg


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 V 14 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

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.


WarningS.png Achtung:

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


Damit wird folgenes 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:

Ausschnitt Log-Verzeichnis.jpg

  • 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.



WarningS.png Achtung:
Ab Revision 9741 von OSCam werden separate Log-Dateien für die die einzelnen EMM-Arten (unknowsn, unique, share und global) ausgegeben
Leider erscheinen auch weiterhin jeweils entsprechende log*.bin Files. Die Devs meinen, auf diese plain-files nicht verzichten zu können. Die Anregung, die Ausgabe von solchen *.bin-files in der reader-config schaltbar zu machen, wurde leider nicht aufgegriffen. Ein enstprechendes Ticket blieb bis jetzt unbearbeitet.

select

pepo83 hat eine Liste [1] im Streamboard-Forum angelegt, die etwas über die guten und bösen EMM aussagt.

write

Wenn man nicht eine 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-BLOG 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.

Debug ALL.jpg

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:

Debug 2-4.jpg

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 folgendes script entwickelt, das das Ermitteln und Auslesen von Fusebyte und Payload erleichtert:

Datei:Fusebyte-payload.rar


WarningS.png Achtung:
es muss curl im Image vorhanden sein, zur Not muss es nachinstalliert werden. curl ist 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 


WarningS.png Achtung:

Die Parameter im Script müssen natürlich User-spezifisch angepasst werden!



Installation des script's


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.

WarningS.png Achtung:
Der Receiver muss natürlich auf einem entsprechenden Pay-Channel eingestellt sein!

Configurationen

Nachfolgend einige Muster-Configurationen für die oscam.server
WarningS.png Achtung: die mit *** gekennzeichneten Parameter sind benutzerspezifisch!

easymouse 2


[reader]
label                         = V_14
description                   = NDS-Reader
enable                        = 1
protocol                      = mouse
device                        = ***
boxid                         = 12345678
services                      = ***
detect                        = ***
blockemm-unknown              = 1
blockemm-u                    = 0
blockemm-s                    = 1
blockemm-g                    = 1
blockemm-bylen                = 1-38,40,42-44,65-124,126-127,131,139-255
saveemm-u                     = 1
ins7e11                       = 13 (auch 15!)
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-s                    = 1
blockemm-g                    = 1
blockemm-u                    = 0
saveemm-u                     = 1
blockemm-bylen                = 1-38,40,42-44,65-124,126-127,131,139-255
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