Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

NDS EMMs V13 / V14 richtig posten; EMM Aufbau

    Nobody is reading this thread right now.
Dieses How-To soll möglichst einfach erklären, wie ihr EMMs in diesem Forum am besten postet, wenn ihr Hilfe benötigt oder EMMs für die Sammelliste melden wollt.
Das ist einerseits nicht nur wichtig, damit man euch helfen kann bzw. die geposteten EMMs möglichst viele verwertbare Informationen enthalten, sondern andererseits auch, weil ihr euch sehr schnell gegenüber Sky outen könnt, wenn ihr nur wenige Zeichen zu viel veröffentlicht.
Ebenso wir der Aufbau der EMMs genauer erklärt.

Das Folgende hat Gültigkeit für die EMMs an die V13/V14 Karten der CAIDs 098C und 09C4.

Kurzversion:
oscam/sonstige 02er:
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL MM NN XX ... (Allgemeiner Aufbau)
82 70 21 41 00 82 75 D4 02 00 19 90 17 44 02 01 A6 5E 4C 73 E1 DB 74 AB 7A 5E 20 DA 89 1F 31 55 (original EMM)
82 70 21 41 XX XX XX XX 02 00 19 90 17 44 02 XX ... (so posten)
82 70 21 .. 02er mit 44 02 (oder so, trägt ALLE verfügbaren Daten)

oscam/sonstige 07er:
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B LL 05 II BB BB BB BB LL 90 LL MM NN XX ... (Allgemeiner Aufbau)
82 70 6C 41 00 2C 5A 41 07 64 05 31 00 2C 5A 41 2B 5B 05 02 00 00 00 00 18 90 16 44 01 BA 7D 46 A6 8B 53 14 85 1E C8 14 7F AA C9 A3 85 CA D2 57 8E 03 00 00 00 00 18 90 16 44 01 00 31 45 71 7C ... (original EMM)
82 70 6C 41 XX XX XX XX 07 64 05 31 XX XX XX XX 2B 5B 05 02 XX XX XX XX 18 90 16 44 01 XX ... (so posten, für Erfahrene)
82 70 6C .. 07er (Minimum)

cccam 02er:
82 00 LL 41 02 00 LL 90 LL MM NN XX ... (Allgemein Aufbau)
82 00 1D 41 02 00 19 90 17 44 02 01 A6 5E 4C 73 E1 DB 74 AB 7A 5E 20 DA 89 1F 31 55 (original EMM)
82 00 1D 41 02 00 19 90 17 44 02 XX ... (so posten)
82 00 1D .. 02er mit 44 02 (oder so, trägt ALLE verfügbaren Daten)

cccam 07er:
82 00 LL 41 07 LL 05 31 SS SS SS SS 2B LL 05 II BB BB BB BB LL 90 LL MM NN XX ... (Allgemeiner Aufbau)
82 00 68 41 07 64 05 31 00 2C 5A 41 2B 5B 05 02 00 00 00 00 18 90 16 44 01 BA 7D 46 A6 8B 53 14 85 1E C8 14 7F AA C9 A3 85 CA D2 57 8E 03 00 00 00 00 18 90 16 44 01 00 31 45 71 7C ... (original EMM)
82 00 68 41 07 64 05 31 XX XX XX XX 2B 5B 05 02 XX XX XX XX 18 90 16 44 01 XX ... (so posten, für Erfahrene)
82 00 68 .. 07er (Minimum)

Keine Seriennummer und verschlüsselten Daten posten! Spätestens nach 44 02 / 44 01 aufhören!

Ausführlicher:

Um zu erklären, welche Teile maskiert werden müssen, muss der grobe Aufbau des EMMs verstanden werden

EMM Aufbau erklärt:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C … Adresse HEX
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 … Adresse DEC

82 70 21 41 00 82 75 D4 02 00 19 90 17 44 02 01 A6 5E... Beispiel-EMM
82 70 6C 41 00 2C 5A 41 07 64 05 31 00 2C 5A 41 2B 5B 05 02 00 00 00 00 18 90 16 44 01 BA... Beispiel-EMM
82 70 Start-Marke EMM
82 70 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 41 EMM gerichtet an Smartcard (unique)
82 70 LL 41 SS SS SS SS Seriennummer der Smartcard
82 70 LL 41 SS SS SS SS 02 EMM-Typisierung; Single-EMM (weitere Bedeutung?)
82 70 LL 41 SS SS SS SS 02 00 fixer Wert
82 70 LL 41 SS SS SS SS 02 00 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 41 SS SS SS SS 02 00 LL 90 fixer Wert
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL 44 EMM-Typisierung; User-Verschlüsselung
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL 60 EMM-Typisierung; System-Verschlüsselung (Info)
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL MM 01 Key-Index?; V13 Karten
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL MM 02 Key-Index?; V14 Karten
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL 40 EMM-Typisierung; System-Verschlüsselung (Info)
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL MM 01 Key-Index?
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL MM 02 Key-Index?
82 70 LL 41 SS SS SS SS 02 00 LL 90 LL MM NN XX XX XX ... verschlüsselte Daten
82 70 LL 41 SS SS SS SS 07 EMM-Typisierung; Multi-EMM
82 70 LL 41 SS SS SS SS 07 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 41 SS SS SS SS 07 LL 05 31 fixer Wert
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS Seriennummer der Smartcard
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B fixer Wert
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B LL Anzahl der noch...; Länge
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B LL 05 fixer Wert; Nachfolgend bis zu 5 Sub-EMMs
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B LL 05 II Sub-EMM; Siehe Abschnitt "Sub-EMM Aufbau"
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B LL 05 II BB BB BB BB Box-Serial (oder 00...00)
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B LL 05 II BB BB BB BB LL 90 LL ... wie Single-EMM; dann ggf. weiteres Sub-EMM
82 70 LL 41 SS SS SS SS 07 LL 05 31 SS SS SS SS 2B LL 05 II BB BB BB BB LL 90 LL ... PP 00 Prüfsumme und EMM-Ende
82 70 LL 01 EMM gerichtet an mehrere Smartcards (shared/global)
82 70 LL 01 Weitere Analyse folgt... Siehe auch Sammelthread

