Beispiel #1
0
        public static TerminalResponse Parse(byte[] Buffer, int Offset)
        {
            TerminalResponse Response = new TerminalResponse();

            // Get root node
            if (Buffer.Length >= (Offset + 8))
            {
                int NodeNumber = BitConverter.ToInt32(Buffer, Offset);
                int NodeSize   = BitConverter.ToInt32(Buffer, Offset + 4);
                int End        = NodeSize + Offset + 8;
                int Index      = Offset + 8;
                if ((NodeNumber == 0x10000) && (End <= Buffer.Length))
                {
                    // Get subnodes
                    while (Index < End)
                    {
                        NodeNumber = BitConverter.ToInt32(Buffer, Index);
                        NodeSize   = BitConverter.ToInt32(Buffer, Index + 4);
                        byte[] Raw = new byte[NodeSize];
                        Array.Copy(Buffer, Index + 8, Raw, 0, NodeSize);
                        Response.RawEntries.Add(NodeNumber, Raw);
                        Index += NodeSize + 8;
                    }
                }
            }

            // Parse subnodes
            Response.RawEntries.TryGetValue(3, out Response.PublicId);
            Response.RawEntries.TryGetValue(7, out Response.RootKeyHash);

            return(Response);
        }
        private void StartLoadDeviceInfo()
        {
            //byte[] Imsi = CurrentModel.ExecuteJsonMethodAsBytes("ReadImsi", "Imsi"); // 9 bytes: 08 29 40 40 ...
            //string BatteryLevel = CurrentModel.ExecuteJsonMethodAsString("ReadBatteryLevel", "BatteryLevel");
            //string SystemAsicVersion = CurrentModel.ExecuteJsonMethodAsString("ReadSystemAsicVersion", "SystemAsicVersion"); // 8960 -> Chip SOC version
            //string OperatorName = CurrentModel.ExecuteJsonMethodAsString("ReadOperatorName", "OperatorName"); // 000-DK
            //string ManufacturerModelName = CurrentModel.ExecuteJsonMethodAsString("ReadManufacturerModelName", "ManufacturerModelName"); // RM-821_eu_denmark_251
            //string AkVersion = CurrentModel.ExecuteJsonMethodAsString("ReadAkVersion", "AkVersion"); // 9200.10521
            //string BspVersion = CurrentModel.ExecuteJsonMethodAsString("ReadBspVersion", "BspVersion"); // 3051.40000
            //string ProductCode = CurrentModel.ExecuteJsonMethodAsString("ReadProductCode", "ProductCode"); // 059Q9D7
            //string SecurityMode = CurrentModel.ExecuteJsonMethodAsString("GetSecurityMode", "SecMode"); // Restricted
            //string SerialNumber = CurrentModel.ExecuteJsonMethodAsString("ReadSerialNumber", "SerialNumber"); // 356355051883955 = IMEI
            //string SwVersion = CurrentModel.ExecuteJsonMethodAsString("ReadSwVersion", "SwVersion"); // 3051.40000.1349.0007
            //string ModuleCode = CurrentModel.ExecuteJsonMethodAsString("ReadModuleCode", "ModuleCode"); // 0205137
            //byte[] PublicId = CurrentModel.ExecuteJsonMethodAsBytes("ReadPublicId", "PublicId"); // 0x14 bytes: a5 e5 ...
            //string Psn = CurrentModel.ExecuteJsonMethodAsString("ReadPsn", "Psn"); // CEP737370
            //string HwVersion = CurrentModel.ExecuteJsonMethodAsString("ReadHwVersion", "HWVersion"); // 6504 = 6.5.0.4
            //byte[] BtId = CurrentModel.ExecuteJsonMethodAsBytes("ReadBtId", "BtId"); // 6 bytes: bc c6 ...
            //byte[] WlanMacAddress1 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress1"); // 6 bytes
            //byte[] WlanMacAddress2 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress2"); // same
            //byte[] WlanMacAddress3 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress3"); // same
            //bool SimlockActive = CurrentModel.ExecuteJsonMethodAsBoolean("ReadSimlockActive", "SimLockActive"); // false
            //string Version = CurrentModel.ExecuteJsonMethodAsString("GetVersion", "HelloString"); // Resultvars: HelloString Version BuildDate BuildType
            //string ServiceTag = CurrentModel.ExecuteJsonMethodAsString("ReadServiceTag", "ServiceTag"); // error
            //byte[] RfChipsetVersion = CurrentModel.ExecuteJsonMethodAsBytes("ReadRfChipsetVersion", "RfChipsetVersion"); // error
            //byte[] Meid = CurrentModel.ExecuteJsonMethodAsBytes("ReadMeid", "Meid"); // error
            //string Test = CurrentModel.ExecuteJsonMethodAsString("ReadManufacturingData", ""); -> This method is only possible in Label-mode.

            byte[] AsskMask = new byte[0x10] {
                1, 0, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64
            };
            byte[] Challenge = new byte[0x88];
            Dictionary <string, object> Params = new();

            Params.Add("AsskMask", AsskMask);
            Params.Add("Challenge", Challenge);
            Params.Add("AsicIndex", 0);
            byte[] TerminalResponseBytes = CurrentModel.ExecuteJsonMethodAsBytes("TerminalChallenge", Params, "TerminalResponse");
            if (TerminalResponseBytes != null)
            {
                TerminalResponse TerminalResponse = Terminal.Parse(TerminalResponseBytes, 0);
                if (TerminalResponse != null)
                {
                    PublicID = TerminalResponse.PublicId;
                    LogFile.Log("Public ID: " + Converter.ConvertHexToString(PublicID, " "));
                    RootKeyHash = TerminalResponse.RootKeyHash;
                    LogFile.Log("RootKeyHash: " + Converter.ConvertHexToString(RootKeyHash, " "));
                }
            }

            ManufacturerModelName = CurrentModel.ExecuteJsonMethodAsString("ReadManufacturerModelName", "ManufacturerModelName"); // RM-821_eu_denmark_251
            LogFile.Log("Manufacturer Model Name: " + ManufacturerModelName);
            ProductCode = CurrentModel.ExecuteJsonMethodAsString("ReadProductCode", "ProductCode");                               // 059Q9D7
            LogFile.Log("Product Code: " + ProductCode);
            Firmware = CurrentModel.ExecuteJsonMethodAsString("ReadSwVersion", "SwVersion");                                      // 3051.40000.1349.0007
            LogFile.Log("Firmware: " + Firmware);

            IMEI = CurrentModel.ExecuteJsonMethodAsString("ReadSerialNumber", "SerialNumber");        // IMEI
            LogFile.Log("IMEI: " + IMEI);
            BluetoothMac = CurrentModel.ExecuteJsonMethodAsBytes("ReadBtId", "BtId");                 // 6 bytes: bc c6 ...
            LogFile.Log("Bluetooth MAC: " + Converter.ConvertHexToString(BluetoothMac, " "));
            WlanMac = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress1"); // 6 bytes
            LogFile.Log("WLAN MAC: " + Converter.ConvertHexToString(WlanMac, " "));

            IsBootloaderSecurityEnabled = (bool)CurrentModel.ExecuteJsonMethodAsBoolean("ReadProductionDoneState", "ProductionDone");
            LogFile.Log("Bootloader Security: " + ((bool)IsBootloaderSecurityEnabled ? "Enabled" : "Disabled"));

            Params = new Dictionary <string, object>
            {
                { "ID", 3534 },
                { "NVData", new byte[] { 0 } }
            };
            CurrentModel.ExecuteJsonMethod("WriteNVData", Params); // Error: 150

            Params = new Dictionary <string, object>
            {
                { "ID", 3534 }
            };
            byte[] NV3534 = CurrentModel.ExecuteJsonMethodAsBytes("ReadNVData", Params, "NVData"); // Error: value not written
        }