Nano Hash - криптовалюты, майнинг, программирование

Разбор CDMA PDU на Android

Я написал программу для декодирования двухточечного SMS-сообщения CDMA 3GPP2. Я протестировал его на паре шестнадцатеричных строк CDMA PDU, которые нашел в Интернете, и все работает отлично. Однако, когда я пытаюсь реализовать это для всех входящих текстовых сообщений на платформе Android, это всегда терпит неудачу.

Я взглянул на входящий PDU, и, похоже, он не соответствует той схеме, к которой я привык. Может ли кто-нибудь объяснить, в каком формате этот PDU, или что мне не хватает для правильного декодирования этого PDU? Есть ли дополнительные заголовки или поля, которые я не принимаю во внимание?

Пример PDU, извлеченный из входящего текстового сообщения на моем телефоне:

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000

Все CDMA pdus, которые я нашел и проверил на своем парсере, выглядят примерно так:

00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847

Перевозчик: Verizon Телефон: Samsung Galaxy S Fascinate работающий Android 2.3.3

25.06.2012

Ответы:


1

См. javadoc из $SDK/sources/android-16/com/android/internal/telephony/cdma/SmsMessage:

/**
 * Creates byte array (pseudo pdu) from SMS object.
 * Note: Do not call this method more than once per object!
 */

... так что он не соответствует какому-то конкретному стандарту CDMA. Однако вы можете расшифровать его; поэтому в изобразительном искусстве ASCII: -

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000
--------messageType     --digitMode                   --------bearerReply   ------------------------------------------------------bearer data
        --------teleService --ton --------------------src     --replySeqNo  --messageID --msts          --userdata
                --------serviceCategory                         --errorClass  --len   --XX--len           --len
                          --numberMode                            --causeCode   ------      ------------2012/06/24 20:56:11
                              --npi                                 --------bearerDataLength                ----------------------userdata
                                --len                                           

Обратите внимание, что я думаю, что вы сделали ошибку вырезания / вставки в своем сообщении - байт 00, помеченный «XX», я думаю, не должен быть там - к счастью, легко определить дату и работать в обратном порядке. Итак, это сообщение от 6789101674 с данными пользователя:

104C2CF9F3F5EBD73E7000, первые пять бит которого показывают, что он закодирован 7-битным (0x02). Сдвинув оставшуюся часть пользовательских данных на 5 бит влево, у нас осталось:

09859f3e7ebd7ae7ce00
--len(septets) 9 septets == 63 bits, so we expect 8 bytes of body
  ----------------7bit-body

Итак, ваше декодированное 7-битное тело - "Bggguuugg".

09.07.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..