82 70 LL C1 EMM gerichtet an Receiver/CAM
82 70 LL C1 Weitere Analyse folgt... Siehe auch Sammelthread


Ausnahme cccam:
EMMs die von cccam Clients kommen fehlt der erste Seriennummern-Abschnitt! Diese 4 Byte fehlen einfach. Dafür ist der Wert des ersten Längen-Byte LL entsprechend um 4 kleiner und die EMMs beginnen mit 82 00 statt 82 70.

Beispiel cccam:
82 00 1D 41 02 00 19 90 17 44 02 01 A6 5E 4C 73 E1 DB 74 AB 7A 5E 20 DA 89 1F 31 55

Sub-EMM Aufbau
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 .. .. 6C 6D 6E … Adresse HEX
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 .. .. .. 108109… Adresse DEC

82 70 6C 41 00 2C 5A 41 07 64 05 31 00 2C 5A 41 2B 5B 05 <<SUBEMMS>> PP 00 Beispiel-EMM

Sub-EMM:

00 D5 25 A7 81 18 90 16 44 01 BA 7D 46 A6 8B 53 14 85 1E C8 14 7F AA C9 A3 85 CA D2 57 8E
II Sub-EMM ID (00 bis 04 möglich)
II BB BB BB BB CA-Serial/Box-Serial wenn gesetzt oder 00 00 00 00
II BB BB BB BB LL 90 LL Anzahl der noch folgenden Bytes im Sub-EMM (Hex); Länge Payload
II BB BB BB BB LL 90 LL 44 01 Sub-EMM Typ V13 Karten
II BB BB BB BB LL 90 LL 44 02 Sub-EMM Typ V14 Karten
II BB BB BB BB LL 90 LL 44 0T XX XX XX ... verschlüsselte Daten

Es werden stets die Sub-EMMs mit den IDs 00 bis 04 der reihe nach übertragen. Je nach Länge der Sub-EMMs können alle 5 Sub-EMMs in einem Multi-EMM Platz haben, oder über mehrere Multi-EMMs übertragen werden (da ein EMM eine maximale Länge nicht überschreiten kann).
Multi-EMMs haben also nicht zwangsweise ein Sub-EMM mit ID 00 als erstes Sub-EMM.

Es können z.B. stets drei Multi-EMM gesendet werden, mit je folgendem Inhalt:
Multi-EMM #1 enthält Sub-EMM 00 und 01
Multi-EMM #2 enthält Sub-EMM 02
Multi-EMM #3 enthält Sub-EMM 03 und 04

(Quelle)

Die Länge der Sub-EMMs ist nicht beliebig. Es gibt, je Kartentyp (V13 oder V14) nur zwei Längen die ein Sub-EMM haben kann. Im Folgenden kurz/lang benannt.
Ein kurzes Sub-EMM ist (inkl seiner ID) 0x1E Byte lang (V13) bzw. 0x1F Byte lang (V14).
Ein langes Sub-EMM ist (inkl seiner ID) 0x51 Byte lang (V13) bzw. 0x52 Byte lang (V14).

Daraus ergibt sich, dass auch die gesamten Multi-EMM nur gewisse Längen annehmen können, abhängig davon wieviele kurze/lange Sub-EMM sie enthalten.

Für V13 sind die möglichen EMM Längen (Längenangabe 3. Byte): 0x30, 0x4E, 0x63, 0x6C, 0x81, 0x8A, 0xA8
Für V14 sind die möglichen EMM Längen (Längenangabe 3. Byte): 0x31, 0x50, 0x64, 0x6F, 0x83, 0x8E, 0xAD

(Quelle)

Weitere Eigenschaften:
- Kurze Sub-EMMs der ID 00 können die CA-Serial enthalten, sie ist dann aber um 0x80000000 reduziert
- Kurze Sub-EMMs der ID 01, 02, 03, 04 enthalten keine CA-Serial
- Lange Sub-EMMs enthalten immer eine CA-Serial
- Es kommen immer erst Sub-EMMs mit gesetzter Serial, also 00 mit, 01 mit, 02 ohne, 03 ohne, 04 ohne. 00 ohne, 01 mit, ... gibt es nicht

(Quelle)

Was muss gepostet werden, was zensiert?
Zensiert werden muss auf jeden Fall jede Seriennummer und Box-ID (wenn die Box-ID mit 00 00 00 00 belegt ist, das am besten stehen lassen, damit man den Unterschied zu belegt mit XX XX XX XX erkennen kann).
Des Weiteren müssen verschlüsselte Daten zensiert werden, da diese genauso wie die Seriennummer auf den Nutzer hinweisen!
Die restlichen Daten können stehen gelassen werden. Insbesondere sind die Längen und Typisierungsangaben wichtig um helfen zu können! Diese also stehen lassen.

Beispiel-Log:

82702741009210D602001F901D4402C02D299DDA1B22BC87755E3CCC183E82223A829425B68E00B6DEE5
82702741009210D602001F901D4402C02D299DDA1B22BC87755E3CCC183E82223A829425B68E00B6DEE5
82702741009210D602001F901D4402C02D299DDA1B22BC87755E3CCC183E82223A829425B68E00B6DEE5
82702741009210D602001F901D44026C28B946D1EF2EA2FA1F9DDA31D08AE53710B27E1F36E21E032907
82702741009210D602001F901D44026C28B946D1EF2EA2FA1F9DDA31D08AE53710B27E1F36E21E032907
82708141002C6B6F07790531002C6B6F2B7005005543029B1890164401538535732AB53C6D0C65AB633EF97A452CE2AB7401D543029B4B90494401A612203EA390

