Как прочитать журнал отслеживания NFC на Android?

#android

#Android

Вопрос:

На Android я могу вывести состояние оборудования NFC с помощью

 > adb shell dumpsys nfc
  

Это генерирует некоторый вывод, и в конце появляется журнал отслеживания:

 --- BEGIN:NFCSNOOP_LOG_SUMMARY (6009 bytes in) ---
ASJeKl5VrwUAeJyt2H9wVEcdAPDvvn33Lne53OUuR5LLhSQHCT8DcVIIQbAQTAuiEYMV65COBmgcTYuF1NYOCqFJUQZbEBTq0JZrAacWZUoZIIygEJm2yBRG2ynS0iIQ
px2tFE1rB3/k3Pfu9vvd3fb6l2GAl729z35397s/7mzwfmqAgQM75wOwucChWPyNeuUMKqF/qlvMEsDDFhQAs3jvg339VgfPWGC3RFl5EcxuDQKkIMhtbvk45xaLwsWY
C1hhq72AjWS8n9uZ34ZaFx4DjNkQqRFyi2jbBzdF3UYsC8TznErxPA8sYAUwv048LwMfE2 AANR5UdkOZ8xizA LZ7pvs23IMM7hlULxKgdfCJLgvS2w3mK9LC3aCsHL
0WyRJYtsqM6FItqc6M 1Kd6/SYTIOFgOvJ0ST18TrYk/8K2irO7ASEwp/iCUrc2hLeBV4A4UNygV2qd7FYIc/p2tUOjA xOUCismS2FlkRR2JZQKp8Z7FUQPLxTICsON
SoVVpV4Fx4Hn/e4Acc7S19tg40l3dPhCEL/dAhn42J9rIgAOSq0hs4Z42YFHk7IBfwD tsBrwBEN Jn47wqTL7YG4PNT8MVWd4gPeHMncmNxAXRUeK/5gC1mtgPnfUrU
 xv 31HHYfM9D4sEFVnpjlZLWvzjjRvz2RD7opuEIrsq4H0vQquMTYzf2nU3YzHL8me4BdxmK0T/imBGNqeDvJHVNDP2BbdbzgTK3MB0 VwK28QMQoqXBETmimTlzCfy
bj1z2D0i8zPulLdwBjac tKCIKQc9/EPfW6peAzCn7Mt a1sSz4YWyzpAjgOHu2zXNCG14oRu ZOfxbrDiP2DWZgT4QJ265jB0sQW lWyGKzKxCbxg2sLU5Yv449EkPs
90GM7OsliB0bZWAvRgl7SMeWlCJ2eeDJaA47MRWx5Sb26CjCHtSx7ghihwowskdGIfa5IgMLKhOwTsdupQm4fCwmMXtSDnOg/Q4P42wi GF10PvFZgnGgrl9VmmnbiLl
02VlV5xVLp9jsCbbfsSfzS3KqydojH4XwG6lJmO3xpp5taGa2HU8D3v7OGTPTj/E5GjNRTYTNdhjVTRaFtNGa0wZYkdo6D9TjNgnywzsASUp/qhjx2jop825WpbDXpyJ
2Jy4gf0lkjddN8cR 3ktRjajGbG/2wY2rGDrdWxfFLFP35v4UFIE4aoZmaNgP9axTdTNN2iJQ4xy3zKwPiVd0zr2agqxmruYXEgvUJIsSn3M5rNZx7oqEPNFMLIlFNkz
ZmRWJWFDOlY3GrGrTYMS2/UpxI7 x8CeHU3pG7TypO8AsT8JY4xbxyLbnzRYFiP2hXyL7SB1/dnb7rVzbLiaSXbhNIOdl6KuZ/Suv3szYq00w60RjLHBZ2CPK6visI4l
JyF2dyIpsXdoVewxN/FiBZvM9UlJIpZ2MLKrCcRmlBjYgHIiLNOxmbRBDV94ZW8Oe6sdsQ2VBvacEtlOvZsjtF530Ly RzvJy2butZYQtl/Heuis2t/RIfe4S3S8fHaM
gR0dlXeJ7aH1upZjZFU0m7Z5JB8eTdg2HVtKR/KNo2GJrS5F7OAiA7tYTOl7Il/6/rMa2f/6MMY0zetWc1O/EiX2HTsPe64c2dlNPaU5dtNpZJ0pBtuldL1P73o15d6k
MoxxFV1tBiLmjlxN2G907G0684f MShnuHkcHY7m9v6Uck/6jo7dSdv7GBq9 yiy183R 22SsL/q2EbKvbvO10tsmCJbYCby2FjeRB6i3AvbGFlvOWIPVRnY5XrCfqpj
a2iJ9Y97T67X09MRA3PMOssJ26hjd9Din0JjNpP24WEzsu8q3dyqY8cpsu5rXGJfobvlwHIDey1O6bs731nxZBOyi0IY4xa6/54sNdgDymK7lG xnadLzzNDgUCObVuD
bH3AYF9S9r3retcZ5V66BGM8TGfu82buPaAc4K/rWCNNSiKzYV4O4 MR 1nCwEYr95TH9evY05WIrSvEyObHEXvLvO6 OV5JF1vDYnTrTJ bJbGOVsSeizPjo0gFTUU6
32XWT/veDrp/XmlCtmmSeRsoIbaN5WGb25BNhj7hz7H3NyBbYh6TlcoxebPe9et0RUvTB6ezUcRumPf4LcpKeUmf4VW0IbQfuFSYw8poDW8vN7BfKrn3lI7V0AwH6Z5y
E83wOXOrGlG6adxTliYQC/2iVGJv0pn7bfMj3Q Ubm7SsTB1cyN99vmAztxax8AGE4R9T8cm0MHz6vEEsE6/ 4XVDfcrDfEoSot/VCtLt8Wx9LGdTJaGSrH09BYs/SaV
1u/D0s3lWDq7OyhDP0ULetAchz1K6Pfra7CXQq i/X9pkj4SzTKwJcqgHtLHYW0dYk/vmyqxDfRZ4aw5qC1JWiy/zrdY7qtC9gxgjF mxVJn3sgPJoidn4/dTslZtTWU
Hd0I7HZvl52 ELPs3gyDXvFbrw92dbmljsUtGy6GcPz/NQ3krHR2O7I03sCl1jP wxqHr64UkwkQ5fCrbrdD7reHy8VMel/RgXv6F8WxuTPU3PdPxiTcVf9R8O4VkINr
b5PwEVDgE3sLEW6MIjxyJSjhZYmPgv1dEi5fKuHHHAVuPOJHeG4Nwg1/6gnl5mvHNpyveebxdUk5cX5o3LTDOEvNtIUspGxfbW5ug8o9zFiob9CqX93jk1gfHV n7zSw
tUqC5v1sl6IN EwSY3y3E9m95hF7IUJsbb4EPSU3vP8BEZ41ZA==
--- END:NFCSNOOP_LOG_SUMMARY ---
  

