From 83e2d779f2a2aef5e5dd50e33a348b2e9e898672 Mon Sep 17 00:00:00 2001 From: zefie Date: Tue, 29 Nov 2022 16:45:18 -0500 Subject: [PATCH] generate proper ssids --- .../ServiceVault/http_pc/viewergen/index.js | 37 ++++++--- zefie_wtvp_minisrv/includes/WTVShared.js | 77 +++++++++++++++++++ 2 files changed, 104 insertions(+), 10 deletions(-) diff --git a/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/index.js b/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/index.js index 6eec65fb..9dc9bb69 100644 --- a/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/index.js +++ b/zefie_wtvp_minisrv/ServiceVault/http_pc/viewergen/index.js @@ -291,14 +291,15 @@ function patchBinary(patchDataObject) { return patched_file; } + function generateSSID() { - var ssid_template = "91xxxY0xx0b002xx"; + var ssid_template = "91xxxxxxaeb002"; var ssid = ssid_template; while (ssid.indexOf("x") != -1) { + // random hex char from 0-F ssid = ssid.replace("x", Math.floor(Math.random() * 16).toString(16)) - } - ssid = ssid.replace("Y", Math.floor(Math.random() * 7)); - return ssid; + } + return ssid + wtvshared.getSSIDCRC(ssid); } function buildProfile(build) { @@ -517,15 +518,31 @@ window.onload = function() { updateFeatureBits(); } +function getSSIDCRC(ssid) { + let crc = 0; + var ssid = ssid.substr(0, 14); + for (let i = 0; i < ssid.length; i += 2) { + let inbyte = parseInt(ssid.substring(i, i+2), 16); + for (let ii = 8; ii > 0; ii--) { + let mix = (crc ^ inbyte) & 0x01; + crc >>= 1; + if (mix != 0) crc ^= 0x8C; + inbyte >>= 1; + } + + if(isNaN(crc)) crc = 0; + } + return crc.toString(16); +} + function generateSSID() { - var ssidForm = document.getElementById('client_ssid'); - var ssid_template = "91xxxY0xx0b002xx"; + var ssid_template = "91xxxxxxaeb002"; var ssid = ssid_template; while (ssid.indexOf("x") != -1) { - ssid = ssid.replace("x",Math.floor(Math.random() * 16).toString(16)) - } - ssid = ssid.replace("Y", Math.floor(Math.random() * 7)); - ssidForm.value = ssid; + // random hex char from 0-F + ssid = ssid.replace("x", Math.floor(Math.random() * 16).toString(16)) + } + document.getElementById('client_ssid').value = ssid + getSSIDCRC(ssid); } function validateForm() { diff --git a/zefie_wtvp_minisrv/includes/WTVShared.js b/zefie_wtvp_minisrv/includes/WTVShared.js index a4edae3a..a3947bb7 100644 --- a/zefie_wtvp_minisrv/includes/WTVShared.js +++ b/zefie_wtvp_minisrv/includes/WTVShared.js @@ -41,6 +41,25 @@ class WTVShared { } } + getSSIDCRC(ssid) { + let crc = 0; + var ssid = ssid.substr(0, 14); + + for (let i = 0; i < ssid.length; i += 2) { + let inbyte = parseInt(ssid.substring(i, i + 2), 16); + for (let ii = 8; ii > 0; ii--) { + let mix = (crc ^ inbyte) & 0x01; + crc >>= 1; + if (mix != 0) crc ^= 0x8C; + inbyte >>= 1; + } + + if (isNaN(crc)) crc = 0; + } + + return crc.toString(16); + } + atob(a) { const CryptoJS = require('crypto-js'); const enc = CryptoJS.enc.Base64.parse(a); @@ -364,6 +383,64 @@ class WTVShared { } } + parseSSID(ssid) { + var ssid_obj = {}; + switch (ssid.substring(0, 2)) { + case "01": + ssid_obj.boxType = "Internal"; + break; + case "81": + ssid_obj.boxType = "Retail"; + break; + case "91": + // not a definitive way to detect a viewer + ssid_obj.boxType = "Viewer"; + break; + } + ssid_obj.unique_id = ssid.substring(2, 8); + switch (ssid.substring(10, 14).toUpperCase()) { + case "B002": + ssid_obj.region = "US/Canada"; + break; + case "B102": + ssid_obj.region = "Japan"; + break; + } + + switch (ssid.substring(8, 10).toUpperCase()) { + case "00": + if (ssid_obj.region == "Japan") ssid_obj.manufacturer = "Panasonic"; + else ssid_obj.manufacturer = "Sony"; + break; + case "10": + case "50": + ssid_obj.manufacturer = "Philips"; + break; + case "40": + ssid_obj.manufacturer = "Mitsubishi"; + break; + case "70": + ssid_obj.manufacturer = "Samsung"; + break; + case "80": + ssid_obj.manufacturer = "EchoStar"; + break; + case "90": + ssid_obj.manufacturer = "RCA"; + break; + case "AE": + ssid_obj.manufacturer = "zefie & MattMan69"; + break; + } + ssid_obj.crc = ssid.substring(14) + return ssid_obj; + } + + getManufacturer(ssid) { + return parseSSID(ssid).manufacturer || null; + } + + moveObjectElement(currentKey, afterKey, obj, caseInsensitive = false) { var result = {}; if (caseInsensitive) {