Korrekt gepostet:

82 70 27 41 XX XX XX XX 02 00 1F 90 1D 44 02 X1 X1 X1 …
82 70 27 41 XX XX XX XX 02 00 1F 90 1D 44 02 X1 X1 X1 …
82 70 27 41 XX XX XX XX 02 00 1F 90 1D 44 02 X1 X1 X1 …
82 70 27 41 XX XX XX XX 02 00 1F 90 1D 44 02 X2 X2 X2 …
82 70 27 41 XX XX XX XX 02 00 1F 90 1D 44 02 X2 X2 X2 …
82 70 81 41 XX XX XX XX 07 79 05 31 XX XX XX XX 2B 70 05 00 XX XX XX XX 18 90 16 44 01 X3 X3 … X3 X3 01 XX XX XX XX 4B 90 49 44 01 X4 X4 …

Die Zensur mit X1, X2 usw soll andeuten, dass sich die Werte bei sonst gleichen EMMs unterscheiden.

Wer auf Nummer sicher gehen möchte, denn gerade das lesen von 07er EMMs ist nicht so einfach, sollte einfach bei 07er EMMs nach 10 Bytes und bei 02er EMMs nach 15 Bytes aufhören (bei cccam jeweils 4 weniger!).
Also:
82 70 27 41 XX XX XX XX 02 00 1F 90 1D 44 02 … (3 mal)
82 70 27 41 XX XX XX XX 02 00 1F 90 1D 44 02 … (2 mal)
82 70 81 41 XX XX XX XX 07 79 … (1 mal)

Kritik / Fragen / Verbesserungswünsche sind ausdrücklich erwünscht.

Ich weiss, der Beitrag ist nicht der kürzeste geworden, aber es geht ja auch nicht um Lappalien ;)

Alle Angaben ohne Gewähr ;) Alles basiert auf Annahmen und statistischen Auswertungen. Angaben wie "fixer Wert" bedeuten, dass ich mehrere Millionen EMMs betrachtet habe und da nie etwas anderes stand. Das bedeutet aber nicht, dass es nicht doch weitere Werte gibt. Wenn jemand so einen findet, gerne melden.


Weniger tuts meist auch
Ziel war es zu zeigen, was man gefahrlos posten kann, und was keinesfalls.
Oft reicht zum ersten Begutachten der EMMs aber schon die Info, ob es CCCam/oscam ist, die Länge, und der Typ.
Also:

82 70 21 .. 02er mit 44 02
82 70
6C .. 07er
82 00 1D .. 02er mit 44
02

Die 02er sind mit diesen Angaben bereits vollständig beschrieben! Mehr Daten gibt es zur Auswertung nicht. Bei den 07er geht das nicht, da die mehrere EMMs der Form der 02er enthalten können.

Nützliches: Errechnen der Seriennummer / Box-Id
Ermitteln der Karten-Seriennummer der eigenen EMMs anhand des Kartenaufdrucks:
Die letzte Stelle der Seriennummer wird gestrichen, danach verwendet man die letzten 10 Ziffern der Seriennummer und rechnet sie mit einem Taschenrechner von Dezimal nach Hex (das kann z.B. der Windows-Taschenrechner in der Ansicht "Programmierer")

Beispiel: 70000082379001
Umgerechnet nach Hex ergibt die 8237900 den Wert 7DB34C. Diesen füllen wir jetzt von links mit Nullen auf 8 Zeichen auf und schreiben, zur besseren Lesbarkeit, die Bytes in Zweiergrüppchen:
Ergebnis: 00 7D B3 4C

Merkmale: Das erste Byte sollte bei jedem 00 sein (wenn nicht, ist dieser Beitrag mittlerweile Uralt ;)). Das zweite Byte liegt bei V13 Karten zwischen 00 und 3F, bei V14 Karten zwischen 40 und AF.

Ermittlung der Box-Id der eigenen EMMs anhand der aufgedruckten CA-Seriennummer des Receivers/CI+ Moduls:
Die letzte Stelle der CA-Seriennummer wird gestrichen, danach verwendet man die letzten 10 Ziffern der CA-Seriennummer und rechnet sie mit einem Taschenrechner von Dezimal nach Hex (das kann z.B. der Windows-Taschenrechner in der Ansicht "Programmierer")

Beispiel: 2345229245625523
Umgerechnet nach Hex ergibt die 2924562552 den Wert AE514878. Diesen füllen wir jetzt von links mit Nullen auf 8 Zeichen auf und schreiben, zur besseren Lesbarkeit, die Bytes in Zweiergrüppchen:
Ergebnis: AE 51 48 78

Merkmale: bisher nichts weiter bekannt/analysiert...
 
Zuletzt bearbeitet:
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

es scheint eine checksum zu sein.
habe die Uhrzeit + datum auch in vielen anderen global EMMs gefunden die keine länge 31 haben.
alles was mit 82 70 XX 01 02 06 anfängt scheint das date zu haben.

EDIT:

der 02 06 Aufbau ist meiner Meinung nach:

[FONT=&quot]82 70 [/FONT][FONT=&quot]- Start-Marke EMM[/FONT]
[FONT=&quot]20 [/FONT][FONT=&quot]- Länge - [/FONT]32 - OK (32)
01 - Type - shared/global EMM for Smartcard
02 - fixer Wert - OK
06 - EMM-Typisierung2 - Time
02 94 1E A6 7B DD - Date - 30.5.2016 20:51:54 UTC - OK
16 - Länge - 22 - OK (22)
90 - fixer Wert - OK
14 - Länge - 20 - OK (20)
40 - EMM-Typisierung2 - System-Verschlüsselung
02 - Key-Index - V14 Karten
0F 82 3C 75 F4 B7 55 3E B0 B5 BE 51 ED 6F 16 E7
42 95
- Data