Мне интересно прочитать содержимое этого файла, потому что я надеюсь найти всю низкоуровневую связь NFC.

Я думаю, что этот контент закодирован в base64, но когда я передаю его через декодер, он все еще слишком гибок:

 > base64 --decode -i nfc_snoop_log_base64.txt -o nfc_snoop_log.txt
  

(К сожалению, я не могу опубликовать вывод, поскольку он содержит символы, которые не принимаются SO.)

Из исходного кода, который генерирует этот журнал (https://android.googlesource.com/platform/system/nfc/ /master/src/adaptation/debug_nfcsnoop.cc ), У меня такое ощущение, что содержимое также сжато, но когда я пытаюсь его разархивировать, я получаю сообщение об ошибке:

 > base64 --decode -i nfc_snoop_log_base64.txt -o nfc_snoop_log.zip
> unzip nfc_snoop_log.zip

Archive:  nfc_snoop_log.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of nfc_snoop_log.zip or
        nfc_snoop_log.zip.zip, and cannot find nfc_snoop_log.zip.ZIP, period.
  

Кто-нибудь знает, как сделать журнал отслеживания NFC доступным для чтения человеком?

Ответ №1:

После небольшого изучения кода, который вы связали с исходным кодом Android, используемый формат сжатия — Zlib. Однако после сжатия к нему добавляется заголовок NFCSnoop. После декодирования base64, если вы посмотрите на первые 9 байтов, вы найдете заголовок zlib. Этот заголовок nfcsnoop действительно содержит время начала дампа, которое позже будет начальной точкой delta_time_ms. После удаления заголовка nfcsnoop и запуска его через pigz с параметром -z у вас должен быть декодированный буфер.

Буфер представляет собой необработанные пакеты NFC, которые состоят из их собственного заголовка следующим образом: length, uint16 delta_time_ms, uint32 is_received, uint8

После этого вы получаете данные.

Редактировать: похоже, что это пакеты NFC_HDR, которые потребуют дополнительного декодирования с использованием сведений о типе NFC в Android.

Правка 2: по-видимому, не NFC_HDR. Пакеты управления NCI.

Правка 3: в итоге я написал программу для ее декодирования, так как мне нужно было сделать это самому.

Он расположен здесь:https://github.com/VivoKey/NFCSnoopDecoder

Короче говоря, это заголовок, а не байты данных после заголовка. Длина равна uint16.