die 02 00 sind mir aber noch ein Rätzel




Code:
<script>
$(document).ready(function() {    var tosingleemm = $('.tosingleemm');
    var singleemm = $('#singleemm');
    
    if(singleemm.length > 0 || tosingleemm.length > 0) {
        console.log('load emm decoder');        
        $('body').append('<div style="position:fixed; top: 33px; right:0px; bottom: 0px; min-width:500px; min-height:600px; background: #EEE; text-align: left; padding: 20px 10px; font-size: 15px; font-family: Courier New;" id="emm_decoder"></div>');
        
        // send EMM to new window
        $('form').attr('target', '_new');
        
        singleemm.on('change', singlechanged);
        singleemm.on('keyup', singlechanged);
        
        function singlechanged() {
            decode(singleemm.val());
        }
        
        tosingleemm.on('mouseover', function() {
            var text = $(this).text().split(' ')[7];
            decode(text);
        });


       function decode(text) {
           text = text.trim();
           var bytes = text.replace(/[^A-Fa-f0-9]/g, "").match(/.{1,2}/g) || [];
           //console.log(bytes);


           var html = '';


           function addText(count, color, text, parm) {
               //var bytes = ret.replace(/[^A-Fa-f0-9]/g, "").match(/.{1,2}/g) || [];
               html += '<span style="color: '+color+'"><b>';


               var xor = 0x00;
               var sum = 0x00;


               var ret = '';
               for(var i = 0; i < count; i++) {
                   var v = bytes.shift();
                   if(typeof v === 'undefined') {
                       v = '??';
                   } else {
                       sum += parseInt(v, 16);
                       xor ^= parseInt(v, 16);
                   }
                   html +=  v + ' ';
                   ret += v;
                   if(((i + 1) % 16) == 0) {
                       html += '<br/>';
                   }
               }


               xor &= 0xFF;
               sum &= 0xFF;


               switch(text) {
                   case 'Data':
                       //text += ' - <b>('+xor.toString(16)+' '+sum.toString(16)+')</b>';
                       break;
                   case 'Länge':
                       var len = parseInt(ret, 16);
                       text += ' - <b>'+len+'</b>';


                       if(bytes.length >= len) {
                           text += ' - <b style="color:#00F000">OK ('+bytes.length+')</b>';
                       } else {
                           text += ' - <b style="color:#F00000">FAIL ('+bytes.length+')</b>';
                       }


                       break;
                   case 'Type':
                       switch(ret) {
                           case '41':
                               text += ' - <b>unique</b> EMM for Smartcard';
                               break;
                           case '01':
                               text += ' - <b>shared/global</b> EMM for Smartcard';
                               break;
                           case 'C1':
                               text += ' - EMM for Receiver/CAM';
                               break;
                           default:
                               text += ' - <b>unknow??</b>';
                               break;
                       }
                       break;


                   case 'EMM-Typisierung':
                       switch(ret) {
                           case '02':
                               text += ' - <b>Single-EMM</b>';
                               break;
                           case '07':
                               text += ' - <b>Multi-EMM</b>';
                               break;
                           default:
                               text += ' - <b>unknow??</b>';
                               break;
                       }
                       break;


                   case 'EMM-Typisierung2':
                       switch(ret) {
                           case '44':
                               text += ' - <b>User-Verschlüsselung</b>';
                               break;
                           case '60':
                               text += ' - <b>System-Verschlüsselung</b>';
                               break;
                           case '40':
                               text += ' - <b>System-Verschlüsselung</b>';
                               break;
                           case '06':
                               text += ' - <b>Time</b>';
                               break;
                           default:
                               text += ' - <b>unknow??</b>';
                               break;
                       }


                       break;
                   case 'Key-Index':
                       switch(ret) {
                           case '01':
                               text += ' - <b>V13 Karten</b>';
                               break;
                           case '02':
                               text += ' - <b>V14 Karten</b>';
                               break;
                           default:
                               text += ' - <b>unknow??</b>';
                               break;
                       }


                       break;
                   case 'Key-Index2':
                       text += ' - <b>unknow??</b>';
                       break;
                   case 'fixer Wert':
                       if(ret == parm) {
                           text += ' - <b style="color:#00F000">OK</b>';
                       } else {
                           text += ' - <b style="color:#F00000">FAIL ('+parm+')</b>';
                       }
                       break;
                   case 'Sub-EMM':
                       switch(ret) {
                           default:
                               text += ' - <b>EMM '+ret+'</b>';
                               break;
                       }
                       break;
                   case 'Date':
                       var b = ret.replace(/[^A-Fa-f0-9]/g, "").match(/.{1,2}/g) || [];




                       var bin = parseInt(b[3]+b[4]+b[5], 16);
                       var time = {};
                       time.checksum = (bin & 0b11111111); bin = bin >>> 8; 
                       time.s = ((bin & 0b11111)*2); bin = bin >>> 5; 
                       time.m = (bin & 0b111111); bin = bin >>> 6; 
                       time.h = (bin & 0b11111); bin = bin >>> 5; 




                       bin = parseInt(b[0]+b[1]+b[2], 16);
                       var date = {};
                       date.d =  (bin & 0b11111111); bin = bin >>> 8; 
                       date.m =  ((bin & 0b1111)+1); bin = bin >>> 4; 
                       date.y = (bin + 1975);




                       text += ' - <b>'+date.d+'.'+date.m+'.'+date.y+'</b>';
                       text += ' <b>'+time.h+':'+time.m+':'+time.s+' UTC</b>';




                       var checksum = 0x08;
                       for(var i = 0; i < 5; i++) {
                           checksum += (parseInt(b[i],16) & 0xFF);
                       }
                       checksum &= 0xFF;
                       checksum = checksum.toString(16).toUpperCase();
                       time.checksum = time.checksum.toString(16).toUpperCase();


                       if(time.checksum == checksum) {
                           text += ' - <b style="color:#00F000">OK</b>';
                       } else {
                           text += ' - <b style="color:#F00000">FAIL ('+checksum+')</b>';
                       }


                       break;
               }


               html += '</b></span> | ' + text + '<br/>';
               return ret;
           }




           addText(2, '#000', 'Start-Marke EMM');
           var length = parseInt(addText(1, '#00F', 'Länge'), 16);
           var type = addText(1, '#40e0d0', 'Type');




           function SingleEMM() {
               addText(1, '#00F', 'Länge');
               addText(1, '#000', 'fixer Wert', '90');
               var datal = parseInt(addText(1, '#00F', 'Länge'), 16);


               var emmtype2 = addText(1, '#b22222', 'EMM-Typisierung2');
               switch(emmtype2) {
                   case '40':
                   case '44':
                   case '60':
                       addText(1, '#b22222', 'Key-Index');
                       addText((datal - 2), '#000', 'Data');


                   break;
                   default:
                       addText(1, '#b22222', 'Key-Index2');
                       addText((datal - 2), '#000', 'Data');
                   break;
               }
           }


           function EMM() {


           }


           switch(type) {
               case '41':
                   addText(4, '#ff8c00', 'Seriennummer der Smartcard');


                   var emmtype = addText(1, '#008000', 'EMM-Typisierung');
                   switch(emmtype) {
                       case '02':
                           addText(1, '#000', 'fixer Wert', '00');
                           SingleEMM();
                           break;
                       case '07':
                           addText(1, '#00F', 'Länge');
                           addText(2, '#000', 'fixer Wert', '0531');
                           addText(4, '#ff8c00', 'Seriennummer der Smartcard');
                           addText(1, '#000', 'fixer Wert', '2B');
                           addText(1, '#00F', 'Länge');
                           addText(1, '#000', 'fixer Wert', '05');




                           while(bytes.length > 2) {
                               var subemm = parseInt(addText(1, '#E000E0', 'Sub-EMM'), 16);
                               addText(4, '#ff8c00', 'Box-Serial');
                               SingleEMM();
                           }
                           addText(1, '#800080', 'Prüfsumme');
                                   addText(1, '#E000E0', 'Sub-EMM Ende');
                           break;
                   }


                   break;
               case '01':
                   addText(1, '#000', 'fixer Wert', '02');
                   var emmtype = addText(1, '#008000', 'EMM-Typisierung2');




                   switch(emmtype) {
                       case '00':/*
                           addText(1, '#00F', 'Länge');
                           addText(1, '#008000', 'EMM-Typisierung2');
                           //addText(1, '#000', 'fixer Wert', '90');
                           addText(1, '#00F', 'Länge');
                           */
                           SingleEMM();
                           /*
                           addText(1, '#800080', 'Prüfsumme');
                           while(bytes.length > 2) {
                               if(bytes.length > 2) {
                                   //var subemm = parseInt(addText(1, '#E000E0', 'Sub-EMM'), 16);
                                   //addText(4, '#ff8c00', 'Box-Serial');
                                   var datal = parseInt(addText(1, '#00F', 'Länge'), 16);
                                   var emmtype3 = addText(1, '#b22222', 'EMM-Typisierung2');


                                   switch(emmtype3) {
                                       case '44':
                                       case '60':
                                           addText(1, '#b22222', 'Key-Index');
                                           addText((datal - 2), '#000', 'Data');


                                       break;
                                       default:
                                       case '40':
                                           addText(1, '#b22222', 'Key-Index2');
                                           addText((datal - 2), '#000', 'Data');
                                       break;
                                   }
                                   addText(1, '#800080', 'Prüfsumme');
                               } else {
                                   break;
                               }
                           }
                           */
                           break;
                       case '06':
                           addText(6, '#00A0A0', 'Date');
                           SingleEMM();
                           break;
                   }


                   break;
               case 'C1':
                   addText(4, '#ff8c00', 'Box-Serial');
                   //text += ' EMM for Receiver/CAM';
                   break;
           }


           if(bytes.length > 0) {    
               html += '<br/>';            
               addText(bytes.length, '#000', 'rest ????');
           }
           $('#emm_decoder').html(html);
       }
   }




}); 




</script>


einfach nach "##TPLMESSAGE##" in die /webif/emm.html packen und kompelieren.
oder per inject über browser plugin laden.
 
Zuletzt bearbeitet:
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

Das zweite Byte hat schon mit dem Monat zu tun (zaehlt beim Monatswechsel hoch), aber einfach 4 Bit + 1 == Monat kann nicht passen:

2015-02-19 03:38:43 827020 010206 028513 0F5607 16901440022003CB1E1DA62A9C8EEB8887AA9EB36B383B
2015-08-09 15:37:29 827020 010206 028B09 6CB6C0 1690144002E57780A4DD12EC49F137CDE70FE1ED4C3083
2015-12-20 20:21:20 827020 010206 028F14 9AB0F7 16901440020183B941F676397BE9E0CD6CF8DAC8B918E3
2016-05-26 16:56:04 827020 010206 02941A 770231 169014400215C4B3227CEF29C2CD7FE65F63FEF80175E1

85 + 6 = 8B
8B + 4 = 8F
8F + 5 = 94

Fragt sich, ob die 02 noch zum Monat dazugehoert, oder ob es eher 'ich bin ein Zeitstempel' bedeutet.
Die
06 halte ich fuer eine Laenge: 0206 Block (Zeitstempel) vorhanden - 0200 Block fehlt

Die Hunderdstel hatte ich auch erst gedacht, bis ich diese gefunden hatte:
2015-08-09 14:16:52 827020 010206 028B09 622222 169014400233CA2D2312E93473B1906FD3D8A204BAAD28
2015-08-09 14:17:02 82702F 010206 028B09 622727 25902340017C01DB12BCE02BE2471F3B01FB5DA20E732...
2015-08-09 14:17:15 827020 010206 028B09 622E2E 169014400210E4F2A0D3CCC4C9C1DA82BF72D565F4BB61
2015-08-09 14:17:29 827025 010206 028B09 623434 1B90194001FE4E56A11EC18DA1A9EC01CC49A4AEBC4C548EFC665DA2
2015-08-09 14:17:40 827020 010206 028B09 623A3A 16901440026C94822499EF4790B4412C3ED4A055E78BEA
2015-08-09 14:17:52 827028 010206 028B09 624141 1E901C4001D07184FC908DA7EE803DCFABFC1AEB315652F1B0C89FDC2A2FB5
2015-08-09 14:18:02 827020 010206 028B09 624747 169014400280995F444A6FF32575AB7595841313DB5764
(insgesamt 39 Zeilen an dieser Stelle)

Und ja, ein paar EMMs aus 2014 zum Gegenpruefen waeren nett. :)
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

habe mal aus jedem monat den ich habe etwas rausgesucht.

Code:
15/3  0010 1000 0110

15/4  0010 1000 0111
15/5  0010 1000 1000
15/6  0010 1000 1001
15/7  0010 1000 1010
15/8  0010 1000 1011
15/9  0010 1000 1100
15/10 0010 1000 1101
15/11 0010 1000 1110
15/12 0010 1000 1111
16/1  0010 1001 0000
16/2  0010 1001 0001
16/3  0010 1001 0010
16/4  0010 1001 0011
16/5  0010 1001 0100
16/6  0010 1001 0101

sieht fast so aus also sei das ein Monats counter und die kennen kein jahr.
war vor 149 Monaten / xx.01.2004 was besonders?
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

Also allgemein zu den Globals kann ich schonmal sagen:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C … Adresse HEX
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 … Adresse DEC

82 70 1D 01 02 00 19 90 17 44 02 01 A6 5E ... Beispiel-EMM
82 70 Start-Marke EMM
82 70 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 01 EMM gerichtet an mehrere/alle Smartcards (shared/global)
82 70 LL 01 02 EMM-Typisierung; Single-EMM (weitere Bedeutung?)
82 70 LL 01 02 00 fixer Wert / es folgt kein Timestamp
82 70 LL 01 02 00 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 01 02 00 LL 90 fixer Wert
82 70 LL 01 02 00 LL 90 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 01 02 00 LL 90 LL 60 EMM-Typisierung; System-Verschlüsselung
82 70 LL 01 02 00 LL 90 LL MM 01 Key-Index?; V13 Karten?
82 70 LL 01 02 00 LL 90 LL MM 02 Key-Index?; V14 Karten?
82 70 LL 01 02 00 LL 90 LL 40 EMM-Typisierung; System-Verschlüsselung
82 70 LL 01 02 00 LL 90 LL MM 01 Key-Index?; V13 Karten?
82 70 LL 01 02 00 LL 90 LL MM 02 Key-Index?; V14 Karten?
82 70 LL 01 02 00 LL 90 LL MM NN XX XX XX ...
verschlüsselte Daten
82 70 LL 01 02 06 fixer Wert / es folgen 6 Byte Timestamp
82 70 LL 01 02 06 TT TT TT TT TT TT 6 Byte Timestamp
82 70 LL 01 02 06 TT TT TT TT TT TT LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 fixer Wert
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL 60 EMM-Typisierung; System-Verschlüsselung
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL MM 01 Key-Index?; V13 Karten?
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL MM 02 Key-Index?; V14 Karten?
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL 40 EMM-Typisierung; System-Verschlüsselung (Info)
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL MM 01 Key-Index?; V13 Karten?
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL MM 02 Key-Index?; V14 Karten?
82 70 LL 01 02 06 TT TT TT TT TT TT LL 90 LL MM NN XX XX XX ... verschlüsselte Daten
82 70 LL 01 07 EMM-Typisierung
82 70 LL 01 07 LL Anzahl der noch folgenden Bytes im EMM (Hex); Länge
82 70 LL 01 07 LL XX XX XX XX Nicht weiter analysierte Daten

... Die Daten der 87 79 LL 01 07 bereiten mir noch kopfzerbrechen ;)
 
Zuletzt bearbeitet:
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

hier die geupdatete version diese sollte jetzt bis auf de A0 langen EMM alles decodieren.









Code:
<script>
$(document).ready(function() {    var tosingleemm = $('.tosingleemm');
    var singleemm = $('#singleemm');
    
    if(singleemm.length > 0 || tosingleemm.length > 0) {
        console.log('load emm decoder');        
        $('body').append('<div style="position:fixed; top: 33px; right:0px; bottom: 0px; min-width:500px; min-height:600px; background: #EEE; text-align: left; padding: 20px 10px; font-size: 15px; font-family: Courier New;" id="emm_decoder"></div>');
        
        // send EMM to new window
        $('form').attr('target', '_new');
        
        singleemm.on('change', singlechanged);
        singleemm.on('keyup', singlechanged);
        
        function singlechanged() {
            decode(singleemm.val());
        }
        
        tosingleemm.on('mouseover', function() {
            var text = $(this).text().split(' ')[7];
            decode(text);
        });
	
	
		


		function decode(text) {
			text = text.trim();
			var bytes = text.replace(/[^A-Fa-f0-9]/g, "").match(/.{1,2}/g) || [];
			//console.log(bytes);
			
			var html = '';
			
			function addText(count, color, text, parm) {
				//var bytes = ret.replace(/[^A-Fa-f0-9]/g, "").match(/.{1,2}/g) || [];
				html += '<font style="color: '+color+'"><b>';
				
				var xor = 0x00;
				var sum = 0x00;
				
				var ret = '';
				for(var i = 0; i < count; i++) {
					var v = bytes.shift();
					if(typeof v === 'undefined') {
						v = '??';
					} else {
						sum += parseInt(v, 16);
						xor ^= parseInt(v, 16);
					}
					html +=  v + ' ';
					ret += v;
					if(((i + 1) % 16) == 0) {
						html += '<br/>';
					}
				}
				
				xor &= 0xFF;
				sum &= 0xFF;
				
				switch(text) {
					case 'Data':
						//text += ' - <b>('+xor.toString(16)+' '+sum.toString(16)+')</b>';
						break;
					case 'Länge':
						var len = parseInt(ret, 16);
						text += ' - <b>'+len+'</b>';
						
						if(bytes.length >= len) {
							text += ' - <font style="color:#00F000"><b>OK ('+bytes.length+')</b></font>';
						} else {
							text += ' - <font style="color:#F00000"><b>FAIL ('+bytes.length+')</b></font>';
						}
						
						break;
					case 'Type':
						switch(ret) {
							case '41':
								text += ' - <b>unique</b> EMM for Smartcard';
								break;
							case '01':
								text += ' - <b>shared/global</b> EMM for Smartcard';
								break;
							case 'C1':
								text += ' - EMM for Receiver/CAM';
								break;
							default:
								text += ' - <b>unknow??</b>';
								break;
						}
						break;
						
					case 'EMM-Typisierung':
						switch(ret) {
							case '02':
								text += ' - <b>Single-EMM</b>';
								break;
							case '07':
								text += ' - <b>Multi-EMM</b>';
								break;
							default:
								text += ' - <b>unknow??</b>';
								break;
						}
						break;
						
					case 'EMM-Typisierung2':
						switch(ret) {
							case '44':
								text += ' - <b>User-Verschlüsselung</b>';
								break;
							case '60':
								text += ' - <b>System-Verschlüsselung</b>';
								break;
							case '40':
								text += ' - <b>System-Verschlüsselung</b>';
								break;
							case '06':
								text += ' - <b>Time</b>';
								break;
							case '00':
								break;
							default:
								text += ' - <b>unknow??</b>';
								break;
						}
					
						break;
					case 'Key-Index':
						switch(ret) {
							case '01':
								text += ' - <b>V13</b>';
								break;
							case '02':
								text += ' - <b>V14</b>';
								break;
							default:
								text += ' - <b>unknow??</b>';
								break;
						}
					
						break;
					case 'Key-Index2':
						text += ' - <b>unknow??</b>';
						break;
					case 'fixer Wert':
						if(ret == parm) {
							text += ' - <font style="color:#00F000"><b>OK</b></font>';
						} else {
							text += ' - <font style="color:#F00000"><b>FAIL ('+parm+')</b></font>';
						}
						break;
					case 'Sub-EMM':
						switch(ret) {
							default:
								text += ' - <b>EMM '+ret+'</b>';
								break;
						}
						break;
					case 'Date':
						var b = ret.replace(/[^A-Fa-f0-9]/g, "").match(/.{1,2}/g) || [];
						
						var bin = parseInt(b[3]+b[4]+b[5], 16);
						var time = {};
						console.log(bin.toString(2));
						time.checksum = (bin & 0b11111111); bin = bin >>> 8; 
						time.s = ((bin & 0b11111)*2); bin = bin >>> 5; 
						time.m = (bin & 0b111111); bin = bin >>> 6; 
						time.h = (bin & 0b11111); bin = bin >>> 5; 
						
						
						bin = parseInt(b[0]+b[1]+b[2], 16);
						console.log(bin.toString(2), ((bin & 0xFFFF00) >> 8).toString(2));
						var date = {};
						date.d = (bin & 0b11111111); bin = bin >>> 8; 
						date.m = (bin & 0b11111111); bin = bin >>> 8; 
						
						date.y = parseInt(date.m / 12) + 2004;
						date.m -= (((date.y-2004)*12)-1);
								
						text += ' - <b>'+date.d+'.'+date.m+'.'+date.y+'</b>';
						text += ' <b>'+time.h+':'+time.m+':'+time.s+' UTC</b>';
						
						var checksum = 0x08;
						for(var i = 0; i < 5; i++) {
							checksum += (parseInt(b[i],16) & 0xFF);
						}
						checksum &= 0xFF;
						checksum = checksum.toString(16).toUpperCase();
						time.checksum = time.checksum.toString(16).toUpperCase();
						
						if(time.checksum == checksum) {
							text += ' - <font style="color:#00F000"><b>OK</b></font>';
						} else {
							text += ' - <font style="color:#F00000"><b>FAIL ('+checksum+')</b></font>';
						}
						
						break;
				}
				
				html += '</b></font> - ' + text + '<br/>';
				return ret;
			}
		
			function SingleEMM() {
				addText(1, '#00F', 'Länge');
				addText(1, '#000', 'fixer Wert', '90');
				var datal = parseInt(addText(1, '#00F', 'Länge'), 16);
				
				var emmtype2 = addText(1, '#b22222', 'EMM-Typisierung2');
				switch(emmtype2) {
					case '40':
					case '44':
					case '60':
						addText(1, '#b22222', 'Key-Index');
						addText((datal - 2), '#000', 'Data');
						
					break;
					default:
						addText(1, '#b22222', 'Key-Index2');
						addText((datal - 2), '#000', 'Data');
					break;
				}
			}
	
	
			// ----------------------------------------------------------------------
			// ----------------------------------------------------------------------
			// ----------------------------------------------------------------------
			
			
			addText(2, '#000', 'Start-Marke EMM');
			var length = parseInt(addText(1, '#00F', 'Länge'), 16);
			var type = addText(1, '#40e0d0', 'Type');
			
			if(type == '01') { 			// 0000 0001 shared/global
			} else if(type == '41') { 	// 0100 0001 unique
				addText(4, '#ff8c00', 'Seriennummer der Smartcard');
			} else if(type == 'C1') { 	// 1100 0001 Receiver/Cam
				addText(4, '#ff8c00', 'Receiver Seriennummer');
			}
		
			var emmtype = addText(1, '#008000', 'EMM-Typisierung');
			switch(emmtype) {
				case '02':
					var emmtype2 = addText(1, '#008000', 'EMM-Typisierung2');
					if(emmtype2 == '06') {
						addText(6, '#00A0A0', 'Date');
					}
					SingleEMM();
					break;
				case '07':
					addText(1, '#00F', 'Länge');
					addText(2, '#000', 'fixer Wert', '0531');
					addText(4, '#ff8c00', 'Seriennummer der Smartcard');
					addText(1, '#000', 'fixer Wert', '2B');
					addText(1, '#00F', 'Länge');
					addText(1, '#000', 'fixer Wert', '05');
									
					while(bytes.length > 2) {
						var subemm = parseInt(addText(1, '#E000E0', 'Sub-EMM'), 16);
						addText(4, '#ff8c00', 'Box-Serial');
						SingleEMM();
					}
					addText(1, '#800080', 'Prüfsumme');
					addText(1, '#E000E0', 'Sub-EMM Ende');
					break;
			}	
			
			if(bytes.length > 0) {	
				html += '<br/>';			
				addText(bytes.length, '#000', 'rest ????');
			}
			$('#emm_decoder').html(html);
		}
	}


</script>




einfach nach "##TPLMESSAGE##" in die /webif/emm.html packen und kompelieren.
oder per inject über browser plugin laden.
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

2016-05-26 16:59:08 82702201071E01300119FFFFFFFFFFFF130000013B010000E7CE0000000000000000006F00

Pruefsumme 6F = (07 + 1E + 01 + ... + 00) & FF

Funktioniert auch fuer meine 07er uniqes. Dasselbe Schema passt auch fuer den '06er Timestamp' (und erklaert die magische 08 = 02 + 06).


Vermutung:
8270 <len0> <addressblock> <EMM-Typ> <len1><block1> <len2><block2>
Letztes byte von block1 == summe von EMM-Typ bis vorletztes byte.
ist len1 oder len2 ==0 dann ist der entsprechende Block nicht vorhanden.
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

@nathanwest
das stimmt, oscam überprüft diese checksumme und verwirft alle emms bei denen sie nicht passt

82 70 - EMM Marker
22 - EMM Length - 34 - OK (34)
01 - Type - global EMM (1 Sub EMMs)
07 - EMM-Type - With Filter Nanos
1E - IRD EMM Length - 30 - OK (31)
01 - Filter Section Length - 1 - OK (30)
30 - Filter Nano Type - Always Valid
01 - IRD Nano Type - unknown
19 - IRD Nano Length - 25 - OK (27)
FF FF FF FF FF FF 13 00 00 01 3B 01 00 00 E7 CE
00 00 00 00 00 00 00 00 00
- Data
6F - IRD EMM Checksum - OK
00 - Card EMM Length - 0 - OK (0)

das aktuelle oscam kann jetzt die emms im webif analysieren.
manche emms (z.b. das global A0) machen Probleme, da sie unbekannte nanos mit fester größe beinhalten.

nano mit dynamischer größe: <nano type> <nano length> <nano data>
nano mit fester größe: <nano type> <nano data>

-> wenn man ein nano mit fester größe nicht kennt, gehts nicht weiter
 
Zuletzt bearbeitet von einem Moderator:
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

@JimBizkit
Inwiefern kann das letzte OSCAM die EMMs im webif analysieren. Habe mir gerade den letzten build (11232) runter geladen und ich verstehe das nicht 100%. Meinst Du, dass es EMMs vor dem Schreiben analysiert und entsprechend dem Ergebnis reagiert?

Danke für das auf die Sprünge helfen.
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

oscam stellt im webif die emm grafisch dar.
du brauchst dafür build 11242.
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

Und wo bekommt man 11242? laou oscam center nur bis 11233
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

Habs gefunden... allerdings nur für meinen Pingulux (sh4 amino) für die fritzbox gibts das wohl noch nicht. :-)
Vielen Dank an Jim..

Bin ein Trottel hab nur 11234 gefunden und 11242... suche also nochmal weiter..

Trotzdem Danke an Jim... :-)

Jetzt hab ich auch die 11243 gefunden und drauf. Läuft und zeigt fein an, wie die EMM aufgebaut ist.. nettes Tool.
 
Zuletzt bearbeitet:
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

mit der maus über ne emm, oder eine emm eingeben. geht nur bei videoguard readern.
wenns nicht geht, hast du vllt. nen älteren firefox. dann entweder firefox aktualisieren oder oscam r11245 verwenden.
 
AW: NDS EMMs V13 / V14 richtig posten; EMM Aufbau

auf den slot kommt es nicht an, es muss aber eine nds/videoguard karte sein
 
Zurück
